Bug 1041919 - Always use MP4Reader/PDM in MediaSourceDecoder. r=cpearce

This commit is contained in:
Matthew Gregan 2014-07-22 20:20:00 +12:00
parent 0855713cbf
commit d446cbd1e5

View File

@ -24,6 +24,11 @@
#include "SourceBufferList.h"
#include "VideoUtils.h"
#ifdef MOZ_FMP4
#include "MP4Decoder.h"
#include "MP4Reader.h"
#endif
#ifdef PR_LOGGING
extern PRLogModuleInfo* gMediaSourceLog;
#define MSE_DEBUG(...) PR_LOG(gMediaSourceLog, PR_LOG_DEBUG, (__VA_ARGS__))
@ -418,6 +423,23 @@ MediaSourceReader::InitializePendingDecoders()
mDecoder->NotifyWaitingForResourcesStatusChanged();
}
MediaDecoderReader*
CreateReaderForType(const nsACString& aType, AbstractMediaDecoder* aDecoder)
{
#ifdef MOZ_FMP4
// The MP4Reader that supports fragmented MP4 and uses
// PlatformDecoderModules is hidden behind prefs for regular video
// elements, but we always want to use it for MSE, so instantiate it
// directly here.
if ((aType.LowerCaseEqualsLiteral("video/mp4") ||
aType.LowerCaseEqualsLiteral("audio/mp4")) &&
MP4Decoder::IsEnabled()) {
return new MP4Reader(aDecoder);
}
#endif
return DecoderTraits::CreateReader(aType, aDecoder);
}
already_AddRefed<SubBufferDecoder>
MediaSourceReader::CreateSubDecoder(const nsACString& aType,
MediaSourceDecoder* aParentDecoder,
@ -426,7 +448,7 @@ MediaSourceReader::CreateSubDecoder(const nsACString& aType,
// XXX: Why/when is mDecoder null here, since it should be equal to aParentDecoder?!
nsRefPtr<SubBufferDecoder> decoder =
new SubBufferDecoder(new SourceBufferResource(nullptr, aType), aParentDecoder);
nsRefPtr<MediaDecoderReader> reader(DecoderTraits::CreateReader(aType, decoder));
nsRefPtr<MediaDecoderReader> reader(CreateReaderForType(aType, decoder));
if (!reader) {
return nullptr;
}