You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

To enable Rialto in WebKit, apply patch below and rebuild webkit using bitbake command.
Solution tested with Broadcom device only. Change tested with WebKit 2.38.2 (e585b369185b29fbc514afd959295efd02df9426)

webkit.patch
diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
index 08bdac7e1e45..5aa17911bbfc 100644
--- a/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
+++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
@@ -402,12 +402,16 @@ void registerWebKitGStreamerElements()
         // The VAAPI plugin is not much maintained anymore and prone to rendering issues. In the
         // mid-term we will leverage the new stateless VA decoders. Disable the legacy plugin,
         // unless the WEBKIT_GST_ENABLE_LEGACY_VAAPI environment variable is set to 1.
+        auto* registry = gst_registry_get();
         const char* enableLegacyVAAPIPlugin = getenv("WEBKIT_GST_ENABLE_LEGACY_VAAPI");
         if (!enableLegacyVAAPIPlugin || !strcmp(enableLegacyVAAPIPlugin, "0")) {
-            auto* registry = gst_registry_get();
             if (auto vaapiPlugin = adoptGRef(gst_registry_find_plugin(registry, "vaapi")))
                 gst_registry_remove_plugin(registry, vaapiPlugin.get());
         }
+        if (auto brcmVidFilterPlugin = adoptGRef(gst_registry_find_plugin(registry, "brcmvidfilter")))
+            gst_registry_remove_plugin(registry, brcmVidFilterPlugin.get());
+        if (auto brcmAudFilterPlugin = adoptGRef(gst_registry_find_plugin(registry, "brcmaudfilter")))
+            gst_registry_remove_plugin(registry, brcmAudFilterPlugin.get());
         registryWasUpdated = true;
     });
 
diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
index d2bbf1416e9b..6b4a5ddd6c45 100644
--- a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
+++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
@@ -77,17 +77,10 @@ void GStreamerRegistryScanner::getSupportedDecodingTypes(HashSet<String, ASCIICa
 
 GStreamerRegistryScanner::ElementFactories::ElementFactories(OptionSet<ElementFactories::Type> types)
 {
-#if PLATFORM(BCM_NEXUS) || PLATFORM(BROADCOM)
-    if (types.contains(Type::AudioDecoder))
-        audioDecoderFactories = gst_element_factory_list_get_elements(GST_ELEMENT_FACTORY_TYPE_PARSER | GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO, GST_RANK_MARGINAL);
-    if (types.contains(Type::VideoDecoder))
-        videoDecoderFactories = gst_element_factory_list_get_elements(GST_ELEMENT_FACTORY_TYPE_PARSER | GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO, GST_RANK_MARGINAL);
-#else
     if (types.contains(Type::AudioDecoder))
         audioDecoderFactories = gst_element_factory_list_get_elements(GST_ELEMENT_FACTORY_TYPE_DECODER | GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO, GST_RANK_MARGINAL);
     if (types.contains(Type::VideoDecoder))
         videoDecoderFactories = gst_element_factory_list_get_elements(GST_ELEMENT_FACTORY_TYPE_DECODER | GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO, GST_RANK_MARGINAL);
-#endif
     if (types.contains(Type::AudioParser))
         audioParserFactories = gst_element_factory_list_get_elements(GST_ELEMENT_FACTORY_TYPE_PARSER | GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO, GST_RANK_NONE);
     if (types.contains(Type::VideoParser))
diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
index 6e46736d07d0..8855840217ce 100644
--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
@@ -1321,28 +1321,12 @@ void MediaPlayerPrivateGStreamer::loadingFailed(MediaPlayer::NetworkState networ
 
 GstElement* MediaPlayerPrivateGStreamer::createAudioSink()
 {
-#if PLATFORM(BROADCOM) || USE(WESTEROS_SINK) || PLATFORM(AMLOGIC) || PLATFORM(REALTEK)
-    // If audio is being controlled by an another pipeline, creating sink here may interfere with
-    // audio playback. Instead, check if an audio sink was setup in handleMessage and use it.
-    return nullptr;
-#endif
-
-    // For platform specific audio sinks, they need to be properly upranked so that they get properly autoplugged.
-
-    auto role = m_player->isVideoPlayer() ? "video"_s : "music"_s;
-    GstElement* audioSink = createPlatformAudioSink(role);
-    RELEASE_ASSERT(audioSink);
-    if (!audioSink)
-        return nullptr;
-
-#if ENABLE(WEB_AUDIO)
-    GstElement* audioSinkBin = gst_bin_new("audio-sink");
-    ensureAudioSourceProvider();
-    m_audioSourceProvider->configureAudioBin(audioSinkBin, audioSink);
-    return audioSinkBin;
-#else
-    return audioSink;
-#endif
+// #if ENABLE(WEB_AUDIO)
+//     // Rialto webaudio doesnt work, investigation needed
+//     return gst_element_factory_make("rialtowebaudiosink", "rialtowebaudiosink");
+// #else
+    return gst_element_factory_make("rialtomseaudiosink", "rialtomseaudiosink");
+// #endif
 }
 
 GstElement* MediaPlayerPrivateGStreamer::audioSink() const
@@ -1941,7 +1925,6 @@ void MediaPlayerPrivateGStreamer::handleMessage(GstMessage* message)
             }
         }
 #endif
-
 #if PLATFORM(BROADCOM) || USE(WESTEROS_SINK) || PLATFORM(AMLOGIC) || PLATFORM(REALTEK)
         if (currentState <= GST_STATE_READY && newState >= GST_STATE_READY) {
             // Detect an audio sink element and store reference to it if it supersedes what we currently have.
@@ -4150,7 +4133,7 @@ GstElement* MediaPlayerPrivateGStreamer::createHolePunchVideoSink()
     if (m_isLegacyPlaybin && !isPIPRequested)
         return nullptr;
     // Westeros using holepunch.
-    GstElement* videoSink = makeGStreamerElement("westerossink", "WesterosVideoSink");
+    GstElement* videoSink = gst_element_factory_make("rialtomsevideosink", "rialtomsevideosink");
     g_object_set(G_OBJECT(videoSink), "zorder", 0.0f, nullptr);
     if (isPIPRequested) {
         g_object_set(G_OBJECT(videoSink), "res-usage", 0u, nullptr);
@@ -4572,7 +4555,6 @@ std::optional<VideoFrameMetadata> MediaPlayerPrivateGStreamer::videoFrameMetadat
 
 void MediaPlayerPrivateGStreamer::setPageIsVisible(bool visible)
 {
-
     if (m_visible != visible) {
 #if USE(GSTREAMER_HOLEPUNCH)
         Locker locker { m_holePunchLock };
diff --git a/Source/cmake/FindThunder.cmake b/Source/cmake/FindThunder.cmake
index ab7064e3988b..bc086ad9105d 100644
--- a/Source/cmake/FindThunder.cmake
+++ b/Source/cmake/FindThunder.cmake
@@ -56,9 +56,7 @@ find_path(THUNDER_INCLUDE_DIR
 )
 
 find_library(THUNDER_LIBRARY
-    NAMES ocdm
-    HINTS ${PC_THUNDER_LIBDIR}
-          ${PC_THUNDER_LIBRARY_DIRS}
+    NAMES ocdmRialto
 )
 
 include(FindPackageHandleStandardArgs)


  • No labels