# HG changeset patch # User henry # Date 1113134071 0 # Node ID 1f8a1de5585c7536a7081cc60fe57794b56a81f0 # Parent c0af322fbe001849cff14c43a832bd5ac493dcba 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 diff -r c0af322fbe00 -r 1f8a1de5585c libvo/sub.c --- 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