summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2012-08-28 19:12:27 +0300
committerwm4 <wm4@nowhere>2012-09-18 21:04:46 +0200
commitfd52cb65f43d262493724899c7b0fb49971f745d (patch)
treeae6b38171d67b26ad05aaf107fb48ab8e63ab96e /libmpcodecs
parent62ccf6c5cccdf1a34a4b85f91615f0f8305b5279 (diff)
downloadmpv-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')
-rw-r--r--libmpcodecs/vf_vo.c16
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, &param) == 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;
}
}