From: Thiago Santos Date: Fri, 17 Sep 2010 12:44:02 +0000 (-0300) Subject: outputselector: Recheck pending switch after pushing buffer X-Git-Tag: RELEASE-0.10.32~63 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=974ca7713a41b93b4958f5fbef5f083b8f929497;p=platform%2Fupstream%2Fgstreamer.git outputselector: Recheck pending switch after pushing buffer This patch makes output-selector always recheck if there's a pending pad switch after pushing a buffer, preventing that it pushes a buffer on the 'wrong' pad. https://bugzilla.gnome.org/show_bug.cgi?id=629917 --- diff --git a/plugins/elements/gstoutputselector.c b/plugins/elements/gstoutputselector.c index 21501f1..088bed0 100644 --- a/plugins/elements/gstoutputselector.c +++ b/plugins/elements/gstoutputselector.c @@ -394,7 +394,18 @@ gst_output_selector_chain (GstPad * pad, GstBuffer * buf) osel = GST_OUTPUT_SELECTOR (gst_pad_get_parent (pad)); - if (osel->pending_srcpad) { + /* + * The _switch function might push a buffer if 'resend-latest' is true. + * + * Elements/Applications (e.g. camerabin) might use pad probes to + * switch output-selector's active pad. If we simply switch and don't + * recheck any pending pad switch the following codepath could end + * up pushing a buffer on a non-active pad. This is bad. + * + * So we always should check the pending_srcpad before going further down + * the chain and pushing the new buffer + */ + while (osel->pending_srcpad) { /* Do the switch */ gst_output_selector_switch (osel); }