summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2011-08-08 06:52:39 +0300
committerUoti Urpala <uau@mplayer2.org>2011-08-08 07:02:01 +0300
commit8d1e5354e43d25e839c953bd0319163cf6c95d82 (patch)
treecc9fab8b001adf47fa5cb1e1927ce3aaae072c66 /libmpcodecs
parentf5d493d017519997ea1d5e09245a4dfa063698c7 (diff)
downloadmpv-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.c6
-rw-r--r--libmpcodecs/vf_vo.c8
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;