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