diff options
author | henry <henry@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-04-10 11:54:31 +0000 |
---|---|---|
committer | henry <henry@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-04-10 11:54:31 +0000 |
commit | 22c533e6edcfa76a736bc37693848835711bdda8 (patch) | |
tree | 6aaaaab1d9f0700d10814ee7aa556bd48de20599 | |
parent | 3627f7451a052f91d11270d11c9c8ffb7116e2d2 (diff) | |
download | mpv-22c533e6edcfa76a736bc37693848835711bdda8.tar.bz2 mpv-22c533e6edcfa76a736bc37693848835711bdda8.tar.xz |
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
-rw-r--r-- | libvo/sub.c | 30 |
1 files changed, 26 insertions, 4 deletions
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 |