From 5904de25e3b78b78ca6ea81e18d436377d426a43 Mon Sep 17 00:00:00 2001 From: reimar Date: Tue, 30 Dec 2008 10:38:29 +0000 Subject: [PATCH] Avoid flickering OSD with -vf yadif=1 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28209 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpcodecs/vf.c | 8 ++++++++ libmpcodecs/vf.h | 1 + libmpcodecs/vf_yadif.c | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libmpcodecs/vf.c b/libmpcodecs/vf.c index 37ada3c59e..d04d7f0ecc 100644 --- a/libmpcodecs/vf.c +++ b/libmpcodecs/vf.c @@ -655,6 +655,14 @@ int vf_next_control(struct vf_instance_s* vf, int request, void* data){ return vf->next->control(vf->next,request,data); } +void vf_extra_flip(struct vf_instance_s* vf) { + vf_next_control(vf, VFCTRL_DRAW_OSD, NULL); +#ifdef CONFIG_ASS + vf_next_control(vf, VFCTRL_DRAW_EOSD, NULL); +#endif + vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL); +} + int vf_next_query_format(struct vf_instance_s* vf, unsigned int fmt){ int flags=vf->next->query_format(vf->next,fmt); if(flags) flags|=vf->default_caps; diff --git a/libmpcodecs/vf.h b/libmpcodecs/vf.h index 27a48eadf2..a2617ff164 100644 --- a/libmpcodecs/vf.h +++ b/libmpcodecs/vf.h @@ -112,6 +112,7 @@ int vf_next_config(struct vf_instance_s* vf, int width, int height, int d_width, int d_height, unsigned int flags, unsigned int outfmt); int vf_next_control(struct vf_instance_s* vf, int request, void* data); +void vf_extra_flip(struct vf_instance_s* vf); int vf_next_query_format(struct vf_instance_s* vf, unsigned int fmt); int vf_next_put_image(struct vf_instance_s* vf,mp_image_t *mpi, double pts); void vf_next_draw_slice (struct vf_instance_s* vf, unsigned char** src, int* stride, int w,int h, int x, int y); diff --git a/libmpcodecs/vf_yadif.c b/libmpcodecs/vf_yadif.c index 971ad988e2..a8328d3f2a 100644 --- a/libmpcodecs/vf_yadif.c +++ b/libmpcodecs/vf_yadif.c @@ -440,7 +440,7 @@ static int continue_buffered_image(struct vf_instance_s *vf) if (correct_pts) break; if(i<(vf->priv->mode&1)) - vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL); + vf_extra_flip(vf); } vf->priv->buffered_i = 1; return ret;