Bug 1319159 - Updates how 'ParseChromiumManifest' works so that it doesn't assume Widevine (now it assumes Widevine or Clearkey..). r=cpearce

MozReview-Commit-ID: 8m6hPIiUPT

--HG--
extra : rebase_source : 457da21982f35b66eac1ff32316ceee243139652
extra : histedit_source : 4ebc011309b9013952435bf0ff32206a73de0854
This commit is contained in:
Jay Harris 2016-12-22 11:28:40 +13:00
parent fd396ecf1d
commit f4929b46d1
6 changed files with 57 additions and 22 deletions

View File

@ -802,7 +802,7 @@ bin/libfreebl_32int64_3.so
; media
@RESPATH@/gmp-clearkey/0.1/@DLL_PREFIX@clearkey@DLL_SUFFIX@
@RESPATH@/gmp-clearkey/0.1/clearkey.info
@RESPATH@/gmp-clearkey/0.1/manifest.json
#ifdef PKG_LOCALE_MANIFEST
#include @PKG_LOCALE_MANIFEST@

View File

@ -797,7 +797,7 @@ bin/libfreebl_32int64_3.so
; media
@RESPATH@/gmp-clearkey/0.1/@DLL_PREFIX@clearkey@DLL_SUFFIX@
@RESPATH@/gmp-clearkey/0.1/clearkey.info
@RESPATH@/gmp-clearkey/0.1/manifest.json
; gfx
#ifdef XP_WIN

View File

@ -958,22 +958,54 @@ GMPParent::ParseChromiumManifest(const nsAString& aJSON)
mDescription = NS_ConvertUTF16toUTF8(m.mDescription);
mVersion = NS_ConvertUTF16toUTF8(m.mVersion);
nsCString kEMEKeySystem;
// We hard code a few of the settings because they can't be stored in the
// widevine manifest without making our API different to widevine's.
if (mDisplayName.EqualsASCII("clearkey")) {
kEMEKeySystem = kEMEKeySystemClearkey;
#if XP_WIN
mLibs = NS_LITERAL_CSTRING("dxva2.dll, msmpeg2vdec.dll, evr.dll, mfh264dec.dll, mfplat.dll");
#endif
} else if (mDisplayName.EqualsASCII("WidevineCdm")) {
kEMEKeySystem = kEMEKeySystemWidevine;
#if XP_WIN
mLibs = NS_LITERAL_CSTRING("dxva2.dll");
#endif
} else {
return GenericPromise::CreateAndReject(NS_ERROR_FAILURE, __func__);
}
GMPCapability video(NS_LITERAL_CSTRING(GMP_API_VIDEO_DECODER));
video.mAPITags.AppendElement(NS_LITERAL_CSTRING("h264"));
video.mAPITags.AppendElement(NS_LITERAL_CSTRING("vp8"));
video.mAPITags.AppendElement(NS_LITERAL_CSTRING("vp9"));
video.mAPITags.AppendElement(kEMEKeySystemWidevine);
nsCString codecsString = NS_ConvertUTF16toUTF8(m.mX_cdm_codecs);
nsTArray<nsCString> codecs;
SplitAt(",", codecsString, codecs);
for (const nsCString& chromiumCodec : codecs) {
nsCString codec;
if (chromiumCodec.EqualsASCII("vp8")) {
codec = NS_LITERAL_CSTRING("vp8");
} else if (chromiumCodec.EqualsASCII("vp9.0")) {
codec = NS_LITERAL_CSTRING("vp9");
} else if (chromiumCodec.EqualsASCII("avc1")) {
codec = NS_LITERAL_CSTRING("h264");
} else {
return GenericPromise::CreateAndReject(NS_ERROR_FAILURE, __func__);
}
video.mAPITags.AppendElement(codec);
}
video.mAPITags.AppendElement(kEMEKeySystem);
mCapabilities.AppendElement(Move(video));
GMPCapability decrypt(NS_LITERAL_CSTRING(GMP_API_DECRYPTOR));
decrypt.mAPITags.AppendElement(kEMEKeySystemWidevine);
decrypt.mAPITags.AppendElement(kEMEKeySystem);
mCapabilities.AppendElement(Move(decrypt));
MOZ_ASSERT(mName.EqualsLiteral("widevinecdm"));
mAdapter = NS_LITERAL_STRING("widevine");
#ifdef XP_WIN
mLibs = NS_LITERAL_CSTRING("dxva2.dll");
#endif
return GenericPromise::CreateAndResolve(true, __func__);
}

View File

@ -1,10 +0,0 @@
Name: clearkey
Description: ClearKey Gecko Media Plugin
Version: 1
#ifdef ENABLE_WMF
APIs: eme-decrypt-v9[org.w3.clearkey], decode-video[h264:org.w3.clearkey]
Libraries: dxva2.dll, d3d9.dll, msmpeg2vdec.dll, msmpeg2adec.dll, MSAudDecMFT.dll, evr.dll, mfheaacdec.dll, mfh264dec.dll, mfplat.dll
#else
APIs: eme-decrypt-v9[org.w3.clearkey]
Libraries:
#endif

View File

@ -0,0 +1,13 @@
{
"name": "clearkey",
"description": "ClearKey Gecko Media Plugin",
"version": "1",
"x-cdm-module-versions": "4",
"x-cdm-interface-versions": "8",
"x-cdm-host-versions": "8",
#ifdef ENABLE_WMF
"x-cdm-codecs": "avc1"
#else
"x-cdm-codecs": ""
#endif
}

View File

@ -8,7 +8,7 @@ SharedLibrary('clearkey')
FINAL_TARGET = 'dist/bin/gmp-clearkey/0.1'
FINAL_TARGET_PP_FILES += ['clearkey.info.in']
FINAL_TARGET_PP_FILES += ['manifest.json.in']
UNIFIED_SOURCES += [
'ClearKeyAsyncShutdown.cpp',