Bug 1378304. P1 - pass a MediaResource* to DecoderTraits::CreateReader() to reduce the use of AbstractMediaDecoder::GetResource(). draft
authorJW Wang <jwwang@mozilla.com>
Wed, 05 Jul 2017 14:07:54 +0800
changeset 604487 c73f721696275ae421c2433f265a49ca0e9a8c60
parent 604481 af0466865a212c84fbbab343c9cbb984c6132920
child 604488 ae5c38801c0291310588ec462c726f5c67b0aaae
push id67093
push userjwwang@mozilla.com
push dateThu, 06 Jul 2017 01:12:53 +0000
bugs1378304
milestone56.0a1
Bug 1378304. P1 - pass a MediaResource* to DecoderTraits::CreateReader() to reduce the use of AbstractMediaDecoder::GetResource(). MozReview-Commit-ID: CKFiqaBznVe
dom/media/DecoderTraits.cpp
dom/media/DecoderTraits.h
dom/media/webaudio/MediaBufferDecoder.cpp
--- a/dom/media/DecoderTraits.cpp
+++ b/dom/media/DecoderTraits.cpp
@@ -334,55 +334,55 @@ DecoderTraits::CreateDecoder(MediaDecode
 {
   MOZ_ASSERT(NS_IsMainThread());
   return InstantiateDecoder(aInit, aDiagnostics);
 }
 
 /* static */
 MediaDecoderReader*
 DecoderTraits::CreateReader(const MediaContainerType& aType,
-                            AbstractMediaDecoder* aDecoder)
+                            AbstractMediaDecoder* aDecoder,
+                            MediaResource* aResource)
 {
   MOZ_ASSERT(NS_IsMainThread());
   MediaDecoderReader* decoderReader = nullptr;
 
   if (!aDecoder) {
     return decoderReader;
   }
 
 #ifdef MOZ_FMP4
   if (MP4Decoder::IsSupportedType(aType,
                                   /* DecoderDoctorDiagnostics* */ nullptr)) {
-    decoderReader = new MediaFormatReader(aDecoder, new MP4Demuxer(aDecoder->GetResource()));
+    decoderReader = new MediaFormatReader(aDecoder, new MP4Demuxer(aResource));
   } else
 #endif
   if (MP3Decoder::IsSupportedType(aType)) {
-    decoderReader = new MediaFormatReader(aDecoder, new MP3Demuxer(aDecoder->GetResource()));
+    decoderReader = new MediaFormatReader(aDecoder, new MP3Demuxer(aResource));
   } else
   if (ADTSDecoder::IsSupportedType(aType)) {
-    decoderReader = new MediaFormatReader(aDecoder, new ADTSDemuxer(aDecoder->GetResource()));
+    decoderReader = new MediaFormatReader(aDecoder, new ADTSDemuxer(aResource));
   } else
   if (WaveDecoder::IsSupportedType(aType)) {
-    decoderReader = new MediaFormatReader(aDecoder, new WAVDemuxer(aDecoder->GetResource()));
+    decoderReader = new MediaFormatReader(aDecoder, new WAVDemuxer(aResource));
   } else
   if (FlacDecoder::IsSupportedType(aType)) {
-    decoderReader = new MediaFormatReader(aDecoder, new FlacDemuxer(aDecoder->GetResource()));
+    decoderReader = new MediaFormatReader(aDecoder, new FlacDemuxer(aResource));
   } else
   if (OggDecoder::IsSupportedType(aType)) {
-    decoderReader = new MediaFormatReader(aDecoder, new OggDemuxer(aDecoder->GetResource()));
+    decoderReader = new MediaFormatReader(aDecoder, new OggDemuxer(aResource));
   } else
 #ifdef MOZ_ANDROID_OMX
   if (MediaDecoder::IsAndroidMediaPluginEnabled() &&
       EnsureAndroidMediaPluginHost()->FindDecoder(aType, nullptr)) {
     decoderReader = new AndroidMediaReader(aDecoder, aType);
   } else
 #endif
   if (WebMDecoder::IsSupportedType(aType)) {
-    decoderReader =
-      new MediaFormatReader(aDecoder, new WebMDemuxer(aDecoder->GetResource()));
+    decoderReader = new MediaFormatReader(aDecoder, new WebMDemuxer(aResource));
   }
 
   return decoderReader;
 }
 
 /* static */
 bool DecoderTraits::IsSupportedInVideoDocument(const nsACString& aType)
 {
--- a/dom/media/DecoderTraits.h
+++ b/dom/media/DecoderTraits.h
@@ -16,16 +16,17 @@ namespace mozilla {
 
 class AbstractMediaDecoder;
 class ChannelMediaDecoder;
 class DecoderDoctorDiagnostics;
 class MediaContainerType;
 struct MediaDecoderInit;
 class MediaDecoderOwner;
 class MediaDecoderReader;
+class MediaResource;
 
 enum CanPlayStatus {
   CANPLAY_NO,
   CANPLAY_MAYBE,
   CANPLAY_YES
 };
 
 class DecoderTraits {
@@ -45,17 +46,18 @@ public:
   // were unable to create the decoder.
   static already_AddRefed<ChannelMediaDecoder> CreateDecoder(
     MediaDecoderInit& aInit,
     DecoderDoctorDiagnostics* aDiagnostics);
 
   // Create a reader for thew given MIME type aType. Returns null
   // if we were unable to create the reader.
   static MediaDecoderReader* CreateReader(const MediaContainerType& aType,
-                                          AbstractMediaDecoder* aDecoder);
+                                          AbstractMediaDecoder* aDecoder,
+                                          MediaResource* aResource);
 
   // Returns true if MIME type aType is supported in video documents,
   // or false otherwise. Not all platforms support all MIME types, and
   // vice versa.
   static bool IsSupportedInVideoDocument(const nsACString& aType);
 
   // Convenience function that returns false if MOZ_FMP4 is not defined,
   // otherwise defers to MP4Decoder::IsSupportedType().
--- a/dom/media/webaudio/MediaBufferDecoder.cpp
+++ b/dom/media/webaudio/MediaBufferDecoder.cpp
@@ -188,17 +188,18 @@ MediaDecodeTask::CreateReader()
   MOZ_ASSERT(!mBufferDecoder);
   mMainThread =
     mDecodeJob.mContext->GetOwnerGlobal()->AbstractMainThreadFor(TaskCategory::Other);
   mBufferDecoder = new BufferDecoder(resource, mMainThread);
 
   // If you change this list to add support for new decoders, please consider
   // updating HTMLMediaElement::CreateDecoder as well.
 
-  mDecoderReader = DecoderTraits::CreateReader(mContainerType, mBufferDecoder);
+  mDecoderReader =
+    DecoderTraits::CreateReader(mContainerType, mBufferDecoder, resource);
 
   if (!mDecoderReader) {
     return false;
   }
 
   nsresult rv = mDecoderReader->Init();
   if (NS_FAILED(rv)) {
     return false;