From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- dom/media/platforms/apple/AppleATDecoder.h | 80 ++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 dom/media/platforms/apple/AppleATDecoder.h (limited to 'dom/media/platforms/apple/AppleATDecoder.h') diff --git a/dom/media/platforms/apple/AppleATDecoder.h b/dom/media/platforms/apple/AppleATDecoder.h new file mode 100644 index 0000000000..d7aba2aacb --- /dev/null +++ b/dom/media/platforms/apple/AppleATDecoder.h @@ -0,0 +1,80 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_AppleATDecoder_h +#define mozilla_AppleATDecoder_h + +#include +#include "PlatformDecoderModule.h" +#include "mozilla/Vector.h" +#include "AudioConverter.h" + +namespace mozilla { + +class TaskQueue; + +DDLoggedTypeDeclNameAndBase(AppleATDecoder, MediaDataDecoder); + +class AppleATDecoder final : public MediaDataDecoder, + public DecoderDoctorLifeLogger { + public: + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(AppleATDecoder, final); + + explicit AppleATDecoder(const AudioInfo& aConfig); + + RefPtr Init() override; + RefPtr Decode(MediaRawData* aSample) override; + RefPtr Drain() override; + RefPtr Flush() override; + RefPtr Shutdown() override; + + nsCString GetDescriptionName() const override { + return "apple coremedia decoder"_ns; + } + + nsCString GetCodecName() const override; + + // Callbacks also need access to the config. + const AudioInfo mConfig; + + // Use to extract magic cookie for HE-AAC detection. + nsTArray mMagicCookie; + // Will be set to true should an error occurred while attempting to retrieve + // the magic cookie property. + bool mFileStreamError; + + nsCOMPtr mThread; + + private: + ~AppleATDecoder(); + + AudioConverterRef mConverter; + AudioStreamBasicDescription mOutputFormat; + UInt32 mFormatID; + AudioFileStreamID mStream; + nsTArray> mQueuedSamples; + UniquePtr mChannelLayout; + UniquePtr mAudioConverter; + DecodedData mDecodedSamples; + + void ProcessShutdown(); + MediaResult DecodeSample(MediaRawData* aSample); + MediaResult GetInputAudioDescription(AudioStreamBasicDescription& aDesc, + const nsTArray& aExtraData); + // Setup AudioConverter once all information required has been gathered. + // Will return NS_ERROR_NOT_INITIALIZED if more data is required. + MediaResult SetupDecoder(MediaRawData* aSample); + nsresult GetImplicitAACMagicCookie(const MediaRawData* aSample); + nsresult SetupChannelLayout(); + uint32_t mParsedFramesForAACMagicCookie; + uint32_t mEncoderDelay = 0; + uint64_t mTotalMediaFrames = 0; + bool mErrored; +}; + +} // namespace mozilla + +#endif // mozilla_AppleATDecoder_h -- cgit v1.2.3