AudioTrimmer.h (2028B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim:set ts=2 sw=2 sts=2 et cindent: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #if !defined(AudioTrimmer_h_) 8 # define AudioTrimmer_h_ 9 10 # include "PlatformDecoderModule.h" 11 # include "mozilla/Mutex.h" 12 13 namespace mozilla { 14 15 DDLoggedTypeDeclNameAndBase(AudioTrimmer, MediaDataDecoder); 16 17 class AudioTrimmer final : public MediaDataDecoder { 18 public: 19 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(AudioTrimmer, final); 20 21 explicit AudioTrimmer(already_AddRefed<MediaDataDecoder> aDecoder) 22 : mDecoder(aDecoder) {} 23 24 RefPtr<InitPromise> Init() override; 25 RefPtr<DecodePromise> Decode(MediaRawData* aSample) override; 26 bool CanDecodeBatch() const override { return mDecoder->CanDecodeBatch(); } 27 RefPtr<DecodePromise> DecodeBatch( 28 nsTArray<RefPtr<MediaRawData>>&& aSamples) override; 29 RefPtr<DecodePromise> Drain() override; 30 RefPtr<FlushPromise> Flush() override; 31 RefPtr<ShutdownPromise> Shutdown() override; 32 nsCString GetDescriptionName() const override; 33 nsCString GetProcessName() const override; 34 nsCString GetCodecName() const override; 35 bool IsHardwareAccelerated(nsACString& aFailureReason) const override; 36 void SetSeekThreshold(const media::TimeUnit& aTime) override; 37 bool SupportDecoderRecycling() const override; 38 bool ShouldDecoderAlwaysBeRecycled() const override; 39 ConversionRequired NeedsConversion() const override; 40 41 private: 42 ~AudioTrimmer() = default; 43 44 // Apply trimming information on decoded data. 45 RefPtr<DecodePromise> HandleDecodedResult( 46 DecodePromise::ResolveOrRejectValue&& aValue); 47 void PrepareTrimmers(MediaRawData* aRaw); 48 const RefPtr<MediaDataDecoder> mDecoder; 49 nsCOMPtr<nsISerialEventTarget> mThread; 50 AutoTArray<Maybe<media::TimeInterval>, 2> mTrimmers; 51 }; 52 53 } // namespace mozilla 54 55 #endif // AudioTrimmer_h_