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 RefPtr<MediaResource> mResource; 43 RefPtr<ResourceStream> mStream; 44 AutoTArray<RefPtr<MP4TrackDemuxer>, 1> mAudioDemuxers; 45 AutoTArray<RefPtr<MP4TrackDemuxer>, 1> mVideoDemuxers; 46 nsTArray<uint8_t> mCryptoInitData; 47 bool mIsSeekable; 48 }; 49 50 } // namespace mozilla 51 52 #endif 53