summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorhenry <henry@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-04-10 11:54:31 +0000
committerhenry <henry@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-04-10 11:54:31 +0000
commit22c533e6edcfa76a736bc37693848835711bdda8 (patch)
tree6aaaaab1d9f0700d10814ee7aa556bd48de20599 /libvo
parent3627f7451a052f91d11270d11c9c8ffb7116e2d2 (diff)
downloadmpv-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
Diffstat (limited to 'libvo')
-rw-r--r--libvo/sub.c30
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