diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-11-17 20:16:49 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-11-18 12:22:44 +0200 |
commit | b2dd97a3d0f6ba6d786aff38ef7e97e80eb65159 (patch) | |
tree | 9d100decbaf764b49a2c98ce60050766a9515277 /ext | |
parent | c3933c20821907238e0d7570585396c7282155d5 (diff) | |
download | gstreamer-plugins-bad-b2dd97a3d0f6ba6d786aff38ef7e97e80eb65159.tar.gz |
assrender: Mark pad as needing reconfiguration again if reconfiguration failed
Also return FLUSHING instead of NOT_NEGOTIATED on flushing pads.
https://bugzilla.gnome.org/show_bug.cgi?id=774623
Diffstat (limited to 'ext')
-rw-r--r-- | ext/assrender/gstassrender.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c index b4e385bbe..1dbc4d1a8 100644 --- a/ext/assrender/gstassrender.c +++ b/ext/assrender/gstassrender.c @@ -930,12 +930,16 @@ gst_ass_render_negotiate (GstAssRender * render, GstCaps * caps) gst_caps_unref (overlay_caps); gst_caps_unref (caps); + if (!ret) + gst_pad_mark_reconfigure (render->srcpad); + return ret; no_format: { if (caps) gst_caps_unref (caps); + gst_pad_mark_reconfigure (render->srcpad); return FALSE; } } @@ -1160,8 +1164,15 @@ gst_ass_render_chain_video (GstPad * pad, GstObject * parent, guint64 start, stop, clip_start = 0, clip_stop = 0; ASS_Image *ass_image; - if (gst_pad_check_reconfigure (render->srcpad)) - gst_ass_render_negotiate (render, NULL); + if (gst_pad_check_reconfigure (render->srcpad)) { + if (!gst_ass_render_negotiate (render, NULL)) { + gst_pad_mark_reconfigure (render->srcpad); + if (GST_PAD_IS_FLUSHING (render->srcpad)) + goto flushing; + else + goto not_negotiated; + } + } if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) goto missing_timestamp; @@ -1379,6 +1390,13 @@ missing_timestamp: gst_buffer_unref (buffer); return GST_FLOW_OK; } +not_negotiated: + { + GST_ASS_RENDER_UNLOCK (render); + GST_DEBUG_OBJECT (render, "not negotiated"); + gst_buffer_unref (buffer); + return GST_FLOW_NOT_NEGOTIATED; + } flushing: { GST_ASS_RENDER_UNLOCK (render); |