зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1568058 - pt 1 - Add DecoderTraits::CreateDemuxer and use it in CreateReader. r=jya
CreateDemuxer will be used in MediaBufferDecoder as we remove MediaFormatReader. Differential Revision: https://phabricator.services.mozilla.com/D45094 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
93489fe04d
Коммит
19bb343143
|
@ -228,33 +228,50 @@ bool DecoderTraits::ShouldHandleMediaType(
|
|||
}
|
||||
|
||||
/* static */
|
||||
MediaFormatReader* DecoderTraits::CreateReader(const MediaContainerType& aType,
|
||||
MediaFormatReaderInit& aInit) {
|
||||
already_AddRefed<MediaDataDemuxer> DecoderTraits::CreateDemuxer(
|
||||
const MediaContainerType& aType, MediaResource* aResource) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MediaFormatReader* decoderReader = nullptr;
|
||||
MediaResource* resource = aInit.mResource;
|
||||
RefPtr<MediaDataDemuxer> demuxer;
|
||||
|
||||
#ifdef MOZ_FMP4
|
||||
if (MP4Decoder::IsSupportedType(aType,
|
||||
/* DecoderDoctorDiagnostics* */ nullptr)) {
|
||||
decoderReader = new MediaFormatReader(aInit, new MP4Demuxer(resource));
|
||||
demuxer = new MP4Demuxer(aResource);
|
||||
} else
|
||||
#endif
|
||||
if (MP3Decoder::IsSupportedType(aType)) {
|
||||
decoderReader = new MediaFormatReader(aInit, new MP3Demuxer(resource));
|
||||
demuxer = new MP3Demuxer(aResource);
|
||||
} else if (ADTSDecoder::IsSupportedType(aType)) {
|
||||
decoderReader = new MediaFormatReader(aInit, new ADTSDemuxer(resource));
|
||||
demuxer = new ADTSDemuxer(aResource);
|
||||
} else if (WaveDecoder::IsSupportedType(aType)) {
|
||||
decoderReader = new MediaFormatReader(aInit, new WAVDemuxer(resource));
|
||||
demuxer = new WAVDemuxer(aResource);
|
||||
} else if (FlacDecoder::IsSupportedType(aType)) {
|
||||
decoderReader = new MediaFormatReader(aInit, new FlacDemuxer(resource));
|
||||
demuxer = new FlacDemuxer(aResource);
|
||||
} else if (OggDecoder::IsSupportedType(aType)) {
|
||||
RefPtr<OggDemuxer> demuxer = new OggDemuxer(resource);
|
||||
decoderReader = new MediaFormatReader(aInit, demuxer);
|
||||
demuxer->SetChainingEvents(&decoderReader->TimedMetadataProducer(),
|
||||
&decoderReader->MediaNotSeekableProducer());
|
||||
demuxer = new OggDemuxer(aResource);
|
||||
} else if (WebMDecoder::IsSupportedType(aType)) {
|
||||
decoderReader = new MediaFormatReader(aInit, new WebMDemuxer(resource));
|
||||
demuxer = new WebMDemuxer(aResource);
|
||||
}
|
||||
|
||||
return demuxer.forget();
|
||||
}
|
||||
|
||||
/* static */
|
||||
MediaFormatReader* DecoderTraits::CreateReader(const MediaContainerType& aType,
|
||||
MediaFormatReaderInit& aInit) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
RefPtr<MediaDataDemuxer> demuxer = CreateDemuxer(aType, aInit.mResource);
|
||||
if (!demuxer) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
MediaFormatReader* decoderReader = new MediaFormatReader(aInit, demuxer);
|
||||
|
||||
if (OggDecoder::IsSupportedType(aType)) {
|
||||
static_cast<OggDemuxer*>(demuxer.get())
|
||||
->SetChainingEvents(&decoderReader->TimedMetadataProducer(),
|
||||
&decoderReader->MediaNotSeekableProducer());
|
||||
}
|
||||
|
||||
return decoderReader;
|
||||
|
|
|
@ -15,8 +15,10 @@ namespace mozilla {
|
|||
|
||||
class DecoderDoctorDiagnostics;
|
||||
class MediaContainerType;
|
||||
class MediaDataDemuxer;
|
||||
struct MediaFormatReaderInit;
|
||||
class MediaFormatReader;
|
||||
class MediaResource;
|
||||
class TrackInfo;
|
||||
|
||||
enum CanPlayStatus { CANPLAY_NO, CANPLAY_MAYBE, CANPLAY_YES };
|
||||
|
@ -35,6 +37,11 @@ class DecoderTraits {
|
|||
static bool ShouldHandleMediaType(const char* aMIMEType,
|
||||
DecoderDoctorDiagnostics* aDiagnostics);
|
||||
|
||||
// Create a demuxer for the given MIME type aType. Returns null if we
|
||||
// were unable to create the demuxer.
|
||||
static already_AddRefed<MediaDataDemuxer> CreateDemuxer(
|
||||
const MediaContainerType& aType, MediaResource* aResource);
|
||||
|
||||
// Create a reader for thew given MIME type aType. Returns null
|
||||
// if we were unable to create the reader.
|
||||
static MediaFormatReader* CreateReader(const MediaContainerType& aType,
|
||||
|
|
Загрузка…
Ссылка в новой задаче