summaryrefslogtreecommitdiff
path: root/gst/videoparsers
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-11-17 20:21:17 +0200
committerSebastian Dröge <sebastian@centricular.com>2016-11-18 12:22:44 +0200
commit0f657cec07665512c9447b018d5c0167242b6388 (patch)
tree71dadd41f1571ebb49f3c3fd69029dee3bcde15c /gst/videoparsers
parent279fb3d99fa2df1c87976a70a75ece4ebb3ff7b5 (diff)
downloadgstreamer-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/videoparsers')
-rw-r--r--gst/videoparsers/gstvc1parse.c14
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;
}
}