summaryrefslogtreecommitdiffstats
path: root/dom/media/platforms/agnostic/eme
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/platforms/agnostic/eme')
-rw-r--r--dom/media/platforms/agnostic/eme/ChromiumCDMVideoDecoder.cpp39
-rw-r--r--dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp18
2 files changed, 46 insertions, 11 deletions
diff --git a/dom/media/platforms/agnostic/eme/ChromiumCDMVideoDecoder.cpp b/dom/media/platforms/agnostic/eme/ChromiumCDMVideoDecoder.cpp
index e71632e6d3..4c74fa8723 100644
--- a/dom/media/platforms/agnostic/eme/ChromiumCDMVideoDecoder.cpp
+++ b/dom/media/platforms/agnostic/eme/ChromiumCDMVideoDecoder.cpp
@@ -11,6 +11,9 @@
#include "GMPVideoDecoder.h"
#include "MP4Decoder.h"
#include "VPXDecoder.h"
+#ifdef MOZ_AV1
+# include "AOMDecoder.h"
+#endif
namespace mozilla {
@@ -45,6 +48,21 @@ static uint32_t ToCDMH264Profile(uint8_t aProfile) {
return cdm::VideoCodecProfile::kUnknownVideoCodecProfile;
}
+#ifdef MOZ_AV1
+static uint32_t ToCDMAV1Profile(uint8_t aProfile) {
+ switch (aProfile) {
+ case 0:
+ return cdm::VideoCodecProfile::kAv1ProfileMain;
+ case 1:
+ return cdm::VideoCodecProfile::kAv1ProfileHigh;
+ case 2:
+ return cdm::VideoCodecProfile::kAv1ProfilePro;
+ default:
+ return cdm::VideoCodecProfile::kUnknownVideoCodecProfile;
+ }
+}
+#endif
+
RefPtr<MediaDataDecoder::InitPromise> ChromiumCDMVideoDecoder::Init() {
if (!mCDMParent) {
// Must have failed to get the CDMParent from the ChromiumCDMProxy
@@ -60,6 +78,16 @@ RefPtr<MediaDataDecoder::InitPromise> ChromiumCDMVideoDecoder::Init() {
ToCDMH264Profile(mConfig.mExtraData->SafeElementAt(1, 0));
config.mExtraData() = mConfig.mExtraData->Clone();
mConvertToAnnexB = true;
+#ifdef MOZ_AV1
+ } else if (AOMDecoder::IsAV1(mConfig.mMimeType)) {
+ AOMDecoder::AV1SequenceInfo seqInfo;
+ MediaResult seqHdrResult;
+ AOMDecoder::TryReadAV1CBox(mConfig.mExtraData, seqInfo, seqHdrResult);
+ config.mCodec() = cdm::VideoCodec::kCodecAv1;
+ config.mProfile() = NS_SUCCEEDED(seqHdrResult.Code())
+ ? ToCDMAV1Profile(seqInfo.mProfile)
+ : cdm::VideoCodecProfile::kUnknownVideoCodecProfile;
+#endif
} else if (VPXDecoder::IsVP8(mConfig.mMimeType)) {
config.mCodec() = cdm::VideoCodec::kCodecVp8;
config.mProfile() = cdm::VideoCodecProfile::kProfileNotNeeded;
@@ -105,9 +133,16 @@ nsCString ChromiumCDMVideoDecoder::GetDescriptionName() const {
nsCString ChromiumCDMVideoDecoder::GetCodecName() const {
if (MP4Decoder::IsH264(mConfig.mMimeType)) {
return "h264"_ns;
- } else if (VPXDecoder::IsVP8(mConfig.mMimeType)) {
+ }
+#ifdef MOZ_AV1
+ if (AOMDecoder::IsAV1(mConfig.mMimeType)) {
+ return "av1"_ns;
+ }
+#endif
+ if (VPXDecoder::IsVP8(mConfig.mMimeType)) {
return "vp8"_ns;
- } else if (VPXDecoder::IsVP9(mConfig.mMimeType)) {
+ }
+ if (VPXDecoder::IsVP9(mConfig.mMimeType)) {
return "vp9"_ns;
}
return "unknown"_ns;
diff --git a/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp b/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp
index c143172073..a06dd30f89 100644
--- a/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp
+++ b/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp
@@ -28,7 +28,7 @@
namespace mozilla {
-typedef MozPromiseRequestHolder<DecryptPromise> DecryptPromiseRequestHolder;
+using DecryptPromiseRequestHolder = MozPromiseRequestHolder<DecryptPromise>;
DDLoggedTypeDeclNameAndBase(EMEDecryptor, MediaDataDecoder);
@@ -45,7 +45,7 @@ class ADTSSampleConverter {
// doesn't care what is set.
,
mProfile(aInfo.mProfile < 1 || aInfo.mProfile > 4 ? 2 : aInfo.mProfile),
- mFrequencyIndex(Adts::GetFrequencyIndex(aInfo.mRate)) {
+ mFrequencyIndex(ADTS::GetFrequencyIndex(aInfo.mRate).unwrapOr(255)) {
EME_LOG("ADTSSampleConvertor(): aInfo.mProfile=%" PRIi8
" aInfo.mExtendedProfile=%" PRIi8,
aInfo.mProfile, aInfo.mExtendedProfile);
@@ -56,17 +56,17 @@ class ADTSSampleConverter {
}
}
bool Convert(MediaRawData* aSample) const {
- return Adts::ConvertSample(mNumChannels, mFrequencyIndex, mProfile,
+ return ADTS::ConvertSample(mNumChannels, mFrequencyIndex, mProfile,
aSample);
}
bool Revert(MediaRawData* aSample) const {
- return Adts::RevertSample(aSample);
+ return ADTS::RevertSample(aSample);
}
private:
const uint32_t mNumChannels;
const uint8_t mProfile;
- const uint8_t mFrequencyIndex;
+ const uint8_t mFrequencyIndex{};
};
class EMEDecryptor final : public MediaDataDecoder,
@@ -124,7 +124,7 @@ class EMEDecryptor final : public MediaDataDecoder,
mThroughputLimiter->Throttle(aSample)
->Then(
mThread, __func__,
- [self](RefPtr<MediaRawData> aSample) {
+ [self](const RefPtr<MediaRawData>& aSample) {
self->mThrottleRequest.Complete();
self->AttemptDecode(aSample);
},
@@ -223,7 +223,7 @@ class EMEDecryptor final : public MediaDataDecoder,
mDecodePromise.RejectIfExists(NS_ERROR_DOM_MEDIA_CANCELED, __func__);
mThroughputLimiter->Flush();
for (auto iter = mDecrypts.Iter(); !iter.Done(); iter.Next()) {
- auto holder = iter.UserData();
+ auto* holder = iter.UserData();
holder->DisconnectIfExists();
iter.Remove();
}
@@ -240,7 +240,7 @@ class EMEDecryptor final : public MediaDataDecoder,
MOZ_ASSERT(mDecodePromise.IsEmpty() && !mDecodeRequest.Exists(),
"Must wait for decoding to complete");
for (auto iter = mDecrypts.Iter(); !iter.Done(); iter.Next()) {
- auto holder = iter.UserData();
+ auto* holder = iter.UserData();
holder->DisconnectIfExists();
iter.Remove();
}
@@ -323,7 +323,7 @@ RefPtr<MediaDataDecoder::DecodePromise> EMEMediaDataDecoderProxy::Decode(
mSamplesWaitingForKey->WaitIfKeyNotUsable(sample)
->Then(
mThread, __func__,
- [self, this](RefPtr<MediaRawData> aSample) {
+ [self, this](const RefPtr<MediaRawData>& aSample) {
mKeyRequest.Complete();
MediaDataDecoderProxy::Decode(aSample)