summaryrefslogtreecommitdiff
path: root/ext/assrender
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-11-17 20:16:49 +0200
committerSebastian Dröge <sebastian@centricular.com>2016-11-18 12:22:44 +0200
commitb2dd97a3d0f6ba6d786aff38ef7e97e80eb65159 (patch)
tree9d100decbaf764b49a2c98ce60050766a9515277 /ext/assrender
parentc3933c20821907238e0d7570585396c7282155d5 (diff)
downloadgstreamer-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/assrender')
-rw-r--r--ext/assrender/gstassrender.c22
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);