Hello community, here is the log from the commit of package gstreamer-plugins-good for openSUSE:Factory checked in at 2020-01-12 23:16:13 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-good (Old) and /work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.6675 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-plugins-good" Sun Jan 12 23:16:13 2020 rev:69 rq:761777 version:1.16.2 Changes: -------- --- /work/SRC/openSUSE:Factory/gstreamer-plugins-good/gstreamer-plugins-good.changes 2019-12-11 12:09:15.112636202 +0100 +++ /work/SRC/openSUSE:Factory/.gstreamer-plugins-good.new.6675/gstreamer-plugins-good.changes 2020-01-12 23:16:32.134641963 +0100 @@ -1,0 +2,9 @@ +Mon Dec 30 23:34:26 UTC 2019 - Bjørn Lie <bjorn....@gmail.com> + +- Add upstream bugfix patches: + + gst-good-qtdemux-Specify-REDIRECT-info.patch: qtdemux: Specify + REDIRECT information in error message. + + gst-good-rtpjpegdepay-outputs-framed-jpeg.patch: rtpjpegdepay: + outputs framed jpeg. + +------------------------------------------------------------------- New: ---- gst-good-qtdemux-Specify-REDIRECT-info.patch gst-good-rtpjpegdepay-outputs-framed-jpeg.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer-plugins-good.spec ++++++ --- /var/tmp/diff_new_pack.0lsAZE/_old 2020-01-12 23:16:33.490642465 +0100 +++ /var/tmp/diff_new_pack.0lsAZE/_new 2020-01-12 23:16:33.498642468 +0100 @@ -42,6 +42,10 @@ Source0: https://gstreamer.freedesktop.org/src/gst-plugins-good/%{_name}-%{version}.tar.xz Source1: gstreamer-plugins-good.appdata.xml Source99: baselibs.conf +# PATCH-FIX-UPSTREAM gst-good-qtdemux-Specify-REDIRECT-info.patch -- qtdemux: Specify REDIRECT information in error message +Patch0: gst-good-qtdemux-Specify-REDIRECT-info.patch +# PATCH-FIX-UPSTREAM gst-good-rtpjpegdepay-outputs-framed-jpeg.patch -- rtpjpegdepay: outputs framed jpeg +Patch1: gst-good-rtpjpegdepay-outputs-framed-jpeg.patch BuildRequires: Mesa-libGLESv2-devel BuildRequires: Mesa-libGLESv3-devel ++++++ gst-good-qtdemux-Specify-REDIRECT-info.patch ++++++ >From a0c6156a81d56c472a9eccd9797a0e77628067df Mon Sep 17 00:00:00 2001 From: Thibault Saunier <tsaun...@igalia.com> Date: Tue, 3 Sep 2019 16:46:30 -0400 Subject: [PATCH] qtdemux: Specify REDIRECT information in error message There are in the wild (mp4) streams that basically contain no tracks but do have a redirect info[0], in which case, we won't be able to expose any pad (there are no tracks) so we can't post anything but an error on the bus, as: - it can't send EOS downstream, it has no pad, - posting an EOS message will be useless as PAUSED state can't be reached and there is no sink in the pipeline meaning GstBin will simply ignore it The approach here is to to add details to the ERROR message with a `redirect-location` field which elements like playbin handle and use right away. [0]: http://movietrailers.apple.com/movies/paramount/terminator-dark-fate/terminator-dark-fate-trailer-2_480p.mov --- gst/isomp4/qtdemux.c | 32 +++++++++++++++++++++++++------- gst/isomp4/qtdemux.h | 2 +- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index ad07c1e36..61fec02cb 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -523,6 +523,7 @@ GST_STATIC_PAD_TEMPLATE ("subtitle_%u", G_DEFINE_TYPE (GstQTDemux, gst_qtdemux, GST_TYPE_ELEMENT); static void gst_qtdemux_dispose (GObject * object); +static void gst_qtdemux_finalize (GObject * object); static guint32 gst_qtdemux_find_index_linear (GstQTDemux * qtdemux, QtDemuxStream * str, @@ -625,6 +626,7 @@ gst_qtdemux_class_init (GstQTDemuxClass * klass) parent_class = g_type_class_peek_parent (klass); gobject_class->dispose = gst_qtdemux_dispose; + gobject_class->finalize = gst_qtdemux_finalize; gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_qtdemux_change_state); #if 0 @@ -680,6 +682,16 @@ gst_qtdemux_init (GstQTDemux * qtdemux) gst_qtdemux_reset (qtdemux, TRUE); } +static void +gst_qtdemux_finalize (GObject * object) +{ + GstQTDemux *qtdemux = GST_QTDEMUX (object); + + g_free (qtdemux->redirect_location); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + static void gst_qtdemux_dispose (GObject * object) { @@ -708,10 +720,11 @@ gst_qtdemux_dispose (GObject * object) static void gst_qtdemux_post_no_playable_stream_error (GstQTDemux * qtdemux) { - if (qtdemux->posted_redirect) { - GST_ELEMENT_ERROR (qtdemux, STREAM, DEMUX, + if (qtdemux->redirect_location) { + GST_ELEMENT_ERROR_WITH_DETAILS (qtdemux, STREAM, DEMUX, (_("This file contains no playable streams.")), - ("no known streams found, a redirect message has been posted")); + ("no known streams found, a redirect message has been posted"), + ("redirect-location", G_TYPE_STRING, qtdemux->redirect_location, NULL)); } else { GST_ELEMENT_ERROR (qtdemux, STREAM, DEMUX, (_("This file contains no playable streams.")), @@ -2112,7 +2125,7 @@ gst_qtdemux_reset (GstQTDemux * qtdemux, gboolean hard) qtdemux->neededbytes = 16; qtdemux->todrop = 0; qtdemux->pullbased = FALSE; - qtdemux->posted_redirect = FALSE; + g_clear_pointer (&qtdemux->redirect_location, g_free); qtdemux->first_mdat = -1; qtdemux->header_size = 0; qtdemux->mdatoffset = -1; @@ -6038,11 +6051,12 @@ gst_qtdemux_decorate_and_push_buffer (GstQTDemux * qtdemux, gst_buffer_unmap (buf, &map); if (url != NULL && strlen (url) != 0) { /* we have RTSP redirect now */ + g_free (qtdemux->redirect_location); + qtdemux->redirect_location = g_strdup (url); gst_element_post_message (GST_ELEMENT_CAST (qtdemux), gst_message_new_element (GST_OBJECT_CAST (qtdemux), gst_structure_new ("redirect", "new-location", G_TYPE_STRING, url, NULL))); - qtdemux->posted_redirect = TRUE; } else { GST_WARNING_OBJECT (qtdemux, "Redirect URI of stream is empty, not " "posting"); @@ -12912,7 +12926,9 @@ qtdemux_expose_streams (GstQTDemux * qtdemux) "new-location", G_TYPE_STRING, QTDEMUX_NTH_STREAM (qtdemux, 0)->redirect_uri, NULL)); gst_element_post_message (GST_ELEMENT_CAST (qtdemux), m); - qtdemux->posted_redirect = TRUE; + g_free (qtdemux->redirect_location); + qtdemux->redirect_location = + g_strdup (QTDEMUX_NTH_STREAM (qtdemux, 0)->redirect_uri); } g_ptr_array_foreach (qtdemux->active_streams, @@ -13965,9 +13981,11 @@ qtdemux_process_redirects (GstQTDemux * qtdemux, GList * references) g_list_free (references); GST_INFO_OBJECT (qtdemux, "posting redirect message: %" GST_PTR_FORMAT, s); + g_free (qtdemux->redirect_location); + qtdemux->redirect_location = + g_strdup (gst_structure_get_string (s, "new-location")); msg = gst_message_new_element (GST_OBJECT_CAST (qtdemux), s); gst_element_post_message (GST_ELEMENT_CAST (qtdemux), msg); - qtdemux->posted_redirect = TRUE; } /* look for redirect nodes, collect all redirect information and diff --git a/gst/isomp4/qtdemux.h b/gst/isomp4/qtdemux.h index 83a050a43..05ea7c78f 100644 --- a/gst/isomp4/qtdemux.h +++ b/gst/isomp4/qtdemux.h @@ -69,7 +69,7 @@ struct _GstQTDemux { /* TRUE if pull-based */ gboolean pullbased; - gboolean posted_redirect; + gchar *redirect_location; /* Protect pad exposing from flush event */ GMutex expose_lock; -- 2.24.1 ++++++ gst-good-rtpjpegdepay-outputs-framed-jpeg.patch ++++++ >From eea8d25a4325112d80d05a00957884dd95a34dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= <t...@centricular.com> Date: Wed, 4 Dec 2019 01:03:49 +0000 Subject: [PATCH] rtpjpegdepay: outputs framed jpeg Add parsed=true to output caps, as we always output whole frames, timestamped and all. Means also that the output can be decoded by avdec_mjpeg wihout plugging an extra parser (which has no rank). --- gst/rtp/gstrtpjpegdepay.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gst/rtp/gstrtpjpegdepay.c b/gst/rtp/gstrtpjpegdepay.c index 59274f111..d424b64d9 100644 --- a/gst/rtp/gstrtpjpegdepay.c +++ b/gst/rtp/gstrtpjpegdepay.c @@ -627,9 +627,10 @@ gst_rtp_jpeg_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer * rtp) GstCaps *outcaps; outcaps = - gst_caps_new_simple ("image/jpeg", "framerate", GST_TYPE_FRACTION, - rtpjpegdepay->frate_num, rtpjpegdepay->frate_denom, "width", - G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL); + gst_caps_new_simple ("image/jpeg", "parsed", G_TYPE_BOOLEAN, TRUE, + "framerate", GST_TYPE_FRACTION, rtpjpegdepay->frate_num, + rtpjpegdepay->frate_denom, "width", G_TYPE_INT, width, + "height", G_TYPE_INT, height, NULL); gst_pad_set_caps (depayload->srcpad, outcaps); gst_caps_unref (outcaps); -- 2.24.1