diff -urp webkitgtk-2.46.3.glib244/Source/cmake/GStreamerChecks.cmake webkitgtk-2.46.3.gstreamer1.8/Source/cmake/GStreamerChecks.cmake
--- webkitgtk-2.46.3.glib244/Source/cmake/GStreamerChecks.cmake	2024-11-07 13:00:38.568691770 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/cmake/GStreamerChecks.cmake	2024-11-07 14:07:45.154429832 -0600
@@ -1,7 +1,7 @@
 if (ENABLE_VIDEO OR ENABLE_WEB_AUDIO)
     SET_AND_EXPOSE_TO_BUILD(USE_GSTREAMER TRUE)
       if (USE_GSTREAMER_FULL)
-          find_package(GStreamer 1.18.4 REQUIRED COMPONENTS full)
+          find_package(GStreamer 1.8.3 REQUIRED COMPONENTS full)
           if (NOT PC_GSTREAMER_FULL_FOUND)
               message(FATAL_ERROR "GStreamer static library libgstreamer-full-1.0 not found")
           else ()
@@ -25,7 +25,7 @@ if (ENABLE_VIDEO OR ENABLE_WEB_AUDIO)
               list(APPEND GSTREAMER_COMPONENTS webrtc)
           endif ()
 
-          find_package(GStreamer 1.16.2 REQUIRED COMPONENTS ${GSTREAMER_COMPONENTS})
+          find_package(GStreamer 1.8.3 REQUIRED COMPONENTS ${GSTREAMER_COMPONENTS})
 
           if (ENABLE_WEB_AUDIO)
               if (NOT PC_GSTREAMER_AUDIO_FOUND OR NOT PC_GSTREAMER_FFT_FOUND)
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceGStreamer.cpp	2024-08-19 01:28:38.763291000 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceGStreamer.cpp	2024-11-07 14:07:45.154429832 -0600
@@ -68,7 +68,9 @@ void MediaStreamAudioSource::consumeAudi
     GST_BUFFER_FLAG_SET(buffer.get(), GST_BUFFER_FLAG_LIVE);
 
     copyBusData(bus, buffer.get(), muted());
+#if GST_CHECK_VERSION(1, 16, 0)
     gst_buffer_add_audio_meta(buffer.get(), &info, numberOfFrames, nullptr);
+#endif
     auto sample = adoptGRef(gst_sample_new(buffer.get(), caps.get(), nullptr, nullptr));
     GStreamerAudioData audioBuffer(WTFMove(sample), info);
     GStreamerAudioStreamDescription description(&info);
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp	2024-08-19 01:28:39.307274300 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp	2024-11-07 14:07:45.157763217 -0600
@@ -205,7 +205,7 @@ static inline std::optional<int> channel
 
 GstFlowReturn AudioFileReader::handleSample(GstAppSink* sink)
 {
-    auto sample = adoptGRef(gst_app_sink_try_pull_sample(sink, 0));
+    auto sample = adoptGRef(gst_app_sink_pull_sample(sink));
     if (!sample)
         return gst_app_sink_is_eos(sink) ? GST_FLOW_EOS : GST_FLOW_ERROR;
 
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp	2024-11-07 13:00:38.572025153 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp	2024-11-07 14:07:45.157763217 -0600
@@ -246,7 +246,7 @@ void AudioSourceProviderGStreamer::provi
 GstFlowReturn AudioSourceProviderGStreamer::handleSample(GstAppSink* sink, bool isPreroll)
 {
     GST_TRACE("Pulling audio sample from the sink");
-    auto sample = adoptGRef(isPreroll ? gst_app_sink_try_pull_preroll(sink, 0) : gst_app_sink_try_pull_sample(sink, 0));
+    auto sample = adoptGRef(isPreroll ? gst_app_sink_pull_preroll(sink) : gst_app_sink_pull_sample(sink));
     if (!sample)
         return gst_app_sink_is_eos(sink) ? GST_FLOW_EOS : GST_FLOW_ERROR;
 
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp	2024-08-19 01:28:39.307274300 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp	2024-11-07 14:07:45.157763217 -0600
@@ -78,6 +78,7 @@ struct _WebKitWebAudioSrcPrivate {
 
     GRefPtr<GstBufferPool> pool;
 
+    bool enableGapBufferSupport;
     bool hasRenderedAudibleFrame { false };
 
     Lock dispatchToRenderThreadLock;
@@ -92,6 +93,11 @@ struct _WebKitWebAudioSrcPrivate {
         sourcePad = webkitGstGhostPadFromStaticTemplate(&srcTemplate, "src", nullptr);
 
         g_rec_mutex_init(&mutex);
+
+        // GAP buffer support is enabled only for GStreamer 1.12.5 because of a
+        // memory leak that was fixed in that version.
+        // https://bugzilla.gnome.org/show_bug.cgi?id=793067
+        enableGapBufferSupport = webkitGstCheckVersion(1, 12, 5);
     }
 
     ~_WebKitWebAudioSrcPrivate()
@@ -206,7 +212,6 @@ static void webKitWebAudioSrcConstructed
     ASSERT(priv->sampleRate);
 
     GST_OBJECT_FLAG_SET(GST_OBJECT_CAST(src), GST_ELEMENT_FLAG_SOURCE);
-    gst_bin_set_suppressed_flags(GST_BIN_CAST(src), static_cast<GstElementFlags>(GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK));
 
     gst_element_add_pad(GST_ELEMENT(src), priv->sourcePad);
 
@@ -291,7 +296,9 @@ static GRefPtr<GstBuffer> webKitWebAudio
     }
 
     ASSERT(buffer);
+#if GST_CHECK_VERSION (1, 16, 0)
     gst_buffer_add_audio_meta(buffer.get(), &priv->info, priv->framesToPull, nullptr);
+#endif
 
     {
         GstMappedBuffer mappedBuffer(buffer.get(), GST_MAP_READ);
@@ -346,7 +353,8 @@ static void webKitWebAudioSrcRenderAndPu
     GST_BUFFER_DURATION(buffer.get()) = duration;
 
     if (priv->bus->isSilent()) {
-        GST_BUFFER_FLAG_SET(buffer.get(), GST_BUFFER_FLAG_GAP);
+        if (priv->enableGapBufferSupport)
+            GST_BUFFER_FLAG_SET(buffer.get(), GST_BUFFER_FLAG_GAP);
         GST_BUFFER_FLAG_SET(buffer.get(), GST_BUFFER_FLAG_DROPPABLE);
     }
 
@@ -402,7 +410,9 @@ static GstStateChangeReturn webKitWebAud
     auto* src = WEBKIT_WEB_AUDIO_SRC(element);
     auto* priv = src->priv;
 
+#if GST_CHECK_VERSION(1, 14, 0)
     GST_DEBUG_OBJECT(element, "%s", gst_state_change_get_name(transition));
+#endif
 
     switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp	2024-08-19 01:28:39.399271500 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp	2024-11-07 14:07:45.157763217 -0600
@@ -56,6 +56,7 @@ AudioTrackPrivateGStreamer::AudioTrackPr
     installUpdateConfigurationHandlers();
 }
 
+#if GST_CHECK_VERSION(1, 10, 0)
 AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer(ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer>&& player, unsigned index, GstStream* stream)
     : TrackPrivateBaseGStreamer(TrackPrivateBaseGStreamer::TrackType::Audio, this, index, stream)
     , m_player(WTFMove(player))
@@ -73,7 +74,9 @@ AudioTrackPrivateGStreamer::AudioTrackPr
 void AudioTrackPrivateGStreamer::capsChanged(const String& streamId, GRefPtr<GstCaps>&& caps)
 {
     ASSERT(isMainThread());
+#if GST_CHECK_VERSION(1, 10, 0)
     updateConfigurationFromCaps(WTFMove(caps));
+#endif
 
     RefPtr player = m_player.get();
     if (!player)
@@ -146,11 +149,14 @@ void AudioTrackPrivateGStreamer::updateC
         configuration.numberOfChannels = GST_AUDIO_INFO_CHANNELS(&info);
     }
 }
+#endif
 
 AudioTrackPrivate::Kind AudioTrackPrivateGStreamer::kind() const
 {
+#if GST_CHECK_VERSION(1, 10, 0)
     if (m_stream && gst_stream_get_stream_flags(m_stream.get()) & GST_STREAM_FLAG_SELECT)
         return AudioTrackPrivate::Kind::Main;
+#endif
 
     return AudioTrackPrivate::kind();
 }
@@ -159,8 +165,10 @@ void AudioTrackPrivateGStreamer::disconn
 {
     m_taskQueue.startAborting();
 
+#if GST_CHECK_VERSION(1, 10, 0)
     if (m_stream)
         g_signal_handlers_disconnect_matched(m_stream.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
+#endif
 
     m_player = nullptr;
     TrackPrivateBaseGStreamer::disconnect();
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h	2024-08-19 01:28:39.399271500 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h	2024-11-07 14:07:45.157763217 -0600
@@ -42,10 +42,12 @@ public:
         return adoptRef(*new AudioTrackPrivateGStreamer(WTFMove(player), index, WTFMove(pad), shouldHandleStreamStartEvent));
     }
 
+#if GST_CHECK_VERSION(1, 10, 0)
     static Ref<AudioTrackPrivateGStreamer> create(ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer>&& player, unsigned index, GstStream* stream)
     {
         return adoptRef(*new AudioTrackPrivateGStreamer(WTFMove(player), index, stream));
     }
+#endif
 
     Kind kind() const final;
 
@@ -61,17 +63,23 @@ public:
     AtomString label() const final { return m_label; }
     AtomString language() const final { return m_language; }
 
+#if GST_CHECK_VERSION(1, 10, 0)
     void updateConfigurationFromCaps(GRefPtr<GstCaps>&&) final;
+#endif
 
 protected:
+#if GST_CHECK_VERSION(1, 10, 0)
     void updateConfigurationFromTags(GRefPtr<GstTagList>&&) final;
 
     void tagsChanged(GRefPtr<GstTagList>&& tags) final { updateConfigurationFromTags(WTFMove(tags)); }
     void capsChanged(const String& streamId, GRefPtr<GstCaps>&&) final;
+#endif
 
 private:
     AudioTrackPrivateGStreamer(ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer>&&, unsigned index, GRefPtr<GstPad>&&, bool shouldHandleStreamStartEvent);
+#if GST_CHECK_VERSION(1, 10, 0)
     AudioTrackPrivateGStreamer(ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer>&&, unsigned index, GstStream*);
+#endif
 
     ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer> m_player;
 };
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h	2024-08-19 01:28:39.407271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h	2024-11-07 14:07:45.157763217 -0600
@@ -61,8 +61,10 @@ public:
     const String& systemId() const { return m_systemId; }
     String payloadContainerType() const
     {
+#if GST_CHECK_VERSION(1, 16, 0)
         if (m_systemId == GST_PROTECTION_UNSPECIFIED_SYSTEM_ID ""_s)
             return "webm"_s;
+#endif
         return "cenc"_s;
     }
 
@@ -111,8 +113,10 @@ public:
     static constexpr auto s_WidevineKeySystem = "com.widevine.alpha"_s;
     static constexpr auto s_PlayReadyUUID = WEBCORE_GSTREAMER_EME_UTILITIES_PLAYREADY_UUID ""_s;
     static constexpr std::array<ASCIILiteral, 2> s_PlayReadyKeySystems = { "com.microsoft.playready"_s,  "com.youtube.playready"_s };
+#if GST_CHECK_VERSION(1, 16, 0)
     static constexpr auto s_unspecifiedUUID = GST_PROTECTION_UNSPECIFIED_SYSTEM_ID ""_s;
     static constexpr auto s_unspecifiedKeySystem = GST_PROTECTION_UNSPECIFIED_SYSTEM_ID ""_s;
+#endif
 
     static bool isClearKeyKeySystem(const String& keySystem)
     {
@@ -144,6 +148,7 @@ public:
         return equalIgnoringASCIICase(uuid, s_PlayReadyUUID);
     }
 
+#if GST_CHECK_VERSION(1, 16, 0)
     static bool isUnspecifiedKeySystem(const String& keySystem)
     {
         return equalIgnoringASCIICase(keySystem, s_unspecifiedKeySystem);
@@ -153,6 +158,7 @@ public:
     {
         return equalIgnoringASCIICase(uuid, s_unspecifiedUUID);
     }
+#endif
 
     static const char* keySystemToUuid(const String& keySystem)
     {
@@ -165,8 +171,10 @@ public:
         if (isPlayReadyKeySystem(keySystem))
             return s_PlayReadyUUID;
 
+#if GST_CHECK_VERSION(1, 16, 0)
         if (isUnspecifiedKeySystem(keySystem))
             return s_unspecifiedUUID;
+#endif
 
         ASSERT_NOT_REACHED();
         return { };
@@ -183,8 +191,10 @@ public:
         if (isPlayReadyUUID(uuid))
             return s_PlayReadyKeySystems[0];
 
+#if GST_CHECK_VERSION(1, 16, 0)
         if (isUnspecifiedUUID(uuid))
             return s_unspecifiedKeySystem;
+#endif
 
         ASSERT_NOT_REACHED();
         return ""_s;
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp	2024-08-19 01:28:39.407271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp	2024-11-07 14:07:45.157763217 -0600
@@ -175,8 +175,11 @@ static GstCaps* transformCaps(GstBaseTra
 
                 // GST_PROTECTION_UNSPECIFIED_SYSTEM_ID was added in the GStreamer
                 // developement git master which will ship as version 1.16.0.
-                gst_structure_set_name(outgoingStructure.get(), !g_strcmp0(klass->protectionSystemId(self),
-                    GST_PROTECTION_UNSPECIFIED_SYSTEM_ID) ? "application/x-webm-enc" : "application/x-cenc");
+                gst_structure_set_name(outgoingStructure.get(),
+#if GST_CHECK_VERSION(1, 16, 0)
+                    !g_strcmp0(klass->protectionSystemId(self), GST_PROTECTION_UNSPECIFIED_SYSTEM_ID) ? "application/x-webm-enc" :
+#endif
+                    "application/x-cenc");
             }
         }
 
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp	2024-11-07 13:00:38.572025153 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp	2024-11-07 14:07:45.157763217 -0600
@@ -88,7 +88,25 @@ static void webKitGLVideoSinkConstructed
     ASSERT(colorconvert);
     gst_bin_add_many(GST_BIN_CAST(sink), upload, colorconvert, sink->priv->appSink.get(), nullptr);
 
-    GRefPtr<GstCaps> caps = adoptGRef(gst_caps_from_string("video/x-raw, format = (string) " GST_GL_CAPS_FORMAT));
+    // Workaround until we can depend on GStreamer 1.16.2.
+    // https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/8d32de090554cf29fe359f83aa46000ba658a693
+    // Forcing a color conversion to RGBA here allows glupload to internally use
+    // an uploader that adds a VideoMeta, through the TextureUploadMeta caps
+    // feature, without needing the patch above. However this specific caps
+    // feature is going to be removed from GStreamer so it is considered a
+    // short-term workaround. This code path most likely will have a negative
+    // performance impact on embedded platforms as well. Downstream embedders
+    // are highly encouraged to cherry-pick the patch linked above in their BSP
+    // and set the WEBKIT_GST_NO_RGBA_CONVERSION environment variable until
+    // GStreamer 1.16.2 is released.
+    // See also https://bugs.webkit.org/show_bug.cgi?id=201422
+    GRefPtr<GstCaps> caps;
+    if (webkitGstCheckVersion(1, 16, 2) || getenv("WEBKIT_GST_NO_RGBA_CONVERSION"))
+        caps = adoptGRef(gst_caps_from_string("video/x-raw, format = (string) " GST_GL_CAPS_FORMAT));
+    else {
+        GST_INFO_OBJECT(sink, "Forcing RGBA as GStreamer is not new enough.");
+        caps = adoptGRef(gst_caps_from_string("video/x-raw, format = (string) RGBA"));
+    }
     gst_caps_set_features(caps.get(), 0, gst_caps_features_new(GST_CAPS_FEATURE_MEMORY_GL_MEMORY, nullptr));
     g_object_set(sink->priv->appSink.get(), "caps", caps.get(), nullptr);
 
@@ -141,7 +159,11 @@ std::optional<GRefPtr<GstContext>> reque
     if (!g_strcmp0(contextType, "gst.gl.app_context")) {
         GRefPtr<GstContext> appContext = adoptGRef(gst_context_new("gst.gl.app_context", FALSE));
         GstStructure* structure = gst_context_writable_structure(appContext.get());
+#if GST_CHECK_VERSION(1, 12, 0)
         gst_structure_set(structure, "context", GST_TYPE_GL_CONTEXT, gstGLContext, nullptr);
+#else
+        gst_structure_set(structure, "context", GST_GL_TYPE_CONTEXT, gstGLContext, nullptr);
+#endif
         return appContext;
     }
 
@@ -162,11 +184,15 @@ static bool setGLContext(GstElement* ele
 
 static GstStateChangeReturn webKitGLVideoSinkChangeState(GstElement* element, GstStateChange transition)
 {
+#if GST_CHECK_VERSION(1, 14, 0)
     GST_DEBUG_OBJECT(element, "%s", gst_state_change_get_name(transition));
+#endif
 
     switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
+#if GST_CHECK_VERSION(1, 14, 0)
     case GST_STATE_CHANGE_READY_TO_READY:
+#endif
     case GST_STATE_CHANGE_READY_TO_PAUSED: {
         if (!setGLContext(element, GST_GL_DISPLAY_CONTEXT_TYPE))
             return GST_STATE_CHANGE_FAILURE;
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp	2024-08-19 01:28:39.399271500 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp	2024-11-07 14:07:45.157763217 -0600
@@ -445,6 +445,7 @@ template <> void derefGPtr<GstQuery>(Gst
         gst_query_unref(ptr);
 }
 
+#if GST_CHECK_VERSION(1, 10, 0)
 template <> GRefPtr<GstStream> adoptGRef(GstStream* ptr)
 {
     return GRefPtr<GstStream>(ptr, GRefPtrAdopt);
@@ -482,6 +483,7 @@ template <> void derefGPtr<GstStreamColl
     if (ptr)
         gst_object_unref(ptr);
 }
+#endif
 
 template <>
 GRefPtr<GstClock> adoptGRef(GstClock* ptr)
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h	2024-08-19 01:28:39.399271500 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h	2024-11-07 14:07:45.157763217 -0600
@@ -153,6 +153,7 @@ GRefPtr<WebKitWebSrc> ensureGRef(WebKitW
 template<> WebKitWebSrc* refGPtr<WebKitWebSrc>(WebKitWebSrc* ptr);
 template<> void derefGPtr<WebKitWebSrc>(WebKitWebSrc* ptr);
 
+#if GST_CHECK_VERSION(1, 10, 0)
 template<> GRefPtr<GstStream> adoptGRef(GstStream*);
 template<> GstStream* refGPtr<GstStream>(GstStream*);
 template<> void derefGPtr<GstStream>(GstStream*);
@@ -160,6 +161,7 @@ template<> void derefGPtr<GstStream>(Gst
 template<> GRefPtr<GstStreamCollection> adoptGRef(GstStreamCollection*);
 template<> GstStreamCollection* refGPtr<GstStreamCollection>(GstStreamCollection*);
 template<> void derefGPtr<GstStreamCollection>(GstStreamCollection*);
+#endif
 
 template<> GRefPtr<GstClock> adoptGRef(GstClock*);
 template<> GstClock* refGPtr<GstClock>(GstClock*);
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp	2024-08-19 01:28:39.403271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp	2024-11-07 14:07:45.161096603 -0600
@@ -148,7 +148,9 @@ static void gst_allocator_fast_malloc_in
 {
     auto* baseAllocator = GST_ALLOCATOR_CAST(allocator);
 
+#if GST_CHECK_VERSION (1, 10, 0)
     GST_OBJECT_FLAG_SET(allocator, GST_OBJECT_FLAG_MAY_BE_LEAKED);
+#endif
 
     baseAllocator->mem_type = "FastMalloc";
     baseAllocator->mem_map = reinterpret_cast<GstMemoryMapFunction>(gstAllocatorFastMallocMemMap);
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GStreamerAudioMixer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GStreamerAudioMixer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GStreamerAudioMixer.cpp	2024-11-07 13:00:38.572025153 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GStreamerAudioMixer.cpp	2024-11-07 14:07:45.161096603 -0600
@@ -58,8 +58,9 @@ GStreamerAudioMixer::GStreamerAudioMixer
 
 void GStreamerAudioMixer::ensureState(GstStateChange stateChange)
 {
+#if GST_CHECK_VERSION(1, 14, 0)
     GST_DEBUG_OBJECT(m_pipeline.get(), "Handling %s transition (%u mixer pads)", gst_state_change_get_name(stateChange), m_mixer->numsinkpads);
-
+#endif
     switch (stateChange) {
     case GST_STATE_CHANGE_READY_TO_PAUSED:
         gst_element_set_state(m_pipeline.get(), GST_STATE_PAUSED);
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp	2024-11-07 13:00:38.572025153 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp	2024-11-07 14:07:45.161096603 -0600
@@ -408,7 +408,6 @@ void registerWebKitGStreamerElements()
 
 #if ENABLE(VIDEO)
         gst_element_register(0, "webkitwebsrc", GST_RANK_PRIMARY + 100, WEBKIT_TYPE_WEB_SRC);
-        gst_element_register(0, "webkitdmabufvideosink", GST_RANK_NONE, WEBKIT_TYPE_DMABUF_VIDEO_SINK);
 #if USE(GSTREAMER_GL)
         gst_element_register(0, "webkitglvideosink", GST_RANK_NONE, WEBKIT_TYPE_GL_VIDEO_SINK);
 #endif
@@ -582,7 +581,6 @@ void deinitializeGStreamer()
     teardownGStreamerRegistryScanner();
 #if ENABLE(VIDEO)
     teardownVideoEncoderSingleton();
-    teardownGStreamerImageDecoders();
 #endif
 
 #if GST_CHECK_VERSION(1, 18, 0)
@@ -744,6 +742,7 @@ int GstMappedFrame::planeStride(uint32_t
     return GST_VIDEO_FRAME_PLANE_STRIDE(&m_frame, planeIndex);
 }
 
+#if GST_CHECK_VERSION(1, 116, 0)
 GstMappedAudioBuffer::GstMappedAudioBuffer(GstBuffer* buffer, GstAudioInfo info, GstMapFlags flags)
 {
     m_isValid = gst_audio_buffer_map(&m_buffer, &info, buffer, flags);
@@ -787,6 +786,7 @@ GstAudioInfo* GstMappedAudioBuffer::info
 
     return &m_buffer.info;
 }
+#endif
 
 static GQuark customMessageHandlerQuark()
 {
@@ -1306,7 +1306,7 @@ PlatformVideoColorSpace videoColorSpaceF
 PlatformVideoColorSpace videoColorSpaceFromInfo(const GstVideoInfo& info)
 {
     ensureGStreamerInitialized();
-#ifndef GST_DISABLE_GST_DEBUG
+#if 0
     GUniquePtr<char> colorimetry(gst_video_colorimetry_to_string(&GST_VIDEO_INFO_COLORIMETRY(&info)));
 #endif
     PlatformVideoColorSpace colorSpace;
@@ -1333,7 +1333,7 @@ PlatformVideoColorSpace videoColorSpaceF
         colorSpace.matrix = PlatformVideoMatrixCoefficients::Unspecified;
         break;
     default:
-#ifndef GST_DISABLE_GST_DEBUG
+#if 0
         GST_WARNING("Unhandled colorspace matrix from %s", colorimetry.get());
 #endif
         break;
@@ -1385,7 +1385,7 @@ PlatformVideoColorSpace videoColorSpaceF
         colorSpace.transfer = PlatformVideoTransferCharacteristics::Unspecified;
         break;
     default:
-#ifndef GST_DISABLE_GST_DEBUG
+#if 0
         GST_WARNING("Unhandled colorspace transfer from %s", colorimetry.get());
 #endif
         break;
@@ -1404,12 +1404,14 @@ PlatformVideoColorSpace videoColorSpaceF
     case GST_VIDEO_COLOR_PRIMARIES_SMPTE170M:
         colorSpace.primaries = PlatformVideoColorPrimaries::Smpte170m;
         break;
+#if GST_CHECK_VERSION(1, 16, 0)
     case GST_VIDEO_COLOR_PRIMARIES_SMPTERP431:
         colorSpace.primaries = PlatformVideoColorPrimaries::SmpteRp431;
         break;
     case GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432:
         colorSpace.primaries = PlatformVideoColorPrimaries::SmpteEg432;
         break;
+#endif
     case GST_VIDEO_COLOR_PRIMARIES_FILM:
         colorSpace.primaries = PlatformVideoColorPrimaries::Film;
         break;
@@ -1419,14 +1421,16 @@ PlatformVideoColorSpace videoColorSpaceF
     case GST_VIDEO_COLOR_PRIMARIES_SMPTE240M:
         colorSpace.primaries = PlatformVideoColorPrimaries::Smpte240m;
         break;
+#if GST_CHECK_VERSION(1, 16, 0)
     case GST_VIDEO_COLOR_PRIMARIES_EBU3213:
         colorSpace.primaries = PlatformVideoColorPrimaries::JedecP22Phosphors;
         break;
+#endif
     case GST_VIDEO_COLOR_PRIMARIES_UNKNOWN:
         colorSpace.primaries = PlatformVideoColorPrimaries::Unspecified;
         break;
     default:
-#ifndef GST_DISABLE_GST_DEBUG
+#if 0
         GST_WARNING("Unhandled colorspace primaries from %s", colorimetry.get());
 #endif
         break;
@@ -1536,12 +1540,14 @@ void fillVideoInfoColorimetryFromColorSp
         case PlatformVideoColorPrimaries::Smpte170m:
             GST_VIDEO_INFO_COLORIMETRY(info).primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE170M;
             break;
+#if GST_CHECK_VERSION(1, 16, 0)
         case PlatformVideoColorPrimaries::SmpteRp431:
             GST_VIDEO_INFO_COLORIMETRY(info).primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTERP431;
             break;
         case PlatformVideoColorPrimaries::SmpteEg432:
             GST_VIDEO_INFO_COLORIMETRY(info).primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432;
             break;
+#endif
         case PlatformVideoColorPrimaries::Film:
             GST_VIDEO_INFO_COLORIMETRY(info).primaries = GST_VIDEO_COLOR_PRIMARIES_FILM;
             break;
@@ -1551,9 +1557,11 @@ void fillVideoInfoColorimetryFromColorSp
         case PlatformVideoColorPrimaries::Smpte240m:
             GST_VIDEO_INFO_COLORIMETRY(info).primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE240M;
             break;
+#if GST_CHECK_VERSION(1, 16, 0)
         case PlatformVideoColorPrimaries::JedecP22Phosphors:
             GST_VIDEO_INFO_COLORIMETRY(info).primaries = GST_VIDEO_COLOR_PRIMARIES_EBU3213;
             break;
+#endif
         case PlatformVideoColorPrimaries::Unspecified:
             GST_VIDEO_INFO_COLORIMETRY(info).primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
             break;
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h	2024-11-07 13:00:38.572025153 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h	2024-11-07 14:07:45.161096603 -0600
@@ -243,6 +243,7 @@ private:
     GstVideoFrame m_frame;
 };
 
+#if GST_CHECK_VERSION(1, 16, 0)
 class GstMappedAudioBuffer {
     WTF_MAKE_NONCOPYABLE(GstMappedAudioBuffer);
 public:
@@ -259,6 +260,7 @@ private:
     GstAudioBuffer m_buffer;
     bool m_isValid { false };
 };
+#endif
 
 void connectSimpleBusMessageCallback(GstElement*, Function<void(GstMessage*)>&& = [](GstMessage*) { });
 void disconnectSimpleBusMessageCallback(GstElement*);
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp	2024-09-30 03:15:01.128258500 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp	2024-11-07 14:07:45.161096603 -0600
@@ -541,8 +541,6 @@ void GStreamerRegistryScanner::initializ
         { ElementFactories::Type::AudioDecoder, "audio/x-dts"_s, { }, { } },
         { ElementFactories::Type::AudioDecoder, "audio/x-sbc"_s, { }, { } },
         { ElementFactories::Type::AudioDecoder, "audio/x-sid"_s, { }, { } },
-        { ElementFactories::Type::AudioDecoder, "audio/x-alaw"_s, { }, { "alaw"_s } },
-        { ElementFactories::Type::AudioDecoder, "audio/x-mulaw"_s, { }, { "ulaw"_s } },
         { ElementFactories::Type::AudioDecoder, "audio/x-speex"_s, { "audio/speex"_s, "audio/x-speex"_s }, { } },
         { ElementFactories::Type::AudioDecoder, "audio/x-wavpack"_s, { "audio/x-wavpack"_s }, { } },
         { ElementFactories::Type::VideoDecoder, "video/mpeg, mpegversion=(int){1,2}, systemstream=(boolean)false"_s, { "video/mpeg"_s }, { "mpeg"_s } },
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/ImageDecoderGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/ImageDecoderGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/ImageDecoderGStreamer.cpp	2024-08-19 01:28:39.403271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/ImageDecoderGStreamer.cpp	2024-11-07 14:07:45.161096603 -0600
@@ -295,9 +295,11 @@ void ImageDecoderGStreamer::storeDecoded
 
 void ImageDecoderGStreamer::pushEncodedData(const FragmentedSharedBuffer& sharedBuffer)
 {
+    gsize size;
     auto data = sharedBuffer.makeContiguous();
     auto bytes = data->createGBytes();
-    auto buffer = adoptGRef(gst_buffer_new_wrapped_bytes(bytes.get()));
+  guint8 *bytes_data = (guint8 *) g_bytes_get_data (bytes.get(), &size);
+    auto buffer = adoptGRef(gst_buffer_new_wrapped_full(GST_MEMORY_FLAG_READONLY, bytes_data, size, 0, size, g_bytes_ref (bytes.get()), (GDestroyNotify) g_bytes_unref));
     m_eos = false;
     m_error = false;
 
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp	2024-08-19 01:28:39.403271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp	2024-11-07 14:07:45.161096603 -0600
@@ -54,6 +54,7 @@ InbandTextTrackPrivateGStreamer::InbandT
     installUpdateConfigurationHandlers();
 }
 
+#if GST_CHECK_VERSION(1, 10, 0)
 InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer(unsigned index, GstStream* stream)
     : InbandTextTrackPrivate(CueFormat::WebVTT)
     , TrackPrivateBaseGStreamer(TrackPrivateBaseGStreamer::TrackType::Text, this, index, stream)
@@ -67,6 +68,7 @@ InbandTextTrackPrivateGStreamer::InbandT
     auto caps = adoptGRef(gst_stream_get_caps(m_stream.get()));
     m_kind = doCapsHaveType(caps.get(), "closedcaption/"_s) ? Kind::Captions : Kind::Subtitles;
 }
+#endif
 
 void InbandTextTrackPrivateGStreamer::tagsChanged(GRefPtr<GstTagList>&& tags)
 {
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h	2024-08-19 01:28:39.403271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h	2024-11-07 14:07:45.161096603 -0600
@@ -47,10 +47,12 @@ public:
         return create(index, WTFMove(pad));
     }
 
+#if GST_CHECK_VERSION(1, 10, 0)
     static Ref<InbandTextTrackPrivateGStreamer> create(ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer>&&, unsigned index, GstStream* stream)
     {
         return adoptRef(*new InbandTextTrackPrivateGStreamer(index, stream));
     }
+#endif
 
     Kind kind() const final { return m_kind; }
     TrackID id() const final { return m_trackID.value_or(m_index); }
@@ -66,7 +68,9 @@ protected:
 
 private:
     InbandTextTrackPrivateGStreamer(unsigned index, GRefPtr<GstPad>&&, bool shouldHandleStreamStartEvent);
+#if GST_CHECK_VERSION(1, 10, 0)
     InbandTextTrackPrivateGStreamer(unsigned index, GstStream*);
+#endif
 
     void notifyTrackOfSample();
 
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp	2024-11-07 14:04:06.361012891 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp	2024-11-07 18:35:39.010937451 -0600
@@ -50,7 +50,6 @@
 #include "TextCombinerGStreamer.h"
 #include "TextSinkGStreamer.h"
 #include "TimeRanges.h"
-#include "VideoFrameMetadataGStreamer.h"
 #include "VideoSinkGStreamer.h"
 #include "VideoTrackPrivateGStreamer.h"
 #include "WebKitAudioSinkGStreamer.h"
@@ -162,6 +161,14 @@ MediaLogObserver& mediaLogObserverSingle
 }
 #endif // GST_DISABLE_GST_DEBUG
 
+static void convertToInternalProtocol(URL& url)
+{
+    if (webkitGstCheckVersion(1, 12, 0))
+        return;
+    if (url.protocolIsInHTTPFamily() || url.protocolIsBlob())
+        url.setProtocol(makeString("webkit+"_s, url.protocol()));
+}
+
 MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer(MediaPlayer* player)
     : m_notifier(MainThreadNotifier<MainThreadNotification>::create())
     , m_player(player)
@@ -399,6 +406,7 @@ void MediaPlayerPrivateGStreamer::load(c
     m_readyState = MediaPlayer::ReadyState::HaveNothing;
     player->readyStateChanged();
     m_areVolumeAndMuteInitialized = false;
+    m_hasTaintedOrigin = std::nullopt;
 
     if (!m_isDelayingLoad)
         commitLoad();
@@ -987,6 +995,12 @@ unsigned long long MediaPlayerPrivateGSt
 
 std::optional<bool> MediaPlayerPrivateGStreamer::isCrossOrigin(const SecurityOrigin& origin) const
 {
+    // GStreamer < 1.12 has an incomplete uridownloader implementation so we
+    // can't use WebKitWebSrc for adaptive fragments downloading if this
+    // version is detected.
+    if (m_hasTaintedOrigin)
+        return true;
+
     if (WEBKIT_IS_WEB_SRC(m_source.get()))
         return webKitSrcIsCrossOrigin(WEBKIT_WEB_SRC(m_source.get()), origin);
     return false;
@@ -1099,6 +1113,7 @@ void MediaPlayerPrivateGStreamer::setPla
         cleanURLString = cleanURLString.left(url.pathEnd());
 
     m_url = URL { cleanURLString };
+    convertToInternalProtocol(m_url);
     GST_INFO_OBJECT(pipeline(), "Load %s", m_url.string().utf8().data());
     g_object_set(m_pipeline.get(), "uri", m_url.string().utf8().data(), nullptr);
 }
@@ -1612,6 +1627,7 @@ void MediaPlayerPrivateGStreamer::update
 
 void MediaPlayerPrivateGStreamer::playbin3SendSelectStreamsIfAppropriate()
 {
+#if GST_CHECK_VERSION(1, 10, 0)
     ASSERT(!m_isLegacyPlaybin);
 
     bool haveDifferentStreamIds = (m_wantedAudioStreamId != m_currentAudioStreamId || m_wantedVideoStreamId != m_currentVideoStreamId);
@@ -1641,8 +1657,10 @@ void MediaPlayerPrivateGStreamer::playbi
     m_waitingForStreamsSelectedEvent = true;
     gst_element_send_event(m_pipeline.get(), gst_event_new_select_streams(streams));
     g_list_free_full(streams, reinterpret_cast<GDestroyNotify>(g_free));
+#endif
 }
 
+#if GST_CHECK_VERSION(1, 10, 0)
 void MediaPlayerPrivateGStreamer::updateTracks([[maybe_unused]] const GRefPtr<GstObject>& collectionOwner)
 {
     ASSERT(!m_isLegacyPlaybin);
@@ -1746,7 +1764,9 @@ void MediaPlayerPrivateGStreamer::update
     }
 #undef CREATE_OR_SELECT_TRACK
 }
+#endif // GST_CHECK_VERSION(1, 10, 0)
 
+#if GST_CHECK_VERSION(1, 10, 0)
 void MediaPlayerPrivateGStreamer::handleStreamCollectionMessage(GstMessage* message)
 {
     if (m_isLegacyPlaybin)
@@ -1777,6 +1797,7 @@ void MediaPlayerPrivateGStreamer::handle
     callOnMainThreadAndWait(WTFMove(callback));
     GST_DEBUG_OBJECT(pipeline(), "Updating tracks DONE");
 }
+#endif
 
 bool MediaPlayerPrivateGStreamer::handleNeedContextMessage(GstMessage* message)
 {
@@ -2067,6 +2088,7 @@ void MediaPlayerPrivateGStreamer::handle
         GstState newState;
         gst_message_parse_state_changed(message, &currentState, &newState, nullptr);
 
+#if GST_CHECK_VERSION(1, 16, 0)
         if (isHolePunchRenderingEnabled() && currentState <= GST_STATE_READY && newState >= GST_STATE_READY) {
             // If we didn't create a video sink, store a reference to the created one.
             if (!m_videoSink) {
@@ -2097,9 +2119,12 @@ void MediaPlayerPrivateGStreamer::handle
                     m_audioSink = element;
             }
         }
+#endif
 
+#if GST_CHECK_VERSION(1, 10, 0)
         if (quirksManager.isEnabled() && quirksManager.needsBufferingPercentageCorrection())
             quirksManager.setupBufferingPercentageCorrection(this, currentState, newState, GRefPtr<GstElement>(GST_ELEMENT(GST_MESSAGE_SRC(message))));
+#endif
 
         if (!messageSourceIsPlaybin || m_isDelayingLoad)
             break;
@@ -2164,6 +2189,7 @@ void MediaPlayerPrivateGStreamer::handle
             GST_DEBUG_OBJECT(pipeline(), "Processing HTTP headers: %" GST_PTR_FORMAT, structure);
             if (auto uri = gstStructureGetString(structure, "uri"_s)) {
                 URL url { makeString(uri) };
+                convertToInternalProtocol(m_url);
 
                 if (url != m_url) {
                     GST_DEBUG_OBJECT(pipeline(), "Ignoring HTTP response headers for non-main URI.");
@@ -2213,6 +2239,11 @@ void MediaPlayerPrivateGStreamer::handle
                 }
             }
         } else if (gst_structure_has_name(structure, "GstCacheDownloadComplete")) {
+        } else if (gst_structure_has_name(structure, "adaptive-streaming-statistics")) {
+            if (WEBKIT_IS_WEB_SRC(m_source.get()) && !webkitGstCheckVersion(1, 12, 0)) {
+                if (const char* uri = gst_structure_get_string(structure, "uri"))
+                    m_hasTaintedOrigin = webKitSrcIsCrossOrigin(WEBKIT_WEB_SRC_CAST(m_source.get()), SecurityOrigin::create(URL(URL(), String::fromLatin1(uri))));
+            }
             GST_INFO_OBJECT(pipeline(), "Stream is fully downloaded, stopping monitoring downloading progress.");
             m_fillTimer.stop();
             m_bufferingPercentage = 100;
@@ -2226,6 +2257,7 @@ void MediaPlayerPrivateGStreamer::handle
     case GST_MESSAGE_TOC:
         processTableOfContents(message);
         break;
+#if GST_CHECK_VERSION(1, 10, 0)
     case GST_MESSAGE_STREAMS_SELECTED: {
         if (m_isLegacyPlaybin)
             break;
@@ -2264,6 +2296,7 @@ void MediaPlayerPrivateGStreamer::handle
         notifyPlayerOfTrack<InbandTextTrackPrivateGStreamer>();
         break;
     }
+#endif
     default:
         GST_DEBUG_OBJECT(pipeline(), "Unhandled GStreamer message type: %s", GST_MESSAGE_TYPE_NAME(message));
         break;
@@ -2468,6 +2501,7 @@ void MediaPlayerPrivateGStreamer::proces
         processTableOfContentsEntry(static_cast<GstTocEntry*>(i->data));
 }
 
+#if 0
 void MediaPlayerPrivateGStreamer::configureElement(GstElement* element)
 {
     configureElementPlatformQuirks(element);
@@ -2516,6 +2550,7 @@ void MediaPlayerPrivateGStreamer::config
     if (!g_strcmp0(G_OBJECT_TYPE_NAME(G_OBJECT(element)), "GstQueue2"))
         g_object_set(G_OBJECT(element), "high-watermark", 0.10, nullptr);
 }
+#endif
 
 void MediaPlayerPrivateGStreamer::configureElementPlatformQuirks(GstElement* element)
 {
@@ -3149,8 +3184,10 @@ void MediaPlayerPrivateGStreamer::create
     // WEBKIT_GST_USE_PLAYBIN3 environment variable.
     const char* usePlaybin3 = g_getenv("WEBKIT_GST_USE_PLAYBIN3");
     bool isMediaStream = url.protocolIs("mediastream"_s);
+#if GST_CHECK_VERSION(1, 10, 0)
     if (isMediaSource() || isMediaStream || (usePlaybin3 && !strcmp(usePlaybin3, "1")))
         playbinName = "playbin3";
+#endif
 
     ASSERT(!m_pipeline);
 
@@ -3211,20 +3248,50 @@ void MediaPlayerPrivateGStreamer::create
     // initilization segment is parsed and "updateend" is fired. We need therefore to handle these
     // synchronously in the same main thread tick to make the tracks information available to JS no
     // later than "updateend".
+#if GST_CHECK_VERSION(1, 10, 0)
     g_signal_connect_swapped(bus.get(), "sync-message::stream-collection", G_CALLBACK(+[](MediaPlayerPrivateGStreamer* player, GstMessage* message) {
         player->handleStreamCollectionMessage(message);
     }), this);
+#endif
 
     g_object_set(m_pipeline.get(), "mute", static_cast<gboolean>(player->muted()), nullptr);
 
     // From GStreamer 1.22.0, uridecodebin3 is created in playbin3's _init(), so "element-setup" isn't called with it.
+#if GST_CHECK_VERSION(1, 10, 0)
     if (!m_isLegacyPlaybin && webkitGstCheckVersion(1, 22, 0)) {
         if (auto uriDecodeBin3 = adoptGRef(gst_bin_get_by_name(GST_BIN_CAST(m_pipeline.get()), "uridecodebin3")))
             configureElement(uriDecodeBin3.get());
     }
+#endif
+
+    g_signal_connect(GST_BIN_CAST(m_pipeline.get()), "deep-element-added", G_CALLBACK(+[](GstBin*, GstBin* subBin, GstElement* element, MediaPlayerPrivateGStreamer* player) {
+        GUniquePtr<char> binName(gst_element_get_name(GST_ELEMENT_CAST(subBin)));
+        GUniquePtr<char> elementName(gst_element_get_name(element));
 
-    g_signal_connect(GST_BIN_CAST(m_pipeline.get()), "element-setup", G_CALLBACK(+[](GstBin*, GstElement* element, MediaPlayerPrivateGStreamer* player) {
-        player->configureElement(element);
+        if (g_str_has_prefix(elementName.get(), "downloadbuffer")) {
+            player->configureDownloadBuffer(element);
+            return;
+        }
+
+        if (g_str_has_prefix(elementName.get(), "uridecodebin")) {
+            // This will set the multiqueue size to the default value.
+            g_object_set(element, "buffer-size", 2 * MB, nullptr);
+            return;
+        }
+
+        if (!g_str_has_prefix(binName.get(), "decodebin"))
+            return;
+
+        if (g_str_has_prefix(elementName.get(), "v4l2"))
+            player->m_videoDecoderPlatform = GstVideoDecoderPlatform::Video4Linux;
+        else if (g_str_has_prefix(elementName.get(), "imxvpudec"))
+            player->m_videoDecoderPlatform = GstVideoDecoderPlatform::ImxVPU;
+        else if (g_str_has_prefix(elementName.get(), "omx"))
+            player->m_videoDecoderPlatform = GstVideoDecoderPlatform::OpenMAX;
+
+#if USE(TEXTURE_MAPPER_GL)
+        player->updateTextureMapperFlags();
+#endif
     }), this);
 
     g_signal_connect_swapped(m_pipeline.get(), "source-setup", G_CALLBACK(sourceSetupCallback), this);
@@ -3299,6 +3366,7 @@ void MediaPlayerPrivateGStreamer::config
     setupCodecProbe(decoder);
 }
 
+#if 0
 void MediaPlayerPrivateGStreamer::configureVideoDecoder(GstElement* decoder)
 {
     GUniquePtr<char> name(gst_element_get_name(decoder));
@@ -3363,6 +3431,7 @@ void MediaPlayerPrivateGStreamer::config
         return GST_PAD_PROBE_OK;
     }, this, nullptr);
 }
+#endif
 
 bool MediaPlayerPrivateGStreamer::didPassCORSAccessCheck() const
 {
@@ -3462,8 +3531,6 @@ void MediaPlayerPrivateGStreamer::pushTe
     if (!GST_IS_SAMPLE(m_sample.get()))
         return;
 
-    ++m_sampleCount;
-
     auto internalCompositingOperation = [this](TextureMapperPlatformLayerProxyGL& proxy, std::unique_ptr<GstVideoFrameHolder>&& frameHolder) {
         std::unique_ptr<TextureMapperPlatformLayerBuffer> layerBuffer;
         if (frameHolder->hasMappedTextures()) {
@@ -3564,8 +3631,6 @@ void MediaPlayerPrivateGStreamer::pushDM
     if (GST_VIDEO_INFO_HAS_ALPHA(&videoInfo))
         textureMapperFlags.add({ TextureMapperFlags::ShouldBlend, TextureMapperFlags::ShouldPremultiply });
 
-    ++m_sampleCount;
-
     auto& proxy = m_nicosiaLayer->proxy();
     ASSERT(is<TextureMapperPlatformLayerProxyDMABuf>(proxy));
 
@@ -3580,8 +3645,12 @@ void MediaPlayerPrivateGStreamer::pushDM
     // the memory:DMABuf feature on the GstCaps object. All sensible decoders yielding DMABufs specify this.
     // For all other decoders, another option is peeking the zero-index GstMemory and testing whether it's
     // a DMABuf memory, i.e. allocated by a DMABuf-capable allocator. If it is, we can proceed the same way.
+#if GST_CHECK_VERSION(1, 10, 0)
     bool isDMABufMemory = gst_caps_features_contains(gst_caps_get_features(caps, 0), GST_CAPS_FEATURE_MEMORY_DMABUF)
         || gst_is_dmabuf_memory(gst_buffer_peek_memory(buffer, 0));
+#else
+    bool isDMABufMemory = false;
+#endif
     if (isDMABufMemory) {
         // In case of a hardware decoder that's yielding dmabuf memory, we can take the relevant data and
         // push it into the composition process.
@@ -4009,7 +4078,7 @@ void MediaPlayerPrivateGStreamer::flushC
 {
     Locker sampleLocker { m_sampleMutex };
 
-    if (m_sample && gst_sample_get_buffer(m_sample.get())) {
+    if (m_sample) {
         // Allocate a new copy of the sample which has to be released. The copy is necessary so that
         // the video dimensions can still be fetched and also for canvas rendering. The release is
         // necessary because the sample might have been allocated by a hardware decoder and memory
@@ -4266,9 +4335,11 @@ GstElement* MediaPlayerPrivateGStreamer:
     else
         sink = GStreamerQuirksManager::singleton().createHolePunchVideoSink(m_isLegacyPlaybin, player.get());
 
+#if GST_CHECK_VERSION(1, 10, 0)
     // Configure sink before it allocates resources.
     if (sink)
         configureElement(sink);
+#endif
     return sink;
 }
 
@@ -4649,6 +4720,7 @@ WTFLogChannel& MediaPlayerPrivateGStream
 }
 #endif
 
+#if 0
 std::optional<VideoFrameMetadata> MediaPlayerPrivateGStreamer::videoFrameMetadata()
 {
     if (m_sampleCount == m_lastVideoFrameMetadataSampleCount)
@@ -4673,6 +4745,7 @@ std::optional<VideoFrameMetadata> MediaP
 
     return metadata;
 }
+#endif
 
 static bool areAllSinksPlayingForBin(GstBin* bin)
 {
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h	2024-11-07 13:00:38.572025153 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h	2024-11-07 14:15:27.584991089 -0600
@@ -265,8 +265,12 @@ protected:
         AudioChanged = 1 << 2,
         VolumeChanged = 1 << 3,
         MuteChanged = 1 << 4,
+#if GST_CHECK_VERSION (1, 10, 0)
         TextChanged = 1 << 5,
         StreamCollectionChanged = 1 << 7
+#else
+        TextChanged = 1 << 5
+#endif
     };
 
     enum class PlaybackRatePausedState {
@@ -534,7 +538,6 @@ private:
     static void downloadBufferFileCreatedCallback(MediaPlayerPrivateGStreamer*);
 
     void configureAudioDecoder(GstElement*);
-    void configureVideoDecoder(GstElement*);
     void configureElement(GstElement*);
 
     void configureElementPlatformQuirks(GstElement*);
@@ -543,7 +546,9 @@ private:
 
     void setPlaybinURL(const URL& urlString);
 
+#if GST_CHECK_VERSION(1, 10, 0)
     void updateTracks(const GRefPtr<GstObject>& collectionOwner);
+#endif
     void videoSinkCapsChanged(GstPad*);
     void updateVideoSizeAndOrientationFromCaps(const GstCaps*);
     bool hasFirstVideoSampleReachedSink() const;
@@ -637,6 +642,8 @@ private:
     uint64_t m_networkReadPosition { 0 };
     mutable uint64_t m_readPositionAtLastDidLoadingProgress { 0 };
 
+    std::optional<bool> m_hasTaintedOrigin { std::nullopt };
+
     GRefPtr<GstElement> m_fpsSink { nullptr };
     uint64_t m_totalVideoFrames { 0 };
     uint64_t m_droppedVideoFrames { 0 };
@@ -645,9 +652,6 @@ private:
     DataMutex<TaskAtMediaTimeScheduler> m_TaskAtMediaTimeSchedulerDataMutex;
 
 private:
-    std::optional<VideoFrameMetadata> videoFrameMetadata() final;
-    uint64_t m_sampleCount { 0 };
-    uint64_t m_lastVideoFrameMetadataSampleCount { 0 };
     mutable PlatformTimeRanges m_buffered;
 #if !RELEASE_LOG_DISABLED
     Ref<const Logger> m_logger;
@@ -661,7 +665,9 @@ private:
     RefPtr<GBMBufferSwapchain> m_swapchain;
 #endif
 
+#if GST_CHECK_VERSION (1, 10, 0)
     GRefPtr<GstStreamCollection> m_streamCollection;
+#endif
 
     AbortableTaskQueue m_sinkTaskQueue;
 
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp	2024-08-19 01:28:39.403271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp	2024-11-07 14:07:45.164429988 -0600
@@ -45,11 +45,12 @@ static void ensureDebugCategoryInitializ
     });
 }
 
+#if ENABLE(VIDEO) && USE(GSTREAMER_GL)
 GstGLDisplay* PlatformDisplay::gstGLDisplay() const
 {
     ensureDebugCategoryInitialized();
     if (!m_gstGLDisplay)
-        m_gstGLDisplay = adoptGRef(GST_GL_DISPLAY(gst_gl_display_egl_new_with_egl_display(eglDisplay())));
+        m_gstGLDisplay = GST_GL_DISPLAY(gst_gl_display_egl_new_with_egl_display(eglDisplay()));
     GST_TRACE("Using GL display %" GST_PTR_FORMAT, m_gstGLDisplay.get());
     return m_gstGLDisplay.get();
 }
@@ -73,7 +74,7 @@ GstGLContext* PlatformDisplay::gstGLCont
         return nullptr;
     }
 
-    m_gstGLContext = adoptGRef(gst_gl_context_new_wrapped(gstDisplay, reinterpret_cast<guintptr>(context->platformContext()), GST_GL_PLATFORM_EGL, GST_GL_API_GLES2));
+    m_gstGLContext = gst_gl_context_new_wrapped(gstDisplay, reinterpret_cast<guintptr>(context->platformContext()), GST_GL_PLATFORM_EGL, GST_GL_API_GLES2);
     {
         GLContext::ScopedGLContextCurrent scopedCurrent(*context);
         if (gst_gl_context_activate(m_gstGLContext.get(), TRUE)) {
@@ -86,6 +87,7 @@ GstGLContext* PlatformDisplay::gstGLCont
     GST_DEBUG("Created GL context %" GST_PTR_FORMAT, m_gstGLContext.get());
     return m_gstGLContext.get();
 }
+#endif
 
 void PlatformDisplay::clearGStreamerGLState()
 {
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp	2024-08-19 01:28:39.403271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp	2024-11-07 14:07:45.164429988 -0600
@@ -101,6 +101,7 @@ TrackPrivateBaseGStreamer::TrackPrivateB
     tagsChanged();
 }
 
+#if GST_CHECK_VERSION(1, 10, 0)
 TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer(TrackType type, TrackPrivateBase* owner, unsigned index, GstStream* stream)
     : m_notifier(MainThreadNotifier<MainThreadNotification>::create())
     , m_index(index)
@@ -119,6 +120,7 @@ TrackPrivateBaseGStreamer::TrackPrivateB
     // We can't call notifyTrackOfTagsChanged() directly, because we need tagsChanged() to setup m_tags.
     tagsChanged();
 }
+#endif
 
 void TrackPrivateBaseGStreamer::setPad(GRefPtr<GstPad>&& pad)
 {
@@ -172,8 +174,10 @@ TrackPrivateBaseGStreamer::~TrackPrivate
 
 GstObject* TrackPrivateBaseGStreamer::objectForLogging() const
 {
+#if GST_CHECK_VERSION(1, 10, 0)
     if (m_stream)
         return GST_OBJECT_CAST(m_stream.get());
+#endif
 
     ASSERT(m_pad);
     return GST_OBJECT_CAST(m_pad.get());
@@ -181,8 +185,10 @@ GstObject* TrackPrivateBaseGStreamer::ob
 
 void TrackPrivateBaseGStreamer::disconnect()
 {
+#if GST_CHECK_VERSION(1, 10, 0)
     if (m_stream)
         g_signal_handlers_disconnect_matched(m_stream.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
+#endif
 
     m_tags.clear();
 
@@ -219,8 +225,11 @@ void TrackPrivateBaseGStreamer::tagsChan
             }
             i++;
         } while (tagEvent);
-    } else if (m_stream)
+    }
+#if GST_CHECK_VERSION(1, 10, 0)
+  else if (m_stream)
         tags = adoptGRef(gst_stream_get_tags(m_stream.get()));
+#endif
 
     if (!tags)
         tags = adoptGRef(gst_tag_list_new_empty());
@@ -336,6 +345,7 @@ void TrackPrivateBaseGStreamer::installU
                 track->updateConfigurationFromTags(getAllTags(track->m_pad));
             });
         }), this);
+#if GST_CHECK_VERSION(1, 10, 0)
     } else if (m_stream) {
         g_signal_connect_swapped(m_stream.get(), "notify::caps", G_CALLBACK(+[](TrackPrivateBaseGStreamer* track) {
             track->m_taskQueue.enqueueTask([track]() {
@@ -350,6 +360,7 @@ void TrackPrivateBaseGStreamer::installU
                 track->updateConfigurationFromTags(WTFMove(tags));
             });
         }), this);
+#endif
     }
 }
 
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h	2024-08-19 01:28:39.403271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h	2024-11-07 14:07:45.164429988 -0600
@@ -60,7 +60,9 @@ public:
     unsigned index() { return m_index; };
     void setIndex(unsigned index) { m_index =  index; }
 
+#if GST_CHECK_VERSION(1, 10, 0)
     GstStream* stream() const { return m_stream.get(); }
+#endif
 
     // Used for MSE, where the initial caps of the pad are relevant for initializing the matching pad in the
     // playback pipeline.
@@ -74,7 +76,9 @@ public:
 
 protected:
     TrackPrivateBaseGStreamer(TrackType, TrackPrivateBase*, unsigned index, GRefPtr<GstPad>&&, bool shouldHandleStreamStartEvent);
+#if GST_CHECK_VERSION(1, 10, 0)
     TrackPrivateBaseGStreamer(TrackType, TrackPrivateBase*, unsigned index, GstStream*);
+#endif
 
     void notifyTrackOfTagsChanged();
     void notifyTrackOfStreamChanged();
@@ -102,7 +106,9 @@ protected:
     TrackID m_id;
     GRefPtr<GstPad> m_pad;
     GRefPtr<GstPad> m_bestUpstreamPad;
+#if GST_CHECK_VERSION(1, 10, 0)
     GRefPtr<GstStream> m_stream;
+#endif
     unsigned long m_eventProbe { 0 };
     GRefPtr<GstCaps> m_initialCaps;
     AbortableTaskQueue m_taskQueue;
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp	2024-08-19 01:28:39.407271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp	2024-11-07 14:07:45.167763373 -0600
@@ -383,14 +383,11 @@ VideoFrameGStreamer::VideoFrameGStreamer
     ensureVideoFrameDebugCategoryInitialized();
     ASSERT(m_sample);
 
-    if (!metadata)
-        return;
-
     GstBuffer* buffer = gst_sample_get_buffer(m_sample.get());
     RELEASE_ASSERT(buffer);
-    buffer = webkitGstBufferSetVideoFrameTimeMetadata(buffer, WTFMove(metadata));
-    m_sample = adoptGRef(gst_sample_make_writable(m_sample.leakRef()));
-    gst_sample_set_buffer(m_sample.get(), buffer);
+ 
+    if (metadata)
+        buffer = webkitGstBufferSetVideoFrameTimeMetadata(buffer, WTFMove(metadata));
 }
 
 VideoFrameGStreamer::VideoFrameGStreamer(const GRefPtr<GstSample>& sample, const FloatSize& presentationSize, const MediaTime& presentationTime, Rotation videoRotation, PlatformVideoColorSpace&& colorSpace)
@@ -403,6 +400,7 @@ VideoFrameGStreamer::VideoFrameGStreamer
 
 void VideoFrameGStreamer::setFrameRate(double frameRate)
 {
+#if GST_CHECK_VERSION(1, 16, 0)
     auto caps = adoptGRef(gst_caps_copy(gst_sample_get_caps(m_sample.get())));
     int frameRateNumerator, frameRateDenominator;
     gst_util_double_to_fraction(frameRate, &frameRateNumerator, &frameRateDenominator);
@@ -413,16 +411,19 @@ void VideoFrameGStreamer::setFrameRate(d
 
     m_sample = adoptGRef(gst_sample_make_writable(m_sample.leakRef()));
     gst_sample_set_caps(m_sample.get(), caps.get());
+#endif
 }
 
 void VideoFrameGStreamer::setMaxFrameRate(double maxFrameRate)
 {
+#if GST_CHECK_VERSION(1, 16, 0)
     auto caps = adoptGRef(gst_caps_copy(gst_sample_get_caps(m_sample.get())));
     int frameRateNumerator, frameRateDenominator;
     gst_util_double_to_fraction(maxFrameRate, &frameRateNumerator, &frameRateDenominator);
     gst_caps_set_simple(caps.get(), "framerate", GST_TYPE_FRACTION, 0, 1, "max-framerate", GST_TYPE_FRACTION, frameRateNumerator, frameRateDenominator, nullptr);
     m_sample = adoptGRef(gst_sample_make_writable(m_sample.leakRef()));
     gst_sample_set_caps(m_sample.get(), caps.get());
+#endif
 }
 
 void VideoFrameGStreamer::setPresentationTime(const MediaTime& presentationTime)
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp	2024-08-19 01:28:39.407271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp	2024-11-07 14:07:45.167763373 -0600
@@ -57,6 +57,7 @@ VideoTrackPrivateGStreamer::VideoTrackPr
     installUpdateConfigurationHandlers();
 }
 
+#if GST_CHECK_VERSION(1, 10, 0)
 VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer(ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer>&& player, unsigned index, GstStream* stream)
     : TrackPrivateBaseGStreamer(TrackPrivateBaseGStreamer::TrackType::Video, this, index, stream)
     , m_player(WTFMove(player))
@@ -164,11 +165,14 @@ void VideoTrackPrivateGStreamer::updateC
         configuration.colorSpace = videoColorSpaceFromInfo(info);
     }
 }
+#endif
 
 VideoTrackPrivate::Kind VideoTrackPrivateGStreamer::kind() const
 {
+#if GST_CHECK_VERSION(1, 10, 0)
     if (m_stream && gst_stream_get_stream_flags(m_stream.get()) & GST_STREAM_FLAG_SELECT)
         return VideoTrackPrivate::Kind::Main;
+#endif
 
     return VideoTrackPrivate::kind();
 }
@@ -177,8 +181,10 @@ void VideoTrackPrivateGStreamer::disconn
 {
     m_taskQueue.startAborting();
 
+#if GST_CHECK_VERSION(1, 10, 0)
     if (m_stream)
         g_signal_handlers_disconnect_matched(m_stream.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
+#endif
 
     m_player = nullptr;
     TrackPrivateBaseGStreamer::disconnect();
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h	2024-08-19 01:28:39.407271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h	2024-11-07 14:07:45.167763373 -0600
@@ -43,10 +43,12 @@ public:
         return adoptRef(*new VideoTrackPrivateGStreamer(WTFMove(player), index, WTFMove(pad), shouldHandleStreamStartEvent));
     }
 
+#if GST_CHECK_VERSION(1, 10, 0)
     static Ref<VideoTrackPrivateGStreamer> create(ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer>&& player, unsigned index, GstStream* stream)
     {
         return adoptRef(*new VideoTrackPrivateGStreamer(WTFMove(player), index, stream));
     }
+#endif
 
     Kind kind() const final;
 
@@ -62,17 +64,23 @@ public:
     AtomString label() const final { return m_label; }
     AtomString language() const final { return m_language; }
 
+#if GST_CHECK_VERSION(1, 10, 0)
     void updateConfigurationFromCaps(GRefPtr<GstCaps>&&) final;
+#endif
 
 protected:
+#if GST_CHECK_VERSION(1, 10, 0)
     void updateConfigurationFromTags(GRefPtr<GstTagList>&&) final;
 
     void tagsChanged(GRefPtr<GstTagList>&& tags) final { updateConfigurationFromTags(WTFMove(tags)); }
     void capsChanged(const String&, GRefPtr<GstCaps>&&) final;
+#endif
 
 private:
     VideoTrackPrivateGStreamer(ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer>&&, unsigned index, GRefPtr<GstPad>&&, bool shouldHandleStreamStartEvent);
+#if GST_CHECK_VERSION(1, 10, 0)
     VideoTrackPrivateGStreamer(ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer>&&, unsigned index, GstStream*);
+#endif
 
     ThreadSafeWeakPtr<MediaPlayerPrivateGStreamer> m_player;
 };
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/WebKitAudioSinkGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/WebKitAudioSinkGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/WebKitAudioSinkGStreamer.cpp	2024-08-19 01:28:39.407271400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/WebKitAudioSinkGStreamer.cpp	2024-11-07 14:07:45.167763373 -0600
@@ -114,7 +114,9 @@ static GstStateChangeReturn webKitAudioS
     auto* sink = WEBKIT_AUDIO_SINK(element);
     auto* priv = sink->priv;
 
+#if GST_CHECK_VERSION(1, 14, 0)
     GST_DEBUG_OBJECT(sink, "Handling %s transition", gst_state_change_get_name(stateChange));
+#endif
 
     auto& mixer = GStreamerAudioMixer::singleton();
     if (priv->interAudioSink && stateChange == GST_STATE_CHANGE_NULL_TO_READY)
@@ -138,7 +140,6 @@ static void webKitAudioSinkConstructed(G
     GST_CALL_PARENT(G_OBJECT_CLASS, constructed, (object));
 
     GST_OBJECT_FLAG_SET(GST_OBJECT_CAST(object), GST_ELEMENT_FLAG_SINK);
-    gst_bin_set_suppressed_flags(GST_BIN_CAST(object), static_cast<GstElementFlags>(GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK));
 }
 
 static void webkit_audio_sink_class_init(WebKitAudioSinkClass* klass)
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp	2024-09-30 03:15:01.128258500 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp	2024-11-07 14:07:45.167763373 -0600
@@ -466,7 +466,12 @@ static GstFlowReturn webKitWebSrcCreate(
     //    "source-setup" event. This doesn't work for additional WebKitWebSrc elements created by adaptivedemux.
     //
     // 2) A GstContext query made here.
-    if (!members->loader) {
+    // 2) A GstContext query made here. Because of a bug, this only works in GStreamer >= 1.12.
+    //
+    // As a compatibility workaround, the http: URI protocol is only registered for gst>=1.12; otherwise using
+    // webkit+http:, which is used by MediaPlayerPrivateGStreamer but not by adaptivedemux's additional source
+    // elements, therefore using souphttpsrc instead and not routing traffic through the NetworkProcess.
+    if (webkitGstCheckVersion(1, 12, 0) && !members->loader) {
         members.runUnlocked([src, baseSrc]() {
             GRefPtr<GstQuery> query = adoptGRef(gst_query_new_context(WEBKIT_WEB_SRC_RESOURCE_LOADER_CONTEXT_TYPE_NAME));
             if (gst_pad_peer_query(GST_BASE_SRC_PAD(baseSrc), query.get())) {
@@ -887,16 +892,27 @@ static GstURIType webKitWebSrcUriGetType
 const gchar* const* webKitWebSrcGetProtocols(GType)
 {
     static const char* protocols[4];
-    protocols[0] = "http";
-    protocols[1] = "https";
-    protocols[2] = "blob";
+    if (webkitGstCheckVersion(1, 12, 0)) {
+        protocols[0] = "http";
+        protocols[1] = "https";
+        protocols[2] = "blob";
+    } else {
+        protocols[0] = "webkit+http";
+        protocols[1] = "webkit+https";
+        protocols[2] = "webkit+blob";
+    }
     protocols[3] = nullptr;
     return protocols;
 }
 
 static URL convertPlaybinURI(const char* uriString)
 {
-    return URL { String::fromLatin1(uriString) };
+    URL url { String::fromLatin1(uriString) };
+    if (!webkitGstCheckVersion(1, 12, 0)) {
+        ASSERT(url.protocol().substring(0, 7) == "webkit+");
+        url.setProtocol(url.protocol().substring(7).toString());
+    }
+     return url;
 }
 
 static gchar* webKitWebSrcGetUri(GstURIHandler* handler)
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/ImageDecoder.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/ImageDecoder.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/graphics/ImageDecoder.cpp	2024-08-19 01:28:39.347273000 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/graphics/ImageDecoder.cpp	2024-11-07 14:07:45.167763373 -0600
@@ -38,10 +38,6 @@
 #include "ImageDecoderAVFObjC.h"
 #endif
 
-#if USE(GSTREAMER) && ENABLE(VIDEO)
-#include "ImageDecoderGStreamer.h"
-#endif
-
 namespace WebCore {
 
 #if ENABLE(GPU_PROCESS) && HAVE(AVASSETREADER)
@@ -103,11 +99,6 @@ RefPtr<ImageDecoder> ImageDecoder::creat
     }
 #endif
 
-#if USE(GSTREAMER) && ENABLE(VIDEO)
-    if (ImageDecoderGStreamer::canDecodeType(mimeType))
-        return ImageDecoderGStreamer::create(data, mimeType, alphaOption, gammaAndColorProfileOption);
-#endif
-
 #if USE(CG)
     // ScalableImageDecoder is used on CG ports for some specific image formats which the platform doesn't support directly.
     if (auto imageDecoder = ScalableImageDecoder::create(data, alphaOption, gammaAndColorProfileOption))
@@ -144,11 +135,6 @@ bool ImageDecoder::supportsMediaType(Med
 #endif
 #endif
 
-#if USE(GSTREAMER) && ENABLE(VIDEO)
-    if (ImageDecoderGStreamer::supportsMediaType(type))
-        return true;
-#endif
-
     return false;
 }
 
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/gstreamer/GStreamerCodecUtilities.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/gstreamer/GStreamerCodecUtilities.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/gstreamer/GStreamerCodecUtilities.cpp	2024-11-07 13:00:38.572025153 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/gstreamer/GStreamerCodecUtilities.cpp	2024-11-07 14:07:45.167763373 -0600
@@ -240,13 +240,13 @@ static std::pair<GRefPtr<GstCaps>, GRefP
     else if (primaries == VPConfigurationColorPrimaries::BT_2020_Nonconstant_Luminance)
         GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_BT2020;
     else if (primaries == VPConfigurationColorPrimaries::SMPTE_ST_428_1)
-        GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTEST428;
+        GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
     else if (primaries == VPConfigurationColorPrimaries::SMPTE_RP_431_2)
-        GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTERP431;
+        GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
     else if (primaries == VPConfigurationColorPrimaries::SMPTE_EG_432_1)
-        GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432;
+        GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
     else if (primaries == VPConfigurationColorPrimaries::EBU_Tech_3213_E)
-        GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_EBU3213;
+        GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
     else if (primaries == VPConfigurationColorPrimaries::Unspecified)
         GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
 
@@ -411,6 +411,7 @@ static std::pair<GRefPtr<GstCaps>, GRefP
     case AV1ConfigurationColorPrimaries::BT_2020_Nonconstant_Luminance:
         GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_BT2020;
         break;
+#if GST_CHECK_VERSION(1, 18, 0)
     case AV1ConfigurationColorPrimaries::SMPTE_ST_428_1:
         GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTEST428;
         break;
@@ -423,6 +424,7 @@ static std::pair<GRefPtr<GstCaps>, GRefP
     case AV1ConfigurationColorPrimaries::EBU_Tech_3213_E:
         GST_VIDEO_INFO_COLORIMETRY(&info).primaries = GST_VIDEO_COLOR_PRIMARIES_EBU3213;
         break;
+#endif
     };
 
     switch (static_cast<AV1ConfigurationTransferCharacteristics>(configurationRecord->transferCharacteristics)) {
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/gstreamer/GStreamerElementHarness.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/gstreamer/GStreamerElementHarness.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/gstreamer/GStreamerElementHarness.cpp	2024-09-30 03:15:01.132258400 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/gstreamer/GStreamerElementHarness.cpp	2024-11-07 14:07:45.167763373 -0600
@@ -370,10 +370,12 @@ const GRefPtr<GstCaps>& GStreamerElement
     if (m_outputCaps)
         return m_outputCaps;
 
+#if GST_CHECK_VERSION (1, 16, 0)
     auto stream = adoptGRef(gst_pad_get_stream(m_pad.get()));
     if (stream)
         m_outputCaps = adoptGRef(gst_stream_get_caps(stream.get()));
     else
+#endif
         m_outputCaps = adoptGRef(gst_pad_get_current_caps(m_pad.get()));
     GST_DEBUG_OBJECT(m_pad.get(), "Output caps: %" GST_PTR_FORMAT, m_outputCaps.get());
     return m_outputCaps;
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.cpp	2024-11-07 13:00:38.572025153 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.cpp	2024-11-07 14:07:45.167763373 -0600
@@ -162,12 +162,16 @@ public:
         }
 
         auto caps = adoptGRef(gst_caps_from_string(capsString));
+#if GST_CHECK_VERSION(1, 10, 0)
         GST_MINI_OBJECT_FLAG_SET(caps.get(), GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
+#endif
 
         GRefPtr<GstCaps> encodedFormat;
         if (encodedFormatString) {
             encodedFormat = adoptGRef(gst_caps_from_string(encodedFormatString));
+#if GST_CHECK_VERSION(1, 10, 0)
             GST_MINI_OBJECT_FLAG_SET(encodedFormat.get(), GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
+#endif
         }
 
         singleton().emplace(std::make_pair(id, EncoderDefinition {
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.h webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.h
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.h	2024-10-21 04:00:02.711246500 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.h	2024-11-07 14:16:46.929564861 -0600
@@ -24,6 +24,16 @@
 #include "VideoEncoderScalabilityMode.h"
 #include <wtf/FastMalloc.h>
 
+#if !ENABLE(WEB_CODECS)
+namespace WebCore {
+
+class VideoEncoder {
+public:
+    using ScalabilityMode = VideoEncoderScalabilityMode;
+};
+};
+#endif
+
 #define WEBKIT_TYPE_VIDEO_ENCODER (webkit_video_encoder_get_type())
 #define WEBKIT_VIDEO_ENCODER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_VIDEO_ENCODER, WebKitVideoEncoder))
 #define WEBKIT_VIDEO_ENCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_VIDEO_ENCODER, WebKitVideoEncoderClass))
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/MIMETypeRegistry.cpp webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/MIMETypeRegistry.cpp
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/MIMETypeRegistry.cpp	2024-08-19 01:28:39.279275200 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/MIMETypeRegistry.cpp	2024-11-07 14:07:45.171096759 -0600
@@ -60,10 +60,6 @@
 #include "PreviewConverter.h"
 #endif
 
-#if USE(GSTREAMER) && ENABLE(VIDEO)
-#include "ImageDecoderGStreamer.h"
-#endif
-
 namespace WebCore {
 
 static String normalizedImageMIMEType(const String&);
@@ -436,11 +432,6 @@ bool MIMETypeRegistry::isSupportedImageV
         return true;
 #endif
 
-#if USE(GSTREAMER) && ENABLE(VIDEO)
-    if (ImageDecoderGStreamer::supportsContainerType(mimeType))
-        return true;
-#endif
-
     return false;
 }
 
diff -urp webkitgtk-2.46.3.glib244/Source/WebCore/platform/SourcesGStreamer.txt webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/SourcesGStreamer.txt
--- webkitgtk-2.46.3.glib244/Source/WebCore/platform/SourcesGStreamer.txt	2024-09-30 03:15:01.124258300 -0500
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WebCore/platform/SourcesGStreamer.txt	2024-11-07 14:07:45.171096759 -0600
@@ -49,7 +49,6 @@ platform/audio/gstreamer/WebKitWebAudioS
 
 platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp
 platform/graphics/gstreamer/DMABufUtilities.cpp
-platform/graphics/gstreamer/DMABufVideoSinkGStreamer.cpp @no-unify
 platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp @no-unify
 platform/graphics/gstreamer/GRefPtrGStreamer.cpp
 platform/graphics/gstreamer/GStreamerAudioMixer.cpp
@@ -59,7 +58,6 @@ platform/graphics/gstreamer/GStreamerSin
 platform/graphics/gstreamer/GStreamerVideoFrameHolder.cpp @no-unify
 platform/graphics/gstreamer/GStreamerVideoSinkCommon.cpp
 platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp
-platform/graphics/gstreamer/ImageDecoderGStreamer.cpp
 platform/graphics/gstreamer/ImageGStreamerCairo.cpp
 platform/graphics/gstreamer/ImageGStreamerSkia.cpp
 platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp
@@ -76,7 +74,7 @@ platform/graphics/gstreamer/VideoEncoder
 platform/graphics/gstreamer/VideoFrameGStreamer.cpp
 platform/graphics/gstreamer/VideoFrameMetadataGStreamer.cpp
 platform/graphics/gstreamer/VideoSinkGStreamer.cpp @no-unify
-platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp
+platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp @no-unify
 platform/graphics/gstreamer/WebKitAudioSinkGStreamer.cpp @no-unify
 platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp @no-unify
 
diff -urp webkitgtk-2.46.3.glib244/Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml webkitgtk-2.46.3.gstreamer1.8/Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
--- webkitgtk-2.46.3.glib244/Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml	2024-11-07 13:01:11.212513827 -0600
+++ webkitgtk-2.46.3.gstreamer1.8/Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml	2024-11-07 14:07:45.171096759 -0600
@@ -7864,10 +7864,8 @@ WebCodecsAudioEnabled:
     WebKitLegacy:
       default: false
     WebKit:
-      "USE(GSTREAMER)": true
       default: false
     WebCore:
-      "USE(GSTREAMER)": true
       default: false
 
 WebCodecsHEVCEnabled:
