Bug 1315850 - Create CDM video decoder in EMEDecoderModule. r=jya draft
authorChris Pearce <cpearce@mozilla.com>
Wed, 08 Mar 2017 16:20:09 +1300
changeset 504170 018abf2b8e1b351a29ba62275a2681fe9ea4fc24
parent 504169 6c5a3706b37e122a67e5ec1670587f37e25a1bc6
child 504171 aa854e9d88965d7da60231d6f6a3912bf6ad2eeb
push id50748
push userbmo:cpearce@mozilla.com
push dateFri, 24 Mar 2017 01:10:17 +0000
reviewersjya
bugs1315850
milestone55.0a1
Bug 1315850 - Create CDM video decoder in EMEDecoderModule. r=jya MozReview-Commit-ID: 3xgFxg1WfmY
dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp
dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp
--- a/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp
+++ b/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp
@@ -348,17 +348,21 @@ EMEDecoderModule::CreateVideoDecoder(con
     return m->CreateVideoDecoder(aParams);
   }
 
   if (SupportsMimeType(aParams.mConfig.mMimeType, nullptr)) {
     // GMP decodes. Assume that means it can decrypt too.
     RefPtr<MediaDataDecoderProxy> wrapper =
       CreateDecoderWrapper(mProxy, aParams);
     auto params = GMPVideoDecoderParams(aParams);
-    wrapper->SetProxyTarget(new EMEVideoDecoder(mProxy, params));
+    if (MediaPrefs::EMEChromiumAPIEnabled()) {
+      wrapper->SetProxyTarget(new ChromiumCDMVideoDecoder(params, mProxy));
+    } else {
+      wrapper->SetProxyTarget(new EMEVideoDecoder(mProxy, params));
+    }
     return wrapper.forget();
   }
 
   MOZ_ASSERT(mPDM);
   RefPtr<MediaDataDecoder> decoder(mPDM->CreateDecoder(aParams));
   if (!decoder) {
     return nullptr;
   }
--- a/dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp
+++ b/dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp
@@ -74,29 +74,30 @@ GMPDecoderModule::CreateAudioDecoder(con
 bool
 GMPDecoderModule::SupportsMimeType(const nsACString& aMimeType,
                                    const Maybe<nsCString>& aGMP)
 {
   if (aGMP.isNothing()) {
     return false;
   }
 
+  nsCString api = MediaPrefs::EMEChromiumAPIEnabled()
+    ? NS_LITERAL_CSTRING(CHROMIUM_CDM_API)
+    : NS_LITERAL_CSTRING(GMP_API_VIDEO_DECODER);
+
   if (MP4Decoder::IsH264(aMimeType)) {
-    return HaveGMPFor(NS_LITERAL_CSTRING(GMP_API_VIDEO_DECODER),
-                      { NS_LITERAL_CSTRING("h264"), aGMP.value()});
+    return HaveGMPFor(api, { NS_LITERAL_CSTRING("h264"), aGMP.value()});
   }
 
   if (VPXDecoder::IsVP9(aMimeType)) {
-    return HaveGMPFor(NS_LITERAL_CSTRING(GMP_API_VIDEO_DECODER),
-                      { NS_LITERAL_CSTRING("vp9"), aGMP.value()});
+    return HaveGMPFor(api, { NS_LITERAL_CSTRING("vp9"), aGMP.value()});
   }
 
   if (VPXDecoder::IsVP8(aMimeType)) {
-    return HaveGMPFor(NS_LITERAL_CSTRING(GMP_API_VIDEO_DECODER),
-                      { NS_LITERAL_CSTRING("vp8"), aGMP.value()});
+    return HaveGMPFor(api, { NS_LITERAL_CSTRING("vp8"), aGMP.value()});
   }
 
   return false;
 }
 
 bool
 GMPDecoderModule::SupportsMimeType(const nsACString& aMimeType,
                                    DecoderDoctorDiagnostics* aDiagnostics) const