diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c index bd02e34800..474e7f7ede 100644 --- a/ext/assrender/gstassrender.c +++ b/ext/assrender/gstassrender.c @@ -651,7 +651,8 @@ gst_ass_render_setcaps_video (GstPad * pad, GstCaps * caps) render->height = 0; if (!gst_video_format_parse_caps (caps, &render->format, &render->width, - &render->height)) { + &render->height) || + !gst_video_parse_caps_framerate (caps, &render->fps_n, &render->fps_d)) { GST_ERROR_OBJECT (render, "Can't parse caps: %" GST_PTR_FORMAT, caps); ret = FALSE; goto out; @@ -963,6 +964,10 @@ gst_ass_render_chain_text (GstPad * pad, GstBuffer * buffer) gst_segment_to_running_time (&render->video_segment, GST_FORMAT_TIME, render->video_segment.last_stop); + if (render->fps_n && render->fps_d) + vid_running_time += + gst_util_uint64_scale (GST_SECOND, render->fps_d, render->fps_n); + if (sub_running_time > vid_running_time) { g_assert (render->subtitle_pending == NULL); g_mutex_lock (render->subtitle_mutex); diff --git a/ext/assrender/gstassrender.h b/ext/assrender/gstassrender.h index c680dc5ae3..e49b080c07 100644 --- a/ext/assrender/gstassrender.h +++ b/ext/assrender/gstassrender.h @@ -55,6 +55,7 @@ struct _GstAssRender GstVideoFormat format; gint width, height; + gint fps_n, fps_d; GstAssRenderBlitFunction blit; GMutex *subtitle_mutex;