diff options
Diffstat (limited to 'meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch')
-rwxr-xr-x | meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch deleted file mode 100755 index f50ce6ff2..000000000 --- a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch +++ /dev/null @@ -1,167 +0,0 @@ -From 83bed90c306ed3185d48febf6441177d638f7341 Mon Sep 17 00:00:00 2001 -From: Song Bing <b06498@freescale.com> -Date: Wed, 24 Dec 2014 10:13:51 +0800 -Subject: [PATCH] inputselector: sticky events haven't send out when active - track reach EOS - -EOS event hasn't been send to down-element. The resolution is block EOS event -of inactive pad, send the event after the pad actived. - -https://bugzilla.gnome.org/show_bug.cgi?id=740949 - -Upstream-Status: Backport [1.5.1] - -Signed-off-by: Song Bing <b06498@freescale.com> ---- - plugins/elements/gstinputselector.c | 58 ++++++++++++++++++++++++++--------- - plugins/elements/gstinputselector.h | 1 + - 2 files changed, 45 insertions(+), 14 deletions(-) - -diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c -index fb50802..4461f7c 100644 ---- a/plugins/elements/gstinputselector.c -+++ b/plugins/elements/gstinputselector.c -@@ -440,6 +440,17 @@ gst_selector_pad_iterate_linked_pads (GstPad * pad, GstObject * parent) - } - - static gboolean -+gst_input_selector_eos_wait (GstInputSelector * self, GstSelectorPad * pad) -+{ -+ while (!self->eos && !self->flushing && !pad->flushing) { -+ /* we can be unlocked here when we are shutting down (flushing) or when we -+ * get unblocked */ -+ GST_INPUT_SELECTOR_WAIT (self); -+ } -+ return self->flushing; -+} -+ -+static gboolean - gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) - { - gboolean res = TRUE; -@@ -486,6 +497,7 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) - case GST_EVENT_FLUSH_START: - /* Unblock the pad if it's waiting */ - selpad->flushing = TRUE; -+ sel->eos = FALSE; - GST_INPUT_SELECTOR_BROADCAST (sel); - break; - case GST_EVENT_FLUSH_STOP: -@@ -523,21 +535,12 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) - case GST_EVENT_EOS: - selpad->eos = TRUE; - -- if (forward) { -- selpad->eos_sent = TRUE; -- } else { -- GstSelectorPad *active_selpad; -- -- /* If the active sinkpad is in EOS state but EOS -- * was not sent downstream this means that the pad -- * got EOS before it was set as active pad and that -- * the previously active pad got EOS after it was -- * active -- */ -- active_selpad = GST_SELECTOR_PAD (active_sinkpad); -- forward = (active_selpad->eos && !active_selpad->eos_sent); -- active_selpad->eos_sent = TRUE; -+ if (!forward) { -+ /* blocked until active the sind pad or flush */ -+ gst_input_selector_eos_wait (sel, selpad); -+ forward = TRUE; - } -+ selpad->eos_sent = TRUE; - GST_DEBUG_OBJECT (pad, "received EOS"); - break; - case GST_EVENT_GAP:{ -@@ -676,6 +679,12 @@ gst_input_selector_wait_running_time (GstInputSelector * sel, - gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (selpad)); - active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad); - -+ if (sel->eos) { -+ GST_DEBUG_OBJECT (sel, "Not waiting because inputselector reach EOS."); -+ GST_INPUT_SELECTOR_UNLOCK (sel); -+ return FALSE; -+ } -+ - if (seg->format != GST_FORMAT_TIME) { - GST_DEBUG_OBJECT (selpad, - "Not waiting because we don't have a TIME segment"); -@@ -971,6 +980,12 @@ gst_selector_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); - - GST_INPUT_SELECTOR_LOCK (sel); -+ if (sel->eos) { -+ GST_DEBUG_OBJECT (pad, "inputselector eos."); -+ GST_INPUT_SELECTOR_UNLOCK (sel); -+ goto eos; -+ } -+ - /* wait or check for flushing */ - if (gst_input_selector_wait (sel, selpad)) { - GST_INPUT_SELECTOR_UNLOCK (sel); -@@ -1151,6 +1166,13 @@ flushing: - res = GST_FLOW_FLUSHING; - goto done; - } -+eos: -+ { -+ GST_DEBUG_OBJECT (pad, "We are eos, discard buffer %p", buf); -+ gst_buffer_unref (buf); -+ res = GST_FLOW_EOS; -+ goto done; -+ } - } - - static void gst_input_selector_dispose (GObject * object); -@@ -1309,6 +1331,7 @@ gst_input_selector_init (GstInputSelector * sel) - g_mutex_init (&sel->lock); - g_cond_init (&sel->cond); - sel->blocked = FALSE; -+ sel->eos = FALSE; - - /* lets give a change for downstream to do something on - * active-pad change before we start pushing new buffers */ -@@ -1377,6 +1400,11 @@ gst_input_selector_set_active_pad (GstInputSelector * self, GstPad * pad) - GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT, - self->active_sinkpad); - -+ if (old != new && new->eos && !new->eos_sent) { -+ self->eos = TRUE; -+ GST_INPUT_SELECTOR_BROADCAST (self); -+ } -+ - return TRUE; - } - -@@ -1771,6 +1799,7 @@ gst_input_selector_change_state (GstElement * element, - switch (transition) { - case GST_STATE_CHANGE_READY_TO_PAUSED: - GST_INPUT_SELECTOR_LOCK (self); -+ self->eos = FALSE; - self->blocked = FALSE; - self->flushing = FALSE; - GST_INPUT_SELECTOR_UNLOCK (self); -@@ -1779,6 +1808,7 @@ gst_input_selector_change_state (GstElement * element, - /* first unlock before we call the parent state change function, which - * tries to acquire the stream lock when going to ready. */ - GST_INPUT_SELECTOR_LOCK (self); -+ self->eos = TRUE; - self->blocked = FALSE; - self->flushing = TRUE; - GST_INPUT_SELECTOR_BROADCAST (self); -diff --git a/plugins/elements/gstinputselector.h b/plugins/elements/gstinputselector.h -index 96c680f..9bf924f 100644 ---- a/plugins/elements/gstinputselector.h -+++ b/plugins/elements/gstinputselector.h -@@ -77,6 +77,7 @@ struct _GstInputSelector { - GMutex lock; - GCond cond; - gboolean blocked; -+ gboolean eos; - gboolean flushing; - }; - --- -1.7.9.5 - |