From: Michael Smith Date: Wed, 11 Feb 2009 00:22:54 +0000 (-0800) Subject: input-selector: Activate and notify pad before processing events. X-Git-Tag: RELEASE-0.10.32~106 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=55637934d172ec845a85c677658825918f1359ac;p=platform%2Fupstream%2Fgstreamer.git input-selector: Activate and notify pad before processing events. Events should trigger pad selection if we don't already have an explicitly selected pad, so that events prior to first buffer don't get lost. --- diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c index 165d1f6..7fc4368 100644 --- a/plugins/elements/gstinputselector.c +++ b/plugins/elements/gstinputselector.c @@ -342,17 +342,23 @@ gst_selector_pad_event (GstPad * pad, GstEvent * event) gboolean forward = TRUE; GstInputSelector *sel; GstSelectorPad *selpad; + GstPad *active_sinkpad; + gboolean notify; sel = GST_INPUT_SELECTOR (gst_pad_get_parent (pad)); selpad = GST_SELECTOR_PAD_CAST (pad); - /* only forward if we are dealing with the active sinkpad */ - forward = gst_input_selector_is_active_sinkpad (sel, pad); + GST_INPUT_SELECTOR_LOCK (sel); + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad, ¬ify); - /* forward all events in select_all mode by default */ - if (sel->select_all) { - forward = TRUE; - } + /* only forward if we are dealing with the active sinkpad or if select_all + * is enabled */ + if (pad != active_sinkpad && !sel->select_all) + forward = FALSE; + GST_INPUT_SELECTOR_UNLOCK (sel); + + if (notify) + g_object_notify (G_OBJECT (sel), "active-pad"); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_START: @@ -1037,8 +1043,7 @@ gst_input_selector_event (GstPad * pad, GstEvent * event) res = gst_pad_push_event (otherpad, event); gst_object_unref (otherpad); - } - else + } else gst_event_unref (event); return res; }