[OE-core] [pyro][PATCH 2/4] gstreamer1.0-plugins-bad: Readd and manage GstAdaptiveDemux for MSS

wouterlucas wouter at wouterlucas.com
Tue May 1 03:30:55 UTC 2018


Signed-off-by: wouterlucas <wouter at wouterlucas.com>
---
 ...the-adapter-in-the-subclass-after-bu.patch | 133 ++++++++++++++++++
 .../gstreamer1.0-plugins-bad_1.10.4.bb        |   1 +
 2 files changed, 134 insertions(+)
 create mode 100644 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-mssdemux-Handle-the-adapter-in-the-subclass-after-bu.patch

diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-mssdemux-Handle-the-adapter-in-the-subclass-after-bu.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-mssdemux-Handle-the-adapter-in-the-subclass-after-bu.patch
new file mode 100644
index 0000000000..3648800867
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-mssdemux-Handle-the-adapter-in-the-subclass-after-bu.patch
@@ -0,0 +1,133 @@
+From 8878df617892b7e19a9de7ee28c5a405238556be Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Enrique=20Oca=C3=B1a=20Gonz=C3=A1lez?= <eocanha at igalia.com>
+Date: Tue, 17 Jan 2017 16:43:53 +0000
+Subject: [PATCH] mssdemux: Handle the adapter in the subclass after bug
+ 764684
+
+The adapter on GstAdaptiveDemux was removed on
+https://bugzilla.gnome.org/show_bug.cgi?id=764684
+"adaptivedemux: Get rid of internal stream adapter and let subclasses handle this directly"
+commit ca9f62e1d062ac1e87f13c9ddddab9164a3cb892
+
+This commit readds and manages the adapter in gstmssdemux.
+---
+Upstream-Status: Backport
+Signed-off-by: wouterlucas <wouter at wouterlucas.com>
+
+ ext/smoothstreaming/gstmssdemux.c | 33 ++++++++++++++++++++++++++-------
+ ext/smoothstreaming/gstmssdemux.h |  1 +
+ 2 files changed, 27 insertions(+), 7 deletions(-)
+
+diff --git a/ext/smoothstreaming/gstmssdemux.c b/ext/smoothstreaming/gstmssdemux.c
+index 70b541e..1a122d4 100644
+--- a/ext/smoothstreaming/gstmssdemux.c
++++ b/ext/smoothstreaming/gstmssdemux.c
+@@ -121,6 +121,7 @@ static gboolean gst_mss_demux_process_manifest (GstAdaptiveDemux * demux,
+     GstBuffer * buffer);
+ static GstClockTime gst_mss_demux_get_duration (GstAdaptiveDemux * demux);
+ static void gst_mss_demux_reset (GstAdaptiveDemux * demux);
++static void gst_mss_demux_stream_free (GstAdaptiveDemuxStream * stream);
+ static GstFlowReturn gst_mss_demux_stream_seek (GstAdaptiveDemuxStream * stream,
+     gboolean forward, GstSeekFlags flags, GstClockTime ts,
+     GstClockTime * final_ts);
+@@ -142,7 +143,7 @@ static GstFlowReturn
+ gst_mss_demux_update_manifest_data (GstAdaptiveDemux * demux,
+     GstBuffer * buffer);
+ static GstFlowReturn gst_mss_demux_data_received (GstAdaptiveDemux * demux,
+-    GstAdaptiveDemuxStream * stream);
++    GstAdaptiveDemuxStream * stream, GstBuffer * buffer);
+ static gboolean
+ gst_mss_demux_requires_periodical_playlist_update (GstAdaptiveDemux * demux);
+ 
+@@ -188,6 +189,7 @@ gst_mss_demux_class_init (GstMssDemuxClass * klass)
+       gst_mss_demux_get_manifest_update_interval;
+   gstadaptivedemux_class->reset = gst_mss_demux_reset;
+   gstadaptivedemux_class->seek = gst_mss_demux_seek;
++  gstadaptivedemux_class->stream_free = gst_mss_demux_stream_free;
+   gstadaptivedemux_class->stream_seek = gst_mss_demux_stream_seek;
+   gstadaptivedemux_class->stream_advance_fragment =
+       gst_mss_demux_stream_advance_fragment;
+@@ -316,6 +318,14 @@ gst_mss_demux_stream_update_fragment_info (GstAdaptiveDemuxStream * stream)
+   return ret;
+ }
+ 
++static void
++gst_mss_demux_stream_free (GstAdaptiveDemuxStream * stream)
++{
++  GstMssDemuxStream *mssstream = (GstMssDemuxStream *) stream;
++
++  g_object_unref (mssstream->adapter);
++}
++
+ static GstFlowReturn
+ gst_mss_demux_stream_seek (GstAdaptiveDemuxStream * stream, gboolean forward,
+     GstSeekFlags flags, GstClockTime ts, GstClockTime * final_ts)
+@@ -451,6 +461,7 @@ gst_mss_demux_setup_streams (GstAdaptiveDemux * demux)
+         gst_adaptive_demux_stream_new (GST_ADAPTIVE_DEMUX_CAST (mssdemux),
+         srcpad);
+     stream->manifest_stream = manifeststream;
++    stream->adapter = gst_adapter_new();
+     gst_mss_stream_set_active (manifeststream, TRUE);
+     active_streams = g_slist_prepend (active_streams, stream);
+   }
+@@ -686,7 +697,7 @@ gst_mss_demux_update_manifest_data (GstAdaptiveDemux * demux,
+ 
+ static GstFlowReturn
+ gst_mss_demux_data_received (GstAdaptiveDemux * demux,
+-    GstAdaptiveDemuxStream * stream)
++    GstAdaptiveDemuxStream * stream, GstBuffer *buffer)
+ {
+   GstMssDemux *mssdemux = GST_MSS_DEMUX_CAST (demux);
+   GstMssDemuxStream *mssstream = (GstMssDemuxStream *) stream;
+@@ -694,23 +705,31 @@ gst_mss_demux_data_received (GstAdaptiveDemux * demux,
+ 
+   if (!gst_mss_manifest_is_live (mssdemux->manifest)) {
+     return GST_ADAPTIVE_DEMUX_CLASS (parent_class)->data_received (demux,
+-        stream);
++        stream, buffer);
+   }
+ 
+   if (gst_mss_stream_fragment_parsing_needed (mssstream->manifest_stream)) {
+-    available = gst_adapter_available (stream->adapter);
++    gst_adapter_push (mssstream->adapter, buffer);
++
++    GST_DEBUG_OBJECT (stream->pad, "Received buffer of size %" G_GSIZE_FORMAT
++        ". Now %" G_GSIZE_FORMAT " on adapter", gst_buffer_get_size (buffer),
++        gst_adapter_available (mssstream->adapter));
++
++    available = gst_adapter_available (mssstream->adapter);
+     // FIXME: try to reduce this minimal size.
+     if (available < 4096) {
+       return GST_FLOW_OK;
+     } else {
+-      GstBuffer *buffer = gst_adapter_get_buffer (stream->adapter, available);
++      // We use here the accumulated buffer from the adapter instead o the
++      // original one.
++      buffer = gst_adapter_get_buffer (mssstream->adapter, available);
++      gst_adapter_clear (mssstream->adapter);
+       GST_LOG_OBJECT (stream->pad, "enough data, parsing fragment.");
+       gst_mss_stream_fragment_parse (mssstream->manifest_stream, buffer);
+-      gst_buffer_unref (buffer);
+     }
+   }
+ 
+-  return GST_ADAPTIVE_DEMUX_CLASS (parent_class)->data_received (demux, stream);
++  return GST_ADAPTIVE_DEMUX_CLASS (parent_class)->data_received (demux, stream, buffer);
+ }
+ 
+ static gboolean
+diff --git a/ext/smoothstreaming/gstmssdemux.h b/ext/smoothstreaming/gstmssdemux.h
+index f3ea6cf..3fcf55f 100644
+--- a/ext/smoothstreaming/gstmssdemux.h
++++ b/ext/smoothstreaming/gstmssdemux.h
+@@ -56,6 +56,7 @@ struct _GstMssDemuxStream {
+   GstAdaptiveDemuxStream parent;
+ 
+   GstMssStream *manifest_stream;
++  GstAdapter *adapter;
+ };
+ 
+ struct _GstMssDemux {
+-- 
+1.8.3.2
+
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb
index 88289fb7d8..d209bcf8ab 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb
@@ -16,6 +16,7 @@ SRC_URI = " \
     file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
     file://0001-Prepend-PKG_CONFIG_SYSROOT_DIR-to-pkg-config-output.patch \
     file://0001-smoothstreaming-use-the-duration-from-the-list-of-fr.patch \
+    file://0002-mssdemux-Handle-the-adapter-in-the-subclass-after-bu.patch \
     file://0001-smoothstreaming-implement-adaptivedemux-s-get_live_s.patch \
     file://0009-glimagesink-Downrank-to-marginal.patch \
 "
-- 
2.17.0




More information about the Openembedded-core mailing list