From 948a9d2f2b728f5fb60be45d47a818cebeb60c7d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Sun, 30 Jun 2013 18:39:03 +0200 Subject: [PATCH] pad: Don't consider flushing pads as needing reconfiguration Renegotiation and reconfiguration will fail because all queries and events won't be accepted by the pad if it's flushing. In the best case this just causes unneeded work and spurious warnings in the debug logs, in the worst case it causes elements to fail completely. --- gst/gstpad.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/gst/gstpad.c b/gst/gstpad.c index c47a7fe..138ed2e 100644 --- a/gst/gstpad.c +++ b/gst/gstpad.c @@ -1400,8 +1400,13 @@ gst_pad_needs_reconfigure (GstPad * pad) g_return_val_if_fail (GST_IS_PAD (pad), FALSE); GST_OBJECT_LOCK (pad); - reconfigure = GST_PAD_NEEDS_RECONFIGURE (pad); - GST_DEBUG_OBJECT (pad, "peeking RECONFIGURE flag %d", reconfigure); + if (GST_PAD_IS_FLUSHING (pad)) { + GST_DEBUG_OBJECT (pad, "pad is flushing"); + reconfigure = FALSE; + } else { + reconfigure = GST_PAD_NEEDS_RECONFIGURE (pad); + GST_DEBUG_OBJECT (pad, "peeking RECONFIGURE flag %d", reconfigure); + } GST_OBJECT_UNLOCK (pad); return reconfigure; @@ -1424,10 +1429,15 @@ gst_pad_check_reconfigure (GstPad * pad) g_return_val_if_fail (GST_IS_PAD (pad), FALSE); GST_OBJECT_LOCK (pad); - reconfigure = GST_PAD_NEEDS_RECONFIGURE (pad); - if (reconfigure) { - GST_DEBUG_OBJECT (pad, "remove RECONFIGURE flag"); - GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_NEED_RECONFIGURE); + if (GST_PAD_IS_FLUSHING (pad)) { + GST_DEBUG_OBJECT (pad, "pad is flushing"); + reconfigure = FALSE; + } else { + reconfigure = GST_PAD_NEEDS_RECONFIGURE (pad); + if (reconfigure) { + GST_DEBUG_OBJECT (pad, "remove RECONFIGURE flag"); + GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_NEED_RECONFIGURE); + } } GST_OBJECT_UNLOCK (pad); -- 2.7.4