Title: [235292] releases/WebKitGTK/webkit-2.22/Source/WebCore
Revision
235292
Author
[email protected]
Date
2018-08-24 01:08:06 -0700 (Fri, 24 Aug 2018)

Log Message

Merge r235109 - [GStreamer][MSE] Remove parsers from playback pipeline
https://bugs.webkit.org/show_bug.cgi?id=188646

Patch by Philippe Normand <[email protected]> on 2018-08-16
Reviewed by Xabier Rodriguez-Calvar.

Decodebin already includes parsers in front of the decoders.

No new tests, existing MSE tests cover this change.

* platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
(WebCore::PlaybackPipeline::addSourceBuffer):
(WebCore::PlaybackPipeline::attachTrack):
* platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
(webKitMediaSrcLinkSourcePad):
* platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h:

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/ChangeLog (235291 => 235292)


--- releases/WebKitGTK/webkit-2.22/Source/WebCore/ChangeLog	2018-08-24 08:08:00 UTC (rev 235291)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/ChangeLog	2018-08-24 08:08:06 UTC (rev 235292)
@@ -1,3 +1,21 @@
+2018-08-21  Philippe Normand  <[email protected]>
+
+        [GStreamer][MSE] Remove parsers from playback pipeline
+        https://bugs.webkit.org/show_bug.cgi?id=188646
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        Decodebin already includes parsers in front of the decoders.
+
+        No new tests, existing MSE tests cover this change.
+
+        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
+        (WebCore::PlaybackPipeline::addSourceBuffer):
+        (WebCore::PlaybackPipeline::attachTrack):
+        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
+        (webKitMediaSrcLinkSourcePad):
+        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h:
+
 2018-08-21  Commit Queue  <[email protected]>
 
         Unreviewed, rolling out r234979.

Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp (235291 => 235292)


--- releases/WebKitGTK/webkit-2.22/Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp	2018-08-24 08:08:00 UTC (rev 235291)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/platform/graphics/gstreamer/mse/PlaybackPipeline.cpp	2018-08-24 08:08:06 UTC (rev 235292)
@@ -120,7 +120,6 @@
 
     // No track has been attached yet.
     stream->type = Invalid;
-    stream->parser = nullptr;
     stream->caps = nullptr;
     stream->audioTrack = nullptr;
     stream->videoTrack = nullptr;
@@ -178,96 +177,16 @@
     const char* mediaType = capsMediaType(caps);
     GST_DEBUG_OBJECT(webKitMediaSrc, "Configured track %s: appsrc=%s, padId=%u, mediaType=%s", trackPrivate->id().string().utf8().data(), GST_ELEMENT_NAME(stream->appsrc), padId, mediaType);
 
-    GUniquePtr<gchar> parserBinName(g_strdup_printf("streamparser%u", padId));
-
-    if (areEncryptedCaps(caps)) {
-        GST_DEBUG("It's encrypted content, parsers are not needed before decrypting the content");
-        stream->parser = nullptr;
-    } else if (!g_strcmp0(mediaType, "video/x-h264")) {
-        GRefPtr<GstCaps> filterCaps = adoptGRef(gst_caps_new_simple("video/x-h264", "alignment", G_TYPE_STRING, "au", nullptr));
-        GstElement* capsfilter = gst_element_factory_make("capsfilter", nullptr);
-        g_object_set(capsfilter, "caps", filterCaps.get(), nullptr);
-
-        stream->parser = gst_bin_new(parserBinName.get());
-
-        GstElement* parser = gst_element_factory_make("h264parse", nullptr);
-        gst_bin_add_many(GST_BIN(stream->parser), parser, capsfilter, nullptr);
-        gst_element_link_pads(parser, "src", capsfilter, "sink");
-
-        GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad(parser, "sink"));
-        gst_element_add_pad(stream->parser, gst_ghost_pad_new("sink", pad.get()));
-
-        pad = adoptGRef(gst_element_get_static_pad(capsfilter, "src"));
-        gst_element_add_pad(stream->parser, gst_ghost_pad_new("src", pad.get()));
-    } else if (!g_strcmp0(mediaType, "video/x-h265")) {
-        GRefPtr<GstCaps> filterCaps = adoptGRef(gst_caps_new_simple("video/x-h265", "alignment", G_TYPE_STRING, "au", nullptr));
-        GstElement* capsfilter = gst_element_factory_make("capsfilter", nullptr);
-        g_object_set(capsfilter, "caps", filterCaps.get(), nullptr);
-
-        stream->parser = gst_bin_new(parserBinName.get());
-
-        GstElement* parser = gst_element_factory_make("h265parse", nullptr);
-        gst_bin_add_many(GST_BIN(stream->parser), parser, capsfilter, nullptr);
-        gst_element_link_pads(parser, "src", capsfilter, "sink");
-
-        GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad(parser, "sink"));
-        gst_element_add_pad(stream->parser, gst_ghost_pad_new("sink", pad.get()));
-
-        pad = adoptGRef(gst_element_get_static_pad(capsfilter, "src"));
-        gst_element_add_pad(stream->parser, gst_ghost_pad_new("src", pad.get()));
-    } else if (!g_strcmp0(mediaType, "audio/mpeg")) {
-        gint mpegversion = -1;
-        GstStructure* structure = gst_caps_get_structure(caps, 0);
-        gst_structure_get_int(structure, "mpegversion", &mpegversion);
-
-        GstElement* parser = nullptr;
-        if (mpegversion == 1)
-            parser = gst_element_factory_make("mpegaudioparse", nullptr);
-        else if (mpegversion == 2 || mpegversion == 4)
-            parser = gst_element_factory_make("aacparse", nullptr);
-        else
-            ASSERT_NOT_REACHED();
-
-        stream->parser = gst_bin_new(parserBinName.get());
-        gst_bin_add(GST_BIN(stream->parser), parser);
-
-        GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad(parser, "sink"));
-        gst_element_add_pad(stream->parser, gst_ghost_pad_new("sink", pad.get()));
-
-        pad = adoptGRef(gst_element_get_static_pad(parser, "src"));
-        gst_element_add_pad(stream->parser, gst_ghost_pad_new("src", pad.get()));
-    } else if (!g_strcmp0(mediaType, "video/x-vp8")
-        || !g_strcmp0(mediaType, "video/x-vp9")
-        || !g_strcmp0(mediaType, "audio/x-opus")
-        || !g_strcmp0(mediaType, "audio/x-vorbis"))
-        stream->parser = nullptr;
-    else {
-        GST_ERROR_OBJECT(stream->parent, "Unsupported media format: %s", mediaType);
-        return;
-    }
-
     GST_OBJECT_LOCK(webKitMediaSrc);
     stream->type = Unknown;
     GST_OBJECT_UNLOCK(webKitMediaSrc);
 
-    GRefPtr<GstPad> sourcePad;
-    if (stream->parser) {
-        gst_bin_add(GST_BIN(stream->parent), stream->parser);
-        gst_element_sync_state_with_parent(stream->parser);
-
-        GRefPtr<GstPad> sinkPad = adoptGRef(gst_element_get_static_pad(stream->parser, "sink"));
-        sourcePad = adoptGRef(gst_element_get_static_pad(stream->appsrc, "src"));
-        gst_pad_link(sourcePad.get(), sinkPad.get());
-        sourcePad = adoptGRef(gst_element_get_static_pad(stream->parser, "src"));
-    } else {
-        GST_DEBUG_OBJECT(m_webKitMediaSrc.get(), "Stream of type %s doesn't require a parser bin", mediaType);
-        sourcePad = adoptGRef(gst_element_get_static_pad(stream->appsrc, "src"));
-    }
+    GRefPtr<GstPad> sourcePad = adoptGRef(gst_element_get_static_pad(stream->appsrc, "src"));
     ASSERT(sourcePad);
 
     // FIXME: Is padId the best way to identify the Stream? What about trackId?
     g_object_set_data(G_OBJECT(sourcePad.get()), "padId", GINT_TO_POINTER(padId));
-    webKitMediaSrcLinkParser(sourcePad.get(), caps, stream);
+    webKitMediaSrcLinkSourcePad(sourcePad.get(), caps, stream);
 
     ASSERT(stream->parent->priv->mediaPlayerPrivate);
     int signal = -1;

Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp (235291 => 235292)


--- releases/WebKitGTK/webkit-2.22/Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp	2018-08-24 08:08:00 UTC (rev 235291)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp	2018-08-24 08:08:06 UTC (rev 235292)
@@ -490,7 +490,7 @@
     gst_element_add_pad(GST_ELEMENT(stream->parent), ghostpad);
 }
 
-void webKitMediaSrcLinkParser(GstPad* sourcePad, GstCaps* caps, Stream* stream)
+void webKitMediaSrcLinkSourcePad(GstPad* sourcePad, GstCaps* caps, Stream* stream)
 {
     ASSERT(caps && stream->parent);
     if (!caps || !stream->parent) {

Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h (235291 => 235292)


--- releases/WebKitGTK/webkit-2.22/Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h	2018-08-24 08:08:00 UTC (rev 235291)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h	2018-08-24 08:08:06 UTC (rev 235292)
@@ -58,8 +58,6 @@
 
     // Fields filled when the track is attached.
     WebCore::MediaSourceStreamTypeGStreamer type;
-    // Might be 0, e.g. for VP8/VP9.
-    GstElement* parser;
     GRefPtr<GstCaps> caps;
 
     // Only audio, video or nothing at a given time.
@@ -141,7 +139,7 @@
 gboolean webKitMediaSrcQueryWithParent(GstPad*, GstObject*, GstQuery*);
 void webKitMediaSrcUpdatePresentationSize(GstCaps*, Stream*);
 void webKitMediaSrcLinkStreamToSrcPad(GstPad*, Stream*);
-void webKitMediaSrcLinkParser(GstPad*, GstCaps*, Stream*);
+void webKitMediaSrcLinkSourcePad(GstPad*, GstCaps*, Stream*);
 void webKitMediaSrcFreeStream(WebKitMediaSrc*, Stream*);
 void webKitMediaSrcCheckAllTracksConfigured(WebKitMediaSrc*);
 GstURIType webKitMediaSrcUriGetType(GType);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to