Mercurial > mplayer.hg
changeset 15085:1f8a1de5585c
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
author | henry |
---|---|
date | Sun, 10 Apr 2005 11:54:31 +0000 |
parents | c0af322fbe00 |
children | c9eee448e5b2 |
files | libvo/sub.c |
diffstat | 1 files changed, 26 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/libvo/sub.c Sun Apr 10 10:10:48 2005 +0000 +++ b/libvo/sub.c Sun Apr 10 11:54:31 2005 +0000 @@ -758,18 +758,40 @@ 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