diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-15 03:34:42 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-15 03:34:42 +0000 |
commit | da4c7e7ed675c3bf405668739c3012d140856109 (patch) | |
tree | cdd868dba063fecba609a1d819de271f0d51b23e /dom/media/webcodecs/AudioDecoder.cpp | |
parent | Adding upstream version 125.0.3. (diff) | |
download | firefox-da4c7e7ed675c3bf405668739c3012d140856109.tar.xz firefox-da4c7e7ed675c3bf405668739c3012d140856109.zip |
Adding upstream version 126.0.upstream/126.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/webcodecs/AudioDecoder.cpp')
-rw-r--r-- | dom/media/webcodecs/AudioDecoder.cpp | 69 |
1 files changed, 28 insertions, 41 deletions
diff --git a/dom/media/webcodecs/AudioDecoder.cpp b/dom/media/webcodecs/AudioDecoder.cpp index 6b554dcacf..ef2acd4eae 100644 --- a/dom/media/webcodecs/AudioDecoder.cpp +++ b/dom/media/webcodecs/AudioDecoder.cpp @@ -68,11 +68,11 @@ NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper) AudioDecoderConfigInternal::AudioDecoderConfigInternal( const nsAString& aCodec, uint32_t aSampleRate, uint32_t aNumberOfChannels, - Maybe<RefPtr<MediaByteBuffer>>&& aDescription) + already_AddRefed<MediaByteBuffer> aDescription) : mCodec(aCodec), mSampleRate(aSampleRate), mNumberOfChannels(aNumberOfChannels), - mDescription(std::move(aDescription)) {} + mDescription(aDescription) {} /*static*/ UniquePtr<AudioDecoderConfigInternal> AudioDecoderConfigInternal::Create( @@ -83,7 +83,7 @@ UniquePtr<AudioDecoderConfigInternal> AudioDecoderConfigInternal::Create( return nullptr; } - Maybe<RefPtr<MediaByteBuffer>> description; + RefPtr<MediaByteBuffer> description; if (aConfig.mDescription.WasPassed()) { auto rv = GetExtraDataFromArrayBuffer(aConfig.mDescription.Value()); if (rv.isErr()) { // Invalid description data. @@ -95,12 +95,28 @@ UniquePtr<AudioDecoderConfigInternal> AudioDecoderConfigInternal::Create( error.get()); return nullptr; } - description.emplace(rv.unwrap()); + description = rv.unwrap(); } return UniquePtr<AudioDecoderConfigInternal>(new AudioDecoderConfigInternal( aConfig.mCodec, aConfig.mSampleRate, aConfig.mNumberOfChannels, - std::move(description))); + description.forget())); +} + +nsCString AudioDecoderConfigInternal::ToString() const { + nsCString rv; + + rv.AppendLiteral("AudioDecoderConfigInternal: "); + rv.AppendPrintf("%s %" PRIu32 "Hz %" PRIu32 " ch", + NS_ConvertUTF16toUTF8(mCodec).get(), mSampleRate, + mNumberOfChannels); + if (mDescription) { + rv.AppendPrintf("(%zu bytes of extradata)", mDescription->Length()); + } else { + rv.AppendLiteral("(no extradata)"); + } + + return rv; } /* @@ -118,24 +134,6 @@ struct AudioMIMECreateParam { // Map between WebCodecs pcm types as strings and codec numbers // All other codecs -nsCString ConvertCodecName(const nsCString& aContainer, - const nsCString& aCodec) { - if (!aContainer.EqualsLiteral("x-wav")) { - return aCodec; - } - if (aCodec.EqualsLiteral("ulaw")) { - return nsCString("7"); - } - if (aCodec.EqualsLiteral("alaw")) { - return nsCString("6"); - } - if (aCodec.Find("f32")) { - return nsCString("3"); - } - // Linear PCM - return nsCString("1"); -} - static nsTArray<nsCString> GuessMIMETypes(const AudioMIMECreateParam& aParam) { nsCString codec = NS_ConvertUTF16toUTF8(aParam.mParsedCodec); nsTArray<nsCString> types; @@ -147,16 +145,6 @@ static nsTArray<nsCString> GuessMIMETypes(const AudioMIMECreateParam& aParam) { return types; } -static bool IsSupportedAudioCodec(const nsAString& aCodec) { - LOG("IsSupportedAudioCodec: %s", NS_ConvertUTF16toUTF8(aCodec).get()); - return aCodec.EqualsLiteral("flac") || aCodec.EqualsLiteral("mp3") || - IsAACCodecString(aCodec) || aCodec.EqualsLiteral("opus") || - aCodec.EqualsLiteral("ulaw") || aCodec.EqualsLiteral("alaw") || - aCodec.EqualsLiteral("pcm-u8") || aCodec.EqualsLiteral("pcm-s16") || - aCodec.EqualsLiteral("pcm-s24") || aCodec.EqualsLiteral("pcm-s32") || - aCodec.EqualsLiteral("pcm-f32"); -} - // https://w3c.github.io/webcodecs/#check-configuration-support template <typename Config> static bool CanDecodeAudio(const Config& aConfig) { @@ -259,13 +247,12 @@ Result<UniquePtr<TrackInfo>, nsresult> AudioDecoderTraits::CreateTrackInfo( return Err(NS_ERROR_INVALID_ARG); } - if (aConfig.mDescription.isSome()) { - RefPtr<MediaByteBuffer> buf; - buf = aConfig.mDescription.value(); - if (buf) { - LOG("The given config has %zu bytes of description data", buf->Length()); - ai->mCodecSpecificConfig = - AudioCodecSpecificVariant{AudioCodecSpecificBinaryBlob{buf}}; + if (aConfig.mDescription) { + if (!aConfig.mDescription->IsEmpty()) { + LOG("The given config has %zu bytes of description data", + aConfig.mDescription->Length()); + ai->mCodecSpecificConfig = AudioCodecSpecificVariant{ + AudioCodecSpecificBinaryBlob{aConfig.mDescription}}; } } @@ -275,7 +262,7 @@ Result<UniquePtr<TrackInfo>, nsresult> AudioDecoderTraits::CreateTrackInfo( LOG("Created AudioInfo %s (%" PRIu32 "ch %" PRIu32 "Hz - with extra-data: %s)", NS_ConvertUTF16toUTF8(aConfig.mCodec).get(), ai->mChannels, ai->mChannels, - aConfig.mDescription.isSome() ? "yes" : "no"); + aConfig.mDescription && !aConfig.mDescription->IsEmpty() ? "yes" : "no"); return track; } |