mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-27 20:25:44 +00:00
d32a15fe74
MP4Demuxer::Init() used to just create a minimal MP4Metadata structure, and report success/failure from that alone. But other later-called functions (e.g.: GetNumberTracks, GetTrackDemuxer, etc.) could still fail with no useful error reporting, when MP4Metadata tried to gather more of the needed information. Also, MP4Demuxer needed to keep this MP4Metadata around forever, even though it could contain an arbitrary amount of extra data that is not needed. With this patch, MP4Demuxer::Init() fetches all the data that could ever be needed, and then discards the MP4Metadata. This ensures that no late-initialization errors could creep in, and also helps reporting errors early and with better diagnostic information. This bug focuses on Init(), a later bug will give MP4Metadata the ability to report its own even-more-detailed errors. MozReview-Commit-ID: 1NjzOeKa1JI --HG-- extra : rebase_source : 02781395aa538cf2be984b695a7bc7e2b9b039b7
60 lines
1.5 KiB
C++
60 lines
1.5 KiB
C++
/* -*- 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/. */
|
|
|
|
#if !defined(MP4Demuxer_h_)
|
|
#define MP4Demuxer_h_
|
|
|
|
#include "mozilla/Maybe.h"
|
|
#include "mozilla/Monitor.h"
|
|
#include "MediaDataDemuxer.h"
|
|
#include "MediaResource.h"
|
|
|
|
namespace mp4_demuxer {
|
|
class MP4Metadata;
|
|
class ResourceStream;
|
|
class SampleIterator;
|
|
} // namespace mp4_demuxer
|
|
|
|
namespace mozilla {
|
|
|
|
class MP4TrackDemuxer;
|
|
|
|
class MP4Demuxer : public MediaDataDemuxer
|
|
{
|
|
public:
|
|
explicit MP4Demuxer(MediaResource* aResource);
|
|
|
|
RefPtr<InitPromise> Init() override;
|
|
|
|
bool HasTrackType(TrackInfo::TrackType aType) const override;
|
|
|
|
uint32_t GetNumberTracks(TrackInfo::TrackType aType) const override;
|
|
|
|
already_AddRefed<MediaTrackDemuxer>
|
|
GetTrackDemuxer(TrackInfo::TrackType aType, uint32_t aTrackNumber) override;
|
|
|
|
bool IsSeekable() const override;
|
|
|
|
UniquePtr<EncryptionInfo> GetCrypto() override;
|
|
|
|
void NotifyDataArrived() override;
|
|
|
|
void NotifyDataRemoved() override;
|
|
|
|
private:
|
|
friend class MP4TrackDemuxer;
|
|
RefPtr<MediaResource> mResource;
|
|
RefPtr<mp4_demuxer::ResourceStream> mStream;
|
|
AutoTArray<RefPtr<MP4TrackDemuxer>, 1> mAudioDemuxers;
|
|
AutoTArray<RefPtr<MP4TrackDemuxer>, 1> mVideoDemuxers;
|
|
nsTArray<uint8_t> mCryptoInitData;
|
|
bool mIsSeekable;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif
|