diff options
author | Uoti Urpala <uau@mplayer2.org> | 2011-08-08 06:52:39 +0300 |
---|---|---|
committer | Uoti Urpala <uau@mplayer2.org> | 2011-08-08 07:02:01 +0300 |
commit | 8d1e5354e43d25e839c953bd0319163cf6c95d82 (patch) | |
tree | cc9fab8b001adf47fa5cb1e1927ce3aaae072c66 /libmpcodecs | |
parent | f5d493d017519997ea1d5e09245a4dfa063698c7 (diff) | |
download | mpv-8d1e5354e43d25e839c953bd0319163cf6c95d82.tar.bz2 mpv-8d1e5354e43d25e839c953bd0319163cf6c95d82.tar.xz |
subs: libass: apply option changes to all track types
Libass rendering uses two renderer objects to support both VSFilter
aspect ratio (mis)behavior emulation and correct rendering. When
option values were changed during playback the changes were applied to
the renderer used for the currently active track only, and old values
could be used if the user then switched to a track using the other
renderer object. Fix to update both renderers.
Diffstat (limited to 'libmpcodecs')
-rw-r--r-- | libmpcodecs/vf_ass.c | 6 | ||||
-rw-r--r-- | libmpcodecs/vf_vo.c | 8 |
2 files changed, 11 insertions, 3 deletions
diff --git a/libmpcodecs/vf_ass.c b/libmpcodecs/vf_ass.c index a3a47f6b9e..76a08807e7 100644 --- a/libmpcodecs/vf_ass.c +++ b/libmpcodecs/vf_ass.c @@ -362,7 +362,11 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts) vf->priv->renderer_vsfilter : vf->priv->renderer_realaspect; if (sub_visibility && renderer && osd->ass_track && (pts != MP_NOPTS_VALUE)) { - mp_ass_reload_options(renderer, vf->opts, &osd->ass_force_reload); + if (osd->ass_force_reload) { + mp_ass_reload_options(vf->priv->renderer_realaspect, vf->opts); + mp_ass_reload_options(vf->priv->renderer_vsfilter, vf->opts); + } + osd->ass_force_reload = false; images = ass_render_frame(renderer, osd->ass_track, (pts + sub_delay) * 1000 + .5, NULL); } diff --git a/libmpcodecs/vf_vo.c b/libmpcodecs/vf_vo.c index 8f2f541fb4..62ec64ef3f 100644 --- a/libmpcodecs/vf_vo.c +++ b/libmpcodecs/vf_vo.c @@ -175,12 +175,16 @@ static int control(struct vf_instance *vf, int request, void* data) ass_set_aspect_ratio(renderer, scale, 1); } - mp_ass_reload_options(renderer, vf->opts, &osd->ass_force_reload); + if (osd->ass_force_reload) { + mp_ass_reload_options(vf->priv->renderer_realaspect, vf->opts); + mp_ass_reload_options(vf->priv->renderer_vsfilter, vf->opts); + } images.imgs = ass_render_frame(renderer, osd->ass_track, (pts+sub_delay) * 1000 + .5, &images.changed); - if (!vf->priv->prev_visibility) + if (!vf->priv->prev_visibility || osd->ass_force_reload) images.changed = 2; + osd->ass_force_reload = false; vf->priv->prev_visibility = true; } else vf->priv->prev_visibility = false; |