From e697254fc1de469e96127a5a92e1fd0c508a9f75 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 29 Jan 2013 09:45:23 +0100 Subject: [PATCH] basesrc: handle renegotiation correctly Don't retry to negotiate when we fail to negotiate but instead produce a NOT_NEGOTIATED error. We only want to retry negotiation if the result from gst_pad_push() returned NOT_NEGOTIATED. --- libs/gst/base/gstbasesrc.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c index b83762c75b..2e2e780c11 100644 --- a/libs/gst/base/gstbasesrc.c +++ b/libs/gst/base/gstbasesrc.c @@ -2579,7 +2579,7 @@ gst_base_src_loop (GstPad * pad) if (gst_pad_check_reconfigure (pad)) { if (!gst_base_src_negotiate (src)) { gst_pad_mark_reconfigure (pad); - goto not_negotiated; + goto negotiate_failed; } } @@ -2746,7 +2746,12 @@ not_negotiated: GST_DEBUG_OBJECT (src, "Retrying to renegotiate"); return; } - GST_DEBUG_OBJECT (src, "Failed to renegotiate"); + /* fallthrough when push returns NOT_NEGOTIATED and we don't have + * a pending negotiation request on our srcpad */ + } +negotiate_failed: + { + GST_DEBUG_OBJECT (src, "Not negotiated"); ret = GST_FLOW_NOT_NEGOTIATED; goto pause; }