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(MP4Demuxer_h_) 8 #define MP4Demuxer_h_ 9 10 #include "mozilla/Maybe.h" 11 #include "mozilla/Monitor.h" 12 #include "MediaDataDemuxer.h" 13 #include "MediaResource.h" 14 15 namespace mozilla { 16 class MP4TrackDemuxer; 17 class ResourceStream; 18 19 DDLoggedTypeDeclNameAndBase(MP4Demuxer, MediaDataDemuxer); 20 21 class MP4Demuxer : public MediaDataDemuxer, 22 public DecoderDoctorLifeLogger<MP4Demuxer> { 23 public: 24 explicit MP4Demuxer(MediaResource* aResource); 25 26 RefPtr<InitPromise> Init() override; 27 28 uint32_t GetNumberTracks(TrackInfo::TrackType aType) const override; 29 30 already_AddRefed<MediaTrackDemuxer> GetTrackDemuxer( 31 TrackInfo::TrackType aType, uint32_t aTrackNumber) override; 32 33 bool IsSeekable() const override; 34 35 UniquePtr<EncryptionInfo> GetCrypto() override; 36 37 void NotifyDataArrived() override; 38 39 void NotifyDataRemoved() override; 40 41 private: 42 friend class MP4TrackDemuxer; 43 RefPtr<MediaResource> mResource; 44 RefPtr<ResourceStream> mStream; 45 AutoTArray<RefPtr<MP4TrackDemuxer>, 1> mAudioDemuxers; 46 AutoTArray<RefPtr<MP4TrackDemuxer>, 1> mVideoDemuxers; 47 nsTArray<uint8_t> mCryptoInitData; 48 bool mIsSeekable; 49 }; 50 51 } // namespace mozilla 52 53 #endif 54