From 22c533e6edcfa76a736bc37693848835711bdda8 Mon Sep 17 00:00:00 2001 From: henry Date: Sun, 10 Apr 2005 11:54:31 +0000 Subject: defer loading of the font after display size change to avoid useless reloading - hack, but needed because for most of the vo's the panscan information and screen size are updated asynchronously git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@15086 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libvo/sub.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'libvo') diff --git a/libvo/sub.c b/libvo/sub.c index 655c4615d6..c627812167 100644 --- a/libvo/sub.c +++ b/libvo/sub.c @@ -758,18 +758,40 @@ void free_osd_list(){ vo_osd_list=NULL; } +#define FONT_LOAD_DEFER 6 + int vo_update_osd(int dxs,int dys){ mp_osd_obj_t* obj=vo_osd_list; int chg=0; +#ifdef HAVE_FREETYPE + static int defer_counter = 0, prev_dxs = 0, prev_dys = 0; +#endif #ifdef HAVE_FREETYPE // here is the right place to get screen dimensions - if (!vo_font - || force_load_font - || ((dxs != vo_image_width || dys != vo_image_height) - && (subtitle_autoscale == 2 || subtitle_autoscale == 3))) { + if (((dxs != vo_image_width) + && (subtitle_autoscale == 2 || subtitle_autoscale == 3)) + || ((dys != vo_image_height) + && (subtitle_autoscale == 1 || subtitle_autoscale == 3))) + { + // screen dimensions changed + // wait a while to avoid useless reloading of the font + if (dxs == prev_dxs || dys == prev_dys) { + defer_counter++; + } else { + prev_dxs = dxs; + prev_dys = dys; + defer_counter = 0; + } + if (defer_counter >= FONT_LOAD_DEFER) force_load_font = 1; + } + + if (!vo_font || force_load_font) { force_load_font = 0; load_font_ft(dxs, dys); + prev_dxs = dxs; + prev_dys = dys; + defer_counter = 0; } #endif -- cgit v1.2.3