diff options
author | Uoti Urpala <uau@mplayer2.org> | 2012-08-28 19:12:27 +0300 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2012-09-18 21:04:46 +0200 |
commit | fd52cb65f43d262493724899c7b0fb49971f745d (patch) | |
tree | ae6b38171d67b26ad05aaf107fb48ab8e63ab96e /libmpcodecs/vf_vo.c | |
parent | 62ccf6c5cccdf1a34a4b85f91615f0f8305b5279 (diff) | |
download | mpv-fd52cb65f43d262493724899c7b0fb49971f745d.tar.bz2 mpv-fd52cb65f43d262493724899c7b0fb49971f745d.tar.xz |
subs, vo: do sub bitmap change detection by comparing IDs
vo_vdpau and vo_gl cache the last subtitle bitmaps uploaded to video
card in case they stay the same over multiple frames. Detecting
whether the bitmaps have changed and should be re-uploaded was
somewhat fragile. Change the VO API to provide a bitmap ID which can
be compared with what the VO has to determine whether a new upload of
the bitmaps is needed.
Conflicts:
libvo/vo_gl.c
Note: the changes for vo_gl.c were not merged. Instead, eosd_packer is
modified to use the new way of detecting EOSD changes. This takes care
of vo_gl, vo_gl3 and vo_direct3d, which all render EOSD. They don't
need to be updated in turn.
Diffstat (limited to 'libmpcodecs/vf_vo.c')
-rw-r--r-- | libmpcodecs/vf_vo.c | 16 |
1 files changed, 1 insertions, 15 deletions
diff --git a/libmpcodecs/vf_vo.c b/libmpcodecs/vf_vo.c index 076850c8c2..3aec40cd15 100644 --- a/libmpcodecs/vf_vo.c +++ b/libmpcodecs/vf_vo.c @@ -34,7 +34,6 @@ struct vf_priv_s { struct vo *vo; - bool prev_visibility; double scale_ratio; }; #define video_out (vf->priv->vo) @@ -77,9 +76,6 @@ static int config(struct vf_instance *vf, vf->priv->scale_ratio = (double) d_width / d_height * height / width; - // force EOSD change detection reset - vf->priv->prev_visibility = false; - return 1; } @@ -121,27 +117,17 @@ static int control(struct vf_instance *vf, int request, void *data) }; return vo_control(video_out, VOCTRL_GET_EQUALIZER, ¶m) == VO_TRUE; } - case VFCTRL_INIT_EOSD: { - vf->priv->prev_visibility = false; - return CONTROL_TRUE; - } - case VFCTRL_DRAW_EOSD: { struct osd_state *osd = data; osd->dim = (struct mp_eosd_res){0}; if (!video_out->config_ok || - vo_control(video_out, VOCTRL_GET_EOSD_RES, &osd->dim) != true) { - vf->priv->prev_visibility = false; + vo_control(video_out, VOCTRL_GET_EOSD_RES, &osd->dim) != true) return CONTROL_FALSE; - } osd->normal_scale = 1; osd->vsfilter_scale = vf->priv->scale_ratio; osd->unscaled = vf->default_caps & VFCAP_EOSD_UNSCALED; struct sub_bitmaps images; sub_get_bitmaps(osd, &images); - if (!vf->priv->prev_visibility) - images.changed = 2; - vf->priv->prev_visibility = true; return vo_control(video_out, VOCTRL_DRAW_EOSD, &images) == VO_TRUE; } } |