On Tue, Dec 19, 2017 at 9:06 PM, Stefan Agner <[email protected]> wrote: > From: Stefan Agner <[email protected]> > > Add NXP specific patches from morty-4.9.51-mx8_beta branch. This > allows to use imx-gst1.0-plugin 4.3.1 with gstreamer 1.12.2. > > Signed-off-by: Stefan Agner <[email protected]> > --- > .../0001-handle-base-parse-error.patch | 35 ++++++++ > ...ith-gst-inspect-Chris-Lord-chris-openedha.patch | 32 ++++++++ > ...e-unset-FLAG_DISCONT-when-push-to-adapter.patch | 33 ++++++++ > ...e-Need-push-adapter-remainning-data-in-pa.patch | 51 ++++++++++++ > ...or-should-proceed-non-active-pad-buffer-e.patch | 51 ++++++++++++ > ...0006-poll-Add-check-if-can-read-event-API.patch | 95 > ++++++++++++++++++++++ > ...or-Need-flush-when-set-active-pad-and-the.patch | 68 ++++++++++++++++ > .../gstreamer/gstreamer1.0_1.12.%.bbappend | 16 ++++ > 8 files changed, 381 insertions(+) > create mode 100644 > recipes-multimedia/gstreamer/gstreamer1.0/0001-handle-base-parse-error.patch > create mode 100644 > recipes-multimedia/gstreamer/gstreamer1.0/0002-Fix-crash-with-gst-inspect-Chris-Lord-chris-openedha.patch > create mode 100644 > recipes-multimedia/gstreamer/gstreamer1.0/0003-baseparse-unset-FLAG_DISCONT-when-push-to-adapter.patch > create mode 100644 > recipes-multimedia/gstreamer/gstreamer1.0/0004-gstbaseparse-Need-push-adapter-remainning-data-in-pa.patch > create mode 100644 > recipes-multimedia/gstreamer/gstreamer1.0/0005-inputselector-should-proceed-non-active-pad-buffer-e.patch > create mode 100644 > recipes-multimedia/gstreamer/gstreamer1.0/0006-poll-Add-check-if-can-read-event-API.patch > create mode 100644 > recipes-multimedia/gstreamer/gstreamer1.0/0007-inputselector-Need-flush-when-set-active-pad-and-the.patch > create mode 100644 recipes-multimedia/gstreamer/gstreamer1.0_1.12.%.bbappend > > diff --git > a/recipes-multimedia/gstreamer/gstreamer1.0/0001-handle-base-parse-error.patch > > b/recipes-multimedia/gstreamer/gstreamer1.0/0001-handle-base-parse-error.patch > new file mode 100644 > index 00000000..3aaa6360 > --- /dev/null > +++ > b/recipes-multimedia/gstreamer/gstreamer1.0/0001-handle-base-parse-error.patch > @@ -0,0 +1,35 @@ > +From 01b047cbb5e326fb3980bb6fc5206a82ea401170 Mon Sep 17 00:00:00 2001 > +From: Lyon Wang <[email protected]> > +Date: Wed, 14 Oct 2015 14:15:11 +0800 > +Subject: [PATCH 1/7] handle base parse error > + > +There is no need to send GST_ELEMENT_ERROR > +becuase ohter tracks may still good to play. > +no need to end the element, just print error message is enough > + > +Upstream-Status: Submitted > [https://bugzilla.gnome.org/show_bug.cgi?id=741542] > + > +Signed-off-by: Lyon Wang <[email protected]> > +--- > + libs/gst/base/gstbaseparse.c | 5 +++-- > + 1 file changed, 3 insertions(+), 2 deletions(-) > + > +diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c > +index df67dd0..2f45d23 100644 > +--- a/libs/gst/base/gstbaseparse.c > ++++ b/libs/gst/base/gstbaseparse.c > +@@ -1324,8 +1324,9 @@ gst_base_parse_sink_event_default (GstBaseParse * > parse, GstEvent * event) > + /* If we STILL have zero frames processed, fire an error */ > + if (parse->priv->framecount == 0 && !parse->priv->saw_gaps && > + !parse->priv->first_buffer) { > +- GST_ELEMENT_ERROR (parse, STREAM, WRONG_TYPE, > +- ("No valid frames found before end of stream"), (NULL)); > ++ /* GST_ELEMENT_ERROR (parse, STREAM, WRONG_TYPE, > ++ ("No valid frames found before end of stream"), (NULL));*/ > ++ GST_ERROR_OBJECT(parse, "No valid frames decoded before end of > stream"); > + } > + > + if (!parse->priv->saw_gaps > +-- > +1.9.1 > + > diff --git > a/recipes-multimedia/gstreamer/gstreamer1.0/0002-Fix-crash-with-gst-inspect-Chris-Lord-chris-openedha.patch > > b/recipes-multimedia/gstreamer/gstreamer1.0/0002-Fix-crash-with-gst-inspect-Chris-Lord-chris-openedha.patch > new file mode 100644 > index 00000000..1bd381b6 > --- /dev/null > +++ > b/recipes-multimedia/gstreamer/gstreamer1.0/0002-Fix-crash-with-gst-inspect-Chris-Lord-chris-openedha.patch > @@ -0,0 +1,32 @@ > +From 1bd9b30040ad23d86faa577baeb1c6734f39150f Mon Sep 17 00:00:00 2001 > +From: Carlos Rafael Giani <[email protected]> > +Date: Sat, 6 Apr 2013 23:52:11 +0200 > +Subject: [PATCH 2/7] Fix crash with gst-inspect Chris Lord > + <[email protected]> > + > +Upstream-Status: Pending > + > +Signed-off-by: Carlos Rafael Giani <[email protected]> > + > +Conflicts: > + tools/gst-inspect.c > +--- > + tools/gst-inspect.c | 2 +- > + 1 file changed, 1 insertion(+), 1 deletion(-) > + > +diff --git a/tools/gst-inspect.c b/tools/gst-inspect.c > +index e420e4c..95983bc 100644 > +--- a/tools/gst-inspect.c > ++++ b/tools/gst-inspect.c > +@@ -1548,7 +1548,7 @@ main (int argc, char *argv[]) > + g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE); > + g_option_context_add_group (ctx, gst_init_get_option_group ()); > + if (!g_option_context_parse (ctx, &argc, &argv, &err)) { > +- g_printerr ("Error initializing: %s\n", err->message); > ++ g_printerr ("Error initializing: %s\n", err ? err->message : "(null)"); > + g_clear_error (&err); > + g_option_context_free (ctx); > + return -1; > +-- > +1.9.1 > + > diff --git > a/recipes-multimedia/gstreamer/gstreamer1.0/0003-baseparse-unset-FLAG_DISCONT-when-push-to-adapter.patch > > b/recipes-multimedia/gstreamer/gstreamer1.0/0003-baseparse-unset-FLAG_DISCONT-when-push-to-adapter.patch > new file mode 100644 > index 00000000..9758d9c5 > --- /dev/null > +++ > b/recipes-multimedia/gstreamer/gstreamer1.0/0003-baseparse-unset-FLAG_DISCONT-when-push-to-adapter.patch > @@ -0,0 +1,33 @@ > +From 95d80584413c60cfe302cb2b55f59ffdca2a67b9 Mon Sep 17 00:00:00 2001 > +From: Lyon Wang <[email protected]> > +Date: Wed, 4 Nov 2015 18:16:52 +0800 > +Subject: [PATCH 3/7] [baseparse] unset FLAG_DISCONT when push to adapter > + > +Since DISCONT flag will be handled by priv->discont flag. > +There is no need to copy DISCONT flag to adapter. > +Otherwise, the DISCONT flag will alwasys been set on each frame, > +for the first chain in buffer. > + > + > +Upstream-Status: Pending [https://bugzilla.gnome.org/show_bug.cgi?id=757575] > + > +Signed-off-by: Lyon Wang <[email protected]> > +--- > + libs/gst/base/gstbaseparse.c | 1 + > + 1 file changed, 1 insertion(+) > + > +diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c > +index 2f45d23..3c52887 100644 > +--- a/libs/gst/base/gstbaseparse.c > ++++ b/libs/gst/base/gstbaseparse.c > +@@ -3157,6 +3157,7 @@ gst_base_parse_chain (GstPad * pad, GstObject * > parent, GstBuffer * buffer) > + parse->priv->discont = TRUE; > + } > + } > ++ GST_BUFFER_FLAG_UNSET(buffer, GST_BUFFER_FLAG_DISCONT); > + gst_adapter_push (parse->priv->adapter, buffer); > + } > + > +-- > +1.9.1 > + > diff --git > a/recipes-multimedia/gstreamer/gstreamer1.0/0004-gstbaseparse-Need-push-adapter-remainning-data-in-pa.patch > > b/recipes-multimedia/gstreamer/gstreamer1.0/0004-gstbaseparse-Need-push-adapter-remainning-data-in-pa.patch > new file mode 100644 > index 00000000..303e1082 > --- /dev/null > +++ > b/recipes-multimedia/gstreamer/gstreamer1.0/0004-gstbaseparse-Need-push-adapter-remainning-data-in-pa.patch > @@ -0,0 +1,51 @@ > +From b7f3a53b5d43c40fc1432c12f2ca314c5dbf403b Mon Sep 17 00:00:00 2001 > +From: Lyon Wang <[email protected]> > +Date: Fri, 15 Jan 2016 17:30:14 +0800 > +Subject: [PATCH 4/7] [gstbaseparse] Need push adapter remainning data in pass > + through mode > + > +When switching to pass through mode, there might be remainning > +data in the adpater, and it will be no chance to push to downstream when > +in pass through mode. > +So need check adapter available data and push downstream to avoid missing > data > + > +package: gstreamer1.0 > +Upstream-Status: Pending [https://bugzilla.gnome.org/show_bug.cgi?id=760513] > + > +Signed-off-by: Lyon Wang <[email protected]> > +--- > + libs/gst/base/gstbaseparse.c | 15 +++++++++++++++ > + 1 file changed, 15 insertions(+) > + mode change 100644 => 100755 libs/gst/base/gstbaseparse.c > + > +diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c > +old mode 100644 > +new mode 100755 > +index 3c52887..6d3eacf > +--- a/libs/gst/base/gstbaseparse.c > ++++ b/libs/gst/base/gstbaseparse.c > +@@ -3138,6 +3138,21 @@ gst_base_parse_chain (GstPad * pad, GstObject * > parent, GstBuffer * buffer) > + && parse->priv->passthrough)) { > + GstBaseParseFrame frame; > + > ++ av = gst_adapter_available (parse->priv->adapter); > ++ if (av) { > ++ tmpbuf = gst_adapter_take_buffer (parse->priv->adapter, av); > ++ > ++ if (parse->priv->upstream_format == GST_FORMAT_TIME) { > ++ tmpbuf = gst_buffer_make_writable (tmpbuf); > ++ GST_BUFFER_PTS (tmpbuf) = parse->priv->next_pts; > ++ GST_BUFFER_DTS (tmpbuf) = parse->priv->next_dts; > ++ GST_BUFFER_DURATION (tmpbuf) = GST_CLOCK_TIME_NONE; > ++ } > ++ > ++ ret = gst_pad_push (parse->srcpad, tmpbuf); > ++ > ++ } > ++ > + gst_base_parse_frame_init (&frame); > + frame.buffer = gst_buffer_make_writable (buffer); > + ret = gst_base_parse_push_frame (parse, &frame); > +-- > +1.9.1 > + > diff --git > a/recipes-multimedia/gstreamer/gstreamer1.0/0005-inputselector-should-proceed-non-active-pad-buffer-e.patch > > b/recipes-multimedia/gstreamer/gstreamer1.0/0005-inputselector-should-proceed-non-active-pad-buffer-e.patch > new file mode 100644 > index 00000000..f35ca044 > --- /dev/null > +++ > b/recipes-multimedia/gstreamer/gstreamer1.0/0005-inputselector-should-proceed-non-active-pad-buffer-e.patch > @@ -0,0 +1,51 @@ > +From 7f7398acb5dc5fdc904f6684eab2bb072be25de7 Mon Sep 17 00:00:00 2001 > +From: Song Bing <[email protected]> > +Date: Wed, 11 May 2016 16:57:23 +0800 > +Subject: [PATCH 5/7] inputselector: should proceed non-active pad buffer even > + if active pad reach eos > + > +non-active pad will be blocked if active pad reach eos in inputselector. > +Which will cause all pipeline be blocked. > +Inputselector should proceed non-active pad buffer based on clock even > +if active pad reach eos > +Change to sync with clock for better user experience. > + > + > +Upstream-Status: Pending [https://bugzilla.gnome.org/show_bug.cgi?id=766261] > + > +Signed-off-by: Song Bing [email protected] > +--- > + plugins/elements/gstinputselector.c | 10 ++++++++-- > + 1 file changed, 8 insertions(+), 2 deletions(-) > + > +diff --git a/plugins/elements/gstinputselector.c > b/plugins/elements/gstinputselector.c > +index f3f95e6..f6e1993 100644 > +--- a/plugins/elements/gstinputselector.c > ++++ b/plugins/elements/gstinputselector.c > +@@ -772,7 +772,7 @@ gst_input_selector_wait_running_time (GstInputSelector * > sel, > + } > + > + cur_running_time = GST_CLOCK_TIME_NONE; > +- if (sel->sync_mode == GST_INPUT_SELECTOR_SYNC_MODE_CLOCK) { > ++ if (sel->sync_mode == GST_INPUT_SELECTOR_SYNC_MODE_CLOCK || > active_selpad->eos) { > + clock = gst_element_get_clock (GST_ELEMENT_CAST (sel)); > + if (clock) { > + GstClockTime base_time; > +@@ -823,7 +823,13 @@ gst_input_selector_wait_running_time (GstInputSelector > * sel, > + "Waiting for active streams to advance. %" GST_TIME_FORMAT " >= %" > + GST_TIME_FORMAT, GST_TIME_ARGS (running_time), > + GST_TIME_ARGS (cur_running_time)); > +- GST_INPUT_SELECTOR_WAIT (sel); > ++ if (active_selpad->eos) { > ++ GST_INPUT_SELECTOR_UNLOCK (sel); > ++ g_usleep (5000); > ++ GST_INPUT_SELECTOR_LOCK (sel); > ++ } else { > ++ GST_INPUT_SELECTOR_WAIT (sel); > ++ } > + } else { > + GST_INPUT_SELECTOR_UNLOCK (sel); > + break; > +-- > +1.9.1 > + > diff --git > a/recipes-multimedia/gstreamer/gstreamer1.0/0006-poll-Add-check-if-can-read-event-API.patch > > b/recipes-multimedia/gstreamer/gstreamer1.0/0006-poll-Add-check-if-can-read-event-API.patch > new file mode 100644 > index 00000000..9a6cf470 > --- /dev/null > +++ > b/recipes-multimedia/gstreamer/gstreamer1.0/0006-poll-Add-check-if-can-read-event-API.patch > @@ -0,0 +1,95 @@ > +From 6daed66db8a147783acc117b76afa2e779c8c12c Mon Sep 17 00:00:00 2001 > +From: Song Bing <[email protected]> > +Date: Thu, 20 Aug 2015 14:57:46 +0800 > +Subject: [PATCH 6/7] poll: Add check if can read event API > + > +Need check if can read event of buffer for video decoder based on > +V4L2 driver. Add the API for it. > + > + > +Upstream-Status: Pending [https://bugzilla.gnome.org/show_bug.cgi?id=752962] > + > +Signed-off-by: Song Bing [email protected] > +--- > + gst/gstpoll.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ > + gst/gstpoll.h | 1 + > + 2 files changed, 53 insertions(+) > + > +diff --git a/gst/gstpoll.c b/gst/gstpoll.c > +index fd672ed..084f6f7 100644 > +--- a/gst/gstpoll.c > ++++ b/gst/gstpoll.c > +@@ -1242,6 +1242,58 @@ gst_poll_fd_can_read (const GstPoll * set, GstPollFD > * fd) > + return res; > + } > + > ++static gboolean > ++gst_poll_fd_can_read_pri_unlocked (const GstPoll * set, GstPollFD * fd) > ++{ > ++ gboolean res = FALSE; > ++ gint idx; > ++ > ++ idx = find_index (set->active_fds, fd); > ++ if (idx >= 0) { > ++#ifndef G_OS_WIN32 > ++ struct pollfd *pfd = &g_array_index (set->active_fds, struct pollfd, > idx); > ++ > ++ res = (pfd->revents & POLLPRI) != 0; > ++#else > ++ WinsockFd *wfd = &g_array_index (set->active_fds, WinsockFd, idx); > ++ > ++ res = (wfd->events.lNetworkEvents & FD_ACCEPT) != 0; > ++#endif > ++ } else { > ++ GST_WARNING ("%p: couldn't find fd !", set); > ++ } > ++ GST_DEBUG ("%p: fd (fd:%d, idx:%d) %d", set, fd->fd, fd->idx, res); > ++ > ++ return res; > ++} > ++ > ++/** > ++ * gst_poll_fd_can_read_pri: > ++ * @set: a file descriptor set. > ++ * @fd: a file descriptor. > ++ * > ++ * Check if @fd in @set has data to be read. > ++ * > ++ * Returns: %TRUE if the descriptor has data to be read. > ++ */ > ++gboolean > ++gst_poll_fd_can_read_pri (const GstPoll * set, GstPollFD * fd) > ++{ > ++ gboolean res = FALSE; > ++ > ++ g_return_val_if_fail (set != NULL, FALSE); > ++ g_return_val_if_fail (fd != NULL, FALSE); > ++ g_return_val_if_fail (fd->fd >= 0, FALSE); > ++ > ++ g_mutex_lock (&((GstPoll *) set)->lock); > ++ > ++ res = gst_poll_fd_can_read_pri_unlocked (set, fd); > ++ > ++ g_mutex_unlock (&((GstPoll *) set)->lock); > ++ > ++ return res; > ++} > ++ > + /** > + * gst_poll_fd_can_write: > + * @set: a file descriptor set. > +diff --git a/gst/gstpoll.h b/gst/gstpoll.h > +index ef6dcea..0513648 100644 > +--- a/gst/gstpoll.h > ++++ b/gst/gstpoll.h > +@@ -79,6 +79,7 @@ void gst_poll_fd_ignored (GstPoll *set, > GstPollFD *fd); > + gboolean gst_poll_fd_has_closed (const GstPoll *set, GstPollFD > *fd); > + gboolean gst_poll_fd_has_error (const GstPoll *set, GstPollFD > *fd); > + gboolean gst_poll_fd_can_read (const GstPoll *set, GstPollFD > *fd); > ++gboolean gst_poll_fd_can_read_pri (const GstPoll *set, GstPollFD > *fd); > + gboolean gst_poll_fd_can_write (const GstPoll *set, GstPollFD > *fd); > + > + gint gst_poll_wait (GstPoll *set, GstClockTime > timeout); > +-- > +1.9.1 > + > diff --git > a/recipes-multimedia/gstreamer/gstreamer1.0/0007-inputselector-Need-flush-when-set-active-pad-and-the.patch > > b/recipes-multimedia/gstreamer/gstreamer1.0/0007-inputselector-Need-flush-when-set-active-pad-and-the.patch > new file mode 100644 > index 00000000..c5d329b6 > --- /dev/null > +++ > b/recipes-multimedia/gstreamer/gstreamer1.0/0007-inputselector-Need-flush-when-set-active-pad-and-the.patch > @@ -0,0 +1,68 @@ > +From 9860e95c4c6bcec422b6c83a2650ef76dd6a5488 Mon Sep 17 00:00:00 2001 > +From: Song Bing <[email protected]> > +Date: Wed, 10 May 2017 11:24:46 +0800 > +Subject: [PATCH 7/7] inputselector: Need flush when set active pad and then > + seek in PAUSE state > + > + > +Upstream-Status: Pending [https://bugzilla.gnome.org/show_bug.cgi?id=782417] > + > +Signed-off-by: Song Bing [email protected] > +--- > + plugins/elements/gstinputselector.c | 11 ++++++++++- > + 1 file changed, 10 insertions(+), 1 deletion(-) > + > +diff --git a/plugins/elements/gstinputselector.c > b/plugins/elements/gstinputselector.c > +index f6e1993..54400dd 100644 > +--- a/plugins/elements/gstinputselector.c > ++++ b/plugins/elements/gstinputselector.c > +@@ -161,6 +161,7 @@ struct _GstSelectorPad > + guint32 segment_seqnum; /* sequence number of the current segment */ > + > + gboolean events_pending; /* TRUE if sticky events need to be updated > */ > ++ gboolean flush_events_pending;/* unblock old active track */ > + > + gboolean sending_cached_buffers; > + GQueue *cached_buffers; > +@@ -339,6 +340,7 @@ gst_selector_pad_reset (GstSelectorPad * pad) > + pad->eos = FALSE; > + pad->eos_sent = FALSE; > + pad->events_pending = FALSE; > ++ pad->flush_events_pending = FALSE; > + pad->discont = FALSE; > + pad->flushing = FALSE; > + gst_segment_init (&pad->segment, GST_FORMAT_UNDEFINED); > +@@ -557,6 +559,8 @@ gst_selector_pad_event (GstPad * pad, GstObject * > parent, GstEvent * event) > + selpad->flushing = TRUE; > + sel->eos = FALSE; > + selpad->group_done = FALSE; > ++ if (selpad->flush_events_pending) > ++ forward = TRUE; > + GST_INPUT_SELECTOR_BROADCAST (sel); > + break; > + case GST_EVENT_FLUSH_STOP: > +@@ -1136,6 +1140,7 @@ gst_selector_pad_chain (GstPad * pad, GstObject * > parent, GstBuffer * buf) > + buf = gst_buffer_ref (buf); > + res = gst_pad_push (sel->srcpad, buf); > + GST_LOG_OBJECT (pad, "Buffer %p forwarded result=%d", buf, res); > ++ selpad->flush_events_pending = FALSE; > + > + GST_INPUT_SELECTOR_LOCK (sel); > + > +@@ -1389,8 +1394,12 @@ gst_input_selector_set_active_pad (GstInputSelector * > self, GstPad * pad) > + active_pad_p = &self->active_sinkpad; > + gst_object_replace ((GstObject **) active_pad_p, GST_OBJECT_CAST (pad)); > + > +- if (old && old != new) > ++ if (old && old != new) { > + gst_pad_push_event (GST_PAD_CAST (old), gst_event_new_reconfigure ()); > ++ /* Old will be blocked on gst_pad_push() when set active pad in PAUSE > ++ * state. Need flush when set active pad and then seek in PAUSE state */ > ++ old->flush_events_pending = TRUE; > ++ } > + if (new) > + gst_pad_push_event (GST_PAD_CAST (new), gst_event_new_reconfigure ()); > + > +-- > +1.9.1 > + > diff --git a/recipes-multimedia/gstreamer/gstreamer1.0_1.12.%.bbappend > b/recipes-multimedia/gstreamer/gstreamer1.0_1.12.%.bbappend > new file mode 100644 > index 00000000..c99d1f20 > --- /dev/null > +++ b/recipes-multimedia/gstreamer/gstreamer1.0_1.12.%.bbappend > @@ -0,0 +1,16 @@ > +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" > + > +DEPENDS += " elfutils"
Is this depends really required? if so, it also must be conditional. -- Otavio Salvador O.S. Systems http://www.ossystems.com.br http://code.ossystems.com.br Mobile: +55 (53) 9981-7854 Mobile: +1 (347) 903-9750 -- _______________________________________________ meta-freescale mailing list [email protected] https://lists.yoctoproject.org/listinfo/meta-freescale
