diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:43:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:43:14 +0000 |
commit | 8dd16259287f58f9273002717ec4d27e97127719 (patch) | |
tree | 3863e62a53829a84037444beab3abd4ed9dfc7d0 /dom/media/platforms/android/AndroidDecoderModule.cpp | |
parent | Releasing progress-linux version 126.0.1-1~progress7.99u1. (diff) | |
download | firefox-8dd16259287f58f9273002717ec4d27e97127719.tar.xz firefox-8dd16259287f58f9273002717ec4d27e97127719.zip |
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/platforms/android/AndroidDecoderModule.cpp')
-rw-r--r-- | dom/media/platforms/android/AndroidDecoderModule.cpp | 68 |
1 files changed, 50 insertions, 18 deletions
diff --git a/dom/media/platforms/android/AndroidDecoderModule.cpp b/dom/media/platforms/android/AndroidDecoderModule.cpp index fff8669a74..21d0ede270 100644 --- a/dom/media/platforms/android/AndroidDecoderModule.cpp +++ b/dom/media/platforms/android/AndroidDecoderModule.cpp @@ -64,21 +64,28 @@ AndroidDecoderModule::AndroidDecoderModule(CDMProxy* aProxy) { mProxy = static_cast<MediaDrmCDMProxy*>(aProxy); } -StaticAutoPtr<nsTArray<nsCString>> AndroidDecoderModule::sSupportedSwMimeTypes; -StaticAutoPtr<nsTArray<nsCString>> AndroidDecoderModule::sSupportedHwMimeTypes; -StaticAutoPtr<MediaCodecsSupported> AndroidDecoderModule::sSupportedCodecs; +/* static */ bool AndroidDecoderModule::AreSupportedMimeTypesReady() { + StaticMutexAutoLock lock(sMutex); + return sSupportedSwMimeTypes && sSupportedHwMimeTypes; +} + +/* static */ bool AndroidDecoderModule::IsSupportedCodecsReady() { + StaticMutexAutoLock lock(sMutex); + return sSupportedCodecs; +} /* static */ media::MediaCodecsSupported AndroidDecoderModule::GetSupportedCodecs() { - if (!sSupportedSwMimeTypes || !sSupportedHwMimeTypes || !sSupportedCodecs) { + if (!AreSupportedMimeTypesReady() || !IsSupportedCodecsReady()) { SetSupportedMimeTypes(); } + StaticMutexAutoLock lock(sMutex); return *sSupportedCodecs; } DecodeSupportSet AndroidDecoderModule::SupportsMimeType( const nsACString& aMimeType) { - if (!sSupportedSwMimeTypes) { + if (!AreSupportedMimeTypesReady()) { SetSupportedMimeTypes(); } @@ -135,13 +142,16 @@ DecodeSupportSet AndroidDecoderModule::SupportsMimeType( // If a codec has no special handling or can't be determined from the // MIME type string, check if the MIME type string itself is supported. - if (sSupportedHwMimeTypes && - sSupportedHwMimeTypes->Contains(TranslateMimeType(aMimeType))) { - return DecodeSupport::HardwareDecode; - } - if (sSupportedSwMimeTypes && - sSupportedSwMimeTypes->Contains(TranslateMimeType(aMimeType))) { - return DecodeSupport::SoftwareDecode; + { + StaticMutexAutoLock lock(sMutex); + if (sSupportedHwMimeTypes && + sSupportedHwMimeTypes->Contains(TranslateMimeType(aMimeType))) { + return DecodeSupport::HardwareDecode; + } + if (sSupportedSwMimeTypes && + sSupportedSwMimeTypes->Contains(TranslateMimeType(aMimeType))) { + return DecodeSupport::SoftwareDecode; + } } return media::DecodeSupportSet{}; } @@ -179,24 +189,45 @@ void AndroidDecoderModule::SetSupportedMimeTypes() { // Inbound MIME types prefixed with SW/HW need to be processed void AndroidDecoderModule::SetSupportedMimeTypes( nsTArray<nsCString>&& aSupportedTypes) { + StaticMutexAutoLock lock(sMutex); // Return if support is already cached if (sSupportedSwMimeTypes && sSupportedHwMimeTypes && sSupportedCodecs) { return; } if (!sSupportedSwMimeTypes) { sSupportedSwMimeTypes = new nsTArray<nsCString>; - ClearOnShutdown(&sSupportedSwMimeTypes); + if (NS_IsMainThread()) { + ClearOnShutdown(&sSupportedSwMimeTypes); + } else { + Unused << NS_DispatchToMainThread(NS_NewRunnableFunction(__func__, []() { + StaticMutexAutoLock lock(sMutex); + ClearOnShutdown(&sSupportedSwMimeTypes); + })); + } } if (!sSupportedHwMimeTypes) { sSupportedHwMimeTypes = new nsTArray<nsCString>; - ClearOnShutdown(&sSupportedHwMimeTypes); + if (NS_IsMainThread()) { + ClearOnShutdown(&sSupportedHwMimeTypes); + } else { + Unused << NS_DispatchToMainThread(NS_NewRunnableFunction(__func__, []() { + StaticMutexAutoLock lock(sMutex); + ClearOnShutdown(&sSupportedHwMimeTypes); + })); + } } if (!sSupportedCodecs) { sSupportedCodecs = new MediaCodecsSupported(); - ClearOnShutdown(&sSupportedCodecs); + if (NS_IsMainThread()) { + ClearOnShutdown(&sSupportedCodecs); + } else { + Unused << NS_DispatchToMainThread(NS_NewRunnableFunction(__func__, []() { + StaticMutexAutoLock lock(sMutex); + ClearOnShutdown(&sSupportedCodecs); + })); + } } - DecodeSupportSet support; // Process each MIME type string for (const auto& s : aSupportedTypes) { // Verify MIME type string present @@ -212,12 +243,13 @@ void AndroidDecoderModule::SetSupportedMimeTypes( // Extract SW/HW support prefix const auto caps = Substring(s, 0, 2); + DecodeSupport support{}; if (caps == "SW"_ns) { sSupportedSwMimeTypes->AppendElement(mimeType); - support += DecodeSupport::SoftwareDecode; + support = DecodeSupport::SoftwareDecode; } else if (caps == "HW"_ns) { sSupportedHwMimeTypes->AppendElement(mimeType); - support += DecodeSupport::HardwareDecode; + support = DecodeSupport::HardwareDecode; } else { SLOG("Error parsing acceleration info from JNI codec string %s", s.Data()); |