From d8522c27441c0faf0f024c41adaddf59d4258da3 Mon Sep 17 00:00:00 2001 From: Andrzej Surdej Date: Tue, 5 May 2026 10:51:42 +0200 Subject: [PATCH] [GStreamer] Auto-detect USAC support via GStreamer registry Add a fallback check for USAC (xHE-AAC) codec support by probing the GStreamer registry for a decoder matching "audio/mpeg, mpegversion=(int)4, stream-format=(string)usac". The stream-format=usac caps field is not part of the standard GStreamer audio/mpeg caps definition, but some custom audio sinks advertise it, so it can be used as an indicator of USAC decoding capability. The WEBKIT_GST_CAN_PLAY_USAC environment variable still takes precedence as a manual override. --- .../platform/graphics/gstreamer/GStreamerRegistryScanner.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp index aa5ab6870b66..5f625abbbd96 100644 --- a/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp +++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp @@ -499,6 +499,10 @@ void GStreamerRegistryScanner::initializeDecoders(const GStreamerRegistryScanner // USAC AOT, is not yet widely available enough to be enabled by default. const char* value = g_getenv("WEBKIT_GST_CAN_PLAY_USAC"); bool canPlayUsac = value && (!g_strcmp0(value, "true") || !g_strcmp0(value, "1")); + if (!value) { + // Env is not set. Fall back to gst elements query + canPlayUsac = factories.hasElementForMediaType(ElementFactories::Type::AudioDecoder, "audio/mpeg, mpegversion=(int)4, stream-format=(string)usac"_s).isSupported; + } if (canPlayUsac) m_decoderCodecMap.add("mp4a.40.42"_s, result); // MPEG-4 Extended HE-AAC and xHE-AAC (USAC AOT) }