diff options
-rw-r--r-- | chrome/renderer/media/chrome_key_systems.cc | 4 | ||||
-rw-r--r-- | chromecast/renderer/key_systems_cast.cc | 2 | ||||
-rw-r--r-- | components/cdm/renderer/android_key_systems.cc | 4 | ||||
-rw-r--r-- | components/cdm/renderer/widevine_key_systems.cc | 4 | ||||
-rw-r--r-- | content/browser/media/cdm/browser_cdm_manager.cc | 10 | ||||
-rw-r--r-- | media/base/eme_constants.h | 24 | ||||
-rw-r--r-- | media/base/key_system_info.cc | 2 | ||||
-rw-r--r-- | media/base/key_system_info.h | 2 | ||||
-rw-r--r-- | media/base/key_systems.cc | 48 | ||||
-rw-r--r-- | media/base/key_systems.h | 9 | ||||
-rw-r--r-- | media/base/key_systems_unittest.cc | 4 |
11 files changed, 52 insertions, 61 deletions
diff --git a/chrome/renderer/media/chrome_key_systems.cc b/chrome/renderer/media/chrome_key_systems.cc index 33fea4a..1b9f424 100644 --- a/chrome/renderer/media/chrome_key_systems.cc +++ b/chrome/renderer/media/chrome_key_systems.cc @@ -76,10 +76,10 @@ static void AddExternalClearKey( info.key_system = kExternalClearKeyKeySystem; info.supported_init_data_types = - media::EME_INIT_DATA_TYPE_WEBM | media::EME_INIT_DATA_TYPE_KEYIDS; + media::kInitDataTypeMaskWebM | media::kInitDataTypeMaskKeyIds; info.supported_codecs = media::EME_CODEC_WEBM_ALL; #if defined(USE_PROPRIETARY_CODECS) - info.supported_init_data_types |= media::EME_INIT_DATA_TYPE_CENC; + info.supported_init_data_types |= media::kInitDataTypeMaskCenc; info.supported_codecs |= media::EME_CODEC_MP4_ALL; #endif // defined(USE_PROPRIETARY_CODECS) diff --git a/chromecast/renderer/key_systems_cast.cc b/chromecast/renderer/key_systems_cast.cc index 995092d..cdb8c9c 100644 --- a/chromecast/renderer/key_systems_cast.cc +++ b/chromecast/renderer/key_systems_cast.cc @@ -22,7 +22,7 @@ void AddKeySystemWithCodecs( std::vector<::media::KeySystemInfo>* key_systems_info) { ::media::KeySystemInfo info; info.key_system = key_system_name; - info.supported_init_data_types = ::media::EME_INIT_DATA_TYPE_CENC; + info.supported_init_data_types = ::media::kInitDataTypeMaskCenc; info.supported_codecs = ::media::EME_CODEC_MP4_AAC | ::media::EME_CODEC_MP4_AVC1; info.max_audio_robustness = ::media::EmeRobustness::EMPTY; diff --git a/components/cdm/renderer/android_key_systems.cc b/components/cdm/renderer/android_key_systems.cc index e773656..d9bb106 100644 --- a/components/cdm/renderer/android_key_systems.cc +++ b/components/cdm/renderer/android_key_systems.cc @@ -107,10 +107,10 @@ void AddAndroidPlatformKeySystems( // associated initialization data type. KeySystems handles validating // |init_data_type| x |container| pairings. if (response.compositing_codecs & media::EME_CODEC_WEBM_ALL) - info.supported_init_data_types |= media::EME_INIT_DATA_TYPE_WEBM; + info.supported_init_data_types |= media::kInitDataTypeMaskWebM; #if defined(USE_PROPRIETARY_CODECS) if (response.compositing_codecs & media::EME_CODEC_MP4_ALL) - info.supported_init_data_types |= media::EME_INIT_DATA_TYPE_CENC; + info.supported_init_data_types |= media::kInitDataTypeMaskCenc; #endif // defined(USE_PROPRIETARY_CODECS) info.max_audio_robustness = EmeRobustness::EMPTY; info.max_video_robustness = EmeRobustness::EMPTY; diff --git a/components/cdm/renderer/widevine_key_systems.cc b/components/cdm/renderer/widevine_key_systems.cc index ec38ab6..c1412c3 100644 --- a/components/cdm/renderer/widevine_key_systems.cc +++ b/components/cdm/renderer/widevine_key_systems.cc @@ -62,10 +62,10 @@ void AddWidevineWithCodecs( // associated initialization data type. KeySystems handles validating // |init_data_type| x |container| pairings. if (supported_codecs & media::EME_CODEC_WEBM_ALL) - info.supported_init_data_types |= media::EME_INIT_DATA_TYPE_WEBM; + info.supported_init_data_types |= media::kInitDataTypeMaskWebM; #if defined(USE_PROPRIETARY_CODECS) if (supported_codecs & media::EME_CODEC_MP4_ALL) - info.supported_init_data_types |= media::EME_INIT_DATA_TYPE_CENC; + info.supported_init_data_types |= media::kInitDataTypeMaskCenc; #endif // defined(USE_PROPRIETARY_CODECS) info.max_audio_robustness = max_audio_robustness; diff --git a/content/browser/media/cdm/browser_cdm_manager.cc b/content/browser/media/cdm/browser_cdm_manager.cc index 74370e5..6f3c28d 100644 --- a/content/browser/media/cdm/browser_cdm_manager.cc +++ b/content/browser/media/cdm/browser_cdm_manager.cc @@ -347,14 +347,14 @@ void BrowserCdmManager::OnCreateSessionAndGenerateRequest( return; } - media::EmeInitDataType eme_init_data_type = media::EME_INIT_DATA_TYPE_NONE; + media::EmeInitDataType eme_init_data_type; switch (init_data_type) { case INIT_DATA_TYPE_WEBM: - eme_init_data_type = media::EME_INIT_DATA_TYPE_WEBM; + eme_init_data_type = media::EmeInitDataType::WEBM; break; #if defined(USE_PROPRIETARY_CODECS) case INIT_DATA_TYPE_CENC: - eme_init_data_type = media::EME_INIT_DATA_TYPE_CENC; + eme_init_data_type = media::EmeInitDataType::CENC; break; #endif default: @@ -560,11 +560,11 @@ void BrowserCdmManager::CreateSessionAndGenerateRequestIfPermitted( // "audio"/"video" does not matter, so use "video". std::string init_data_type_string; switch (init_data_type) { - case media::EME_INIT_DATA_TYPE_WEBM: + case media::EmeInitDataType::WEBM: init_data_type_string = "video/webm"; break; #if defined(USE_PROPRIETARY_CODECS) - case media::EME_INIT_DATA_TYPE_CENC: + case media::EmeInitDataType::CENC: init_data_type_string = "video/mp4"; break; #endif diff --git a/media/base/eme_constants.h b/media/base/eme_constants.h index df64eeb..70d58c5 100644 --- a/media/base/eme_constants.h +++ b/media/base/eme_constants.h @@ -9,18 +9,23 @@ namespace media { -// Defines bitmask values that specify registered initialization data types used +// Defines values that specify registered Initialization Data Types used // in Encrypted Media Extensions (EME). -// The mask values are stored in a SupportedInitDataTypes. -enum EmeInitDataType { - EME_INIT_DATA_TYPE_NONE = 0, - EME_INIT_DATA_TYPE_WEBM = 1 << 0, -#if defined(USE_PROPRIETARY_CODECS) - EME_INIT_DATA_TYPE_CENC = 1 << 1, -#endif // defined(USE_PROPRIETARY_CODECS) - EME_INIT_DATA_TYPE_KEYIDS = 1 << 2, +// http://w3c.github.io/encrypted-media/initdata-format-registry.html#registry +// The mask values are stored in a InitDataTypeMask. +enum class EmeInitDataType { + UNKNOWN, + WEBM, + CENC, + KEYIDS }; +typedef uint32_t InitDataTypeMask; +const InitDataTypeMask kInitDataTypeMaskNone = 0; +const InitDataTypeMask kInitDataTypeMaskWebM = 1 << 0; +const InitDataTypeMask kInitDataTypeMaskCenc = 1 << 1; +const InitDataTypeMask kInitDataTypeMaskKeyIds = 1 << 2; + // Defines bitmask values that specify codecs used in Encrypted Media Extension // (EME). Each value represents a codec within a specific container. // The mask values are stored in a SupportedCodecs. @@ -51,7 +56,6 @@ enum EmeCodec { #endif // defined(USE_PROPRIETARY_CODECS) }; -typedef uint32_t SupportedInitDataTypes; typedef uint32_t SupportedCodecs; enum EmeSessionTypeSupport { diff --git a/media/base/key_system_info.cc b/media/base/key_system_info.cc index 55927790..f5ca112 100644 --- a/media/base/key_system_info.cc +++ b/media/base/key_system_info.cc @@ -7,7 +7,7 @@ namespace media { KeySystemInfo::KeySystemInfo() - : supported_init_data_types(EME_INIT_DATA_TYPE_NONE), + : supported_init_data_types(kInitDataTypeMaskNone), supported_codecs(EME_CODEC_NONE), max_audio_robustness(EmeRobustness::INVALID), max_video_robustness(EmeRobustness::INVALID), diff --git a/media/base/key_system_info.h b/media/base/key_system_info.h index 218cebd..4c60552 100644 --- a/media/base/key_system_info.h +++ b/media/base/key_system_info.h @@ -35,7 +35,7 @@ struct MEDIA_EXPORT KeySystemInfo { std::string key_system; - SupportedInitDataTypes supported_init_data_types; + InitDataTypeMask supported_init_data_types; SupportedCodecs supported_codecs; EmeRobustness max_audio_robustness; EmeRobustness max_video_robustness; diff --git a/media/base/key_systems.cc b/media/base/key_systems.cc index 1ed10d0..85bde8b 100644 --- a/media/base/key_systems.cc +++ b/media/base/key_systems.cc @@ -34,14 +34,11 @@ struct NamedInitDataType { EmeInitDataType type; }; -// Mapping between initialization data types names and enum values. When adding -// entries, make sure to update IsSaneInitDataTypeWithContainer(). +// Mapping between initialization data types names and enum values. static NamedInitDataType kInitDataTypeNames[] = { - {"webm", EME_INIT_DATA_TYPE_WEBM}, -#if defined(USE_PROPRIETARY_CODECS) - {"cenc", EME_INIT_DATA_TYPE_CENC}, -#endif // defined(USE_PROPRIETARY_CODECS) - {"keyids", EME_INIT_DATA_TYPE_KEYIDS}, + {"webm", EmeInitDataType::WEBM}, + {"cenc", EmeInitDataType::CENC}, + {"keyids", EmeInitDataType::KEYIDS}, }; struct NamedCodec { @@ -120,7 +117,7 @@ static void AddClearKey(std::vector<KeySystemInfo>* concrete_key_systems) { // VP9 support is device dependent. info.supported_init_data_types = - EME_INIT_DATA_TYPE_WEBM | EME_INIT_DATA_TYPE_KEYIDS; + kInitDataTypeMaskWebM | kInitDataTypeMaskKeyIds; info.supported_codecs = EME_CODEC_WEBM_ALL; #if defined(OS_ANDROID) @@ -134,7 +131,7 @@ static void AddClearKey(std::vector<KeySystemInfo>* concrete_key_systems) { #endif // defined(OS_ANDROID) #if defined(USE_PROPRIETARY_CODECS) - info.supported_init_data_types |= EME_INIT_DATA_TYPE_CENC; + info.supported_init_data_types |= kInitDataTypeMaskCenc; info.supported_codecs |= EME_CODEC_MP4_ALL; #endif // defined(USE_PROPRIETARY_CODECS) @@ -368,7 +365,7 @@ EmeInitDataType KeySystemsImpl::GetInitDataTypeForName( init_data_type_name_map_.find(init_data_type); if (iter != init_data_type_name_map_.end()) return iter->second; - return EME_INIT_DATA_TYPE_NONE; + return EmeInitDataType::UNKNOWN; } SupportedCodecs KeySystemsImpl::GetCodecMaskForContainer( @@ -591,10 +588,21 @@ bool KeySystemsImpl::IsSupportedKeySystemWithInitDataType( if (key_system_iter == concrete_key_system_map_.end()) return false; - // Check |init_data_type| and |key_system| x |init_data_type|. - const KeySystemInfo& info = key_system_iter->second; - EmeInitDataType eme_init_data_type = GetInitDataTypeForName(init_data_type); - return (info.supported_init_data_types & eme_init_data_type) != 0; + // Check |init_data_type|. + InitDataTypeMask available_init_data_types = + key_system_iter->second.supported_init_data_types; + switch (GetInitDataTypeForName(init_data_type)) { + case EmeInitDataType::UNKNOWN: + return false; + case EmeInitDataType::WEBM: + return (available_init_data_types & kInitDataTypeMaskWebM) != 0; + case EmeInitDataType::CENC: + return (available_init_data_types & kInitDataTypeMaskCenc) != 0; + case EmeInitDataType::KEYIDS: + return (available_init_data_types & kInitDataTypeMaskKeyIds) != 0; + } + NOTREACHED(); + return false; } bool KeySystemsImpl::PrefixedIsSupportedKeySystemWithMediaMimeType( @@ -953,18 +961,6 @@ std::string GetPrefixedKeySystemName(const std::string& key_system) { return key_system; } -bool IsSaneInitDataTypeWithContainer( - const std::string& init_data_type, - const std::string& container) { - if (init_data_type == "cenc") { - return container == "audio/mp4" || container == "video/mp4"; - } else if (init_data_type == "webm") { - return container == "audio/webm" || container == "video/webm"; - } else { - return true; - } -} - bool PrefixedIsSupportedConcreteKeySystem(const std::string& key_system) { return KeySystemsImpl::GetInstance().IsConcreteSupportedKeySystem(key_system); } diff --git a/media/base/key_systems.h b/media/base/key_systems.h index a6a8062..9a4e233 100644 --- a/media/base/key_systems.h +++ b/media/base/key_systems.h @@ -79,15 +79,6 @@ MEDIA_EXPORT std::string GetUnprefixedKeySystemName( MEDIA_EXPORT std::string GetPrefixedKeySystemName( const std::string& key_system); -// Returns false if a container-specific |init_data_type| is specified with an -// inappropriate container. -// TODO(sandersd): Remove this essentially internal detail if the spec is -// updated to not convolve the two in a single method call. -// TODO(sandersd): Use enum values instead of strings. http://crbug.com/417440 -MEDIA_EXPORT bool IsSaneInitDataTypeWithContainer( - const std::string& init_data_type, - const std::string& container); - // Use for unprefixed EME only! // Returns whether |key_system| is a supported key system. // Note: Shouldn't be used for prefixed API as the original diff --git a/media/base/key_systems_unittest.cc b/media/base/key_systems_unittest.cc index 8fb68ae..bb0227b 100644 --- a/media/base/key_systems_unittest.cc +++ b/media/base/key_systems_unittest.cc @@ -190,7 +190,7 @@ void TestMediaClient::AddUsesAesKeySystem( system.key_system = name; system.supported_codecs = EME_CODEC_WEBM_ALL; system.supported_codecs |= TEST_CODEC_FOO_ALL; - system.supported_init_data_types = EME_INIT_DATA_TYPE_WEBM; + system.supported_init_data_types = kInitDataTypeMaskWebM; system.max_audio_robustness = EmeRobustness::EMPTY; system.max_video_robustness = EmeRobustness::EMPTY; system.persistent_license_support = EME_SESSION_TYPE_NOT_SUPPORTED; @@ -207,7 +207,7 @@ void TestMediaClient::AddExternalKeySystem( ext.key_system = kExternal; ext.supported_codecs = EME_CODEC_WEBM_ALL; ext.supported_codecs |= TEST_CODEC_FOO_ALL; - ext.supported_init_data_types = EME_INIT_DATA_TYPE_WEBM; + ext.supported_init_data_types = kInitDataTypeMaskWebM; ext.max_audio_robustness = EmeRobustness::EMPTY; ext.max_video_robustness = EmeRobustness::EMPTY; ext.persistent_license_support = EME_SESSION_TYPE_SUPPORTED; |