diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-11-17 20:21:17 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-11-18 12:22:44 +0200 |
commit | 0f657cec07665512c9447b018d5c0167242b6388 (patch) | |
tree | 71dadd41f1571ebb49f3c3fd69029dee3bcde15c /gst | |
parent | 279fb3d99fa2df1c87976a70a75ece4ebb3ff7b5 (diff) | |
download | gstreamer-plugins-bad-0f657cec07665512c9447b018d5c0167242b6388.tar.gz |
vc1parse: Mark pad as needing reconfiguration again if it failed
And return FLUSHING instead of NOT_NEGOTIATED on flushing pads.
https://bugzilla.gnome.org/show_bug.cgi?id=774623
Diffstat (limited to 'gst')
-rw-r--r-- | gst/videoparsers/gstvc1parse.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gst/videoparsers/gstvc1parse.c b/gst/videoparsers/gstvc1parse.c index 915e0fc86..df54a241f 100644 --- a/gst/videoparsers/gstvc1parse.c +++ b/gst/videoparsers/gstvc1parse.c @@ -479,6 +479,8 @@ gst_vc1_parse_renegotiate (GstVC1Parse * vc1parse) /* Negotiate with downstream here */ GST_DEBUG_OBJECT (vc1parse, "Renegotiating"); + gst_pad_check_reconfigure (GST_BASE_PARSE_SRC_PAD (vc1parse)); + allowed_caps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (vc1parse)); if (allowed_caps && !gst_caps_is_empty (allowed_caps) && !gst_caps_is_any (allowed_caps)) { @@ -502,6 +504,7 @@ gst_vc1_parse_renegotiate (GstVC1Parse * vc1parse) GST_ERROR_OBJECT (vc1parse, "Empty caps, downstream doesn't support %s", parse_format_to_string (vc1parse->format)); gst_caps_unref (tmp); + gst_pad_mark_reconfigure (GST_BASE_PARSE_SRC_PAD (vc1parse)); return FALSE; } @@ -537,6 +540,7 @@ gst_vc1_parse_renegotiate (GstVC1Parse * vc1parse) } else if (gst_caps_is_empty (allowed_caps)) { GST_ERROR_OBJECT (vc1parse, "Empty caps"); gst_caps_unref (allowed_caps); + gst_pad_mark_reconfigure (GST_BASE_PARSE_SRC_PAD (vc1parse)); return FALSE; } else { GST_DEBUG_OBJECT (vc1parse, "Using input header/stream format"); @@ -547,8 +551,10 @@ gst_vc1_parse_renegotiate (GstVC1Parse * vc1parse) if (allowed_caps) gst_caps_unref (allowed_caps); - if (!gst_vc1_parse_is_format_allowed (vc1parse)) + if (!gst_vc1_parse_is_format_allowed (vc1parse)) { + gst_pad_mark_reconfigure (GST_BASE_PARSE_SRC_PAD (vc1parse)); return FALSE; + } vc1parse->renegotiate = FALSE; vc1parse->update_caps = TRUE; @@ -1175,7 +1181,11 @@ gst_vc1_parse_handle_frame (GstBaseParse * parse, GstBaseParseFrame * frame, || gst_pad_check_reconfigure (GST_BASE_PARSE_SRC_PAD (parse))) { if (!gst_vc1_parse_renegotiate (vc1parse)) { GST_ERROR_OBJECT (vc1parse, "Failed to negotiate with downstream"); - ret = GST_FLOW_NOT_NEGOTIATED; + gst_pad_mark_reconfigure (GST_BASE_PARSE_SRC_PAD (parse)); + if (GST_PAD_IS_FLUSHING (GST_BASE_PARSE_SRC_PAD (parse))) + ret = GST_FLOW_FLUSHING; + else + ret = GST_FLOW_NOT_NEGOTIATED; goto done; } } |