summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libass/ass_mp.c12
-rw-r--r--libass/ass_mp.h3
-rw-r--r--libmpcodecs/vf_ass.c2
-rw-r--r--libmpcodecs/vf_vo.c2
4 files changed, 17 insertions, 2 deletions
diff --git a/libass/ass_mp.c b/libass/ass_mp.c
index a00f0cae66..b3b3963eef 100644
--- a/libass/ass_mp.c
+++ b/libass/ass_mp.c
@@ -259,3 +259,15 @@ ass_library_t* ass_init(void) {
free(path);
return priv;
}
+
+int ass_force_reload = 0; // flag set if global ass-related settings were changed
+
+ass_image_t* ass_mp_render_frame(ass_renderer_t *priv, ass_track_t* track, long long now, int* detect_change) {
+ if (ass_force_reload) {
+ ass_set_margins(priv, ass_top_margin, ass_bottom_margin, 0, 0);
+ ass_set_use_margins(priv, ass_use_margins);
+ ass_set_font_scale(priv, ass_font_scale);
+ ass_force_reload = 0;
+ }
+ return ass_render_frame(priv, track, now, detect_change);
+}
diff --git a/libass/ass_mp.h b/libass/ass_mp.h
index 1395b45f9d..47e3f2787a 100644
--- a/libass/ass_mp.h
+++ b/libass/ass_mp.h
@@ -50,4 +50,7 @@ typedef struct {
int changed;
} mp_eosd_images_t;
+extern int ass_force_reload;
+ass_image_t* ass_mp_render_frame(ass_renderer_t *priv, ass_track_t* track, long long now, int* detect_change);
+
#endif /* ASS_MP_H */
diff --git a/libmpcodecs/vf_ass.c b/libmpcodecs/vf_ass.c
index 9f4c91961a..a04f0e557a 100644
--- a/libmpcodecs/vf_ass.c
+++ b/libmpcodecs/vf_ass.c
@@ -326,7 +326,7 @@ static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts)
{
ass_image_t* images = 0;
if (sub_visibility && vf->priv->ass_priv && ass_track && (pts != MP_NOPTS_VALUE))
- images = ass_render_frame(vf->priv->ass_priv, ass_track, (pts+sub_delay) * 1000 + .5, NULL);
+ images = ass_mp_render_frame(vf->priv->ass_priv, ass_track, (pts+sub_delay) * 1000 + .5, NULL);
prepare_image(vf, mpi);
if (images) render_frame(vf, mpi, images);
diff --git a/libmpcodecs/vf_vo.c b/libmpcodecs/vf_vo.c
index 8dff24eab0..f0daa59e62 100644
--- a/libmpcodecs/vf_vo.c
+++ b/libmpcodecs/vf_vo.c
@@ -134,7 +134,7 @@ static int control(struct vf_instance_s* vf, int request, void* data)
ass_set_aspect_ratio(vf->priv->ass_priv, (double)res.w / res.h);
}
- images.imgs = ass_render_frame(vf->priv->ass_priv, ass_track, (pts+sub_delay) * 1000 + .5, &images.changed);
+ images.imgs = ass_mp_render_frame(vf->priv->ass_priv, ass_track, (pts+sub_delay) * 1000 + .5, &images.changed);
if (!vf->priv->prev_visibility)
images.changed = 2;
vf->priv->prev_visibility = 1;