Index: media/base/key_systems.cc |
diff --git a/media/base/key_systems.cc b/media/base/key_systems.cc |
index f89992572ea6258a481fdeba97157be69993e1cf..e834d47c09e6b1ea796d659c97952955581a9b95 100644 |
--- a/media/base/key_systems.cc |
+++ b/media/base/key_systems.cc |
@@ -202,7 +202,7 @@ class KeySystemsImpl : public KeySystems { |
bool IsSupportedInitDataType(const std::string& key_system, |
EmeInitDataType init_data_type) const override; |
- bool IsSupportedCodecCombination( |
+ EmeConfigRule GetContentTypeConfigRule( |
const std::string& key_system, |
EmeMediaType media_type, |
const std::string& container_mime_type, |
@@ -665,7 +665,7 @@ bool KeySystemsImpl::IsSupportedKeySystem(const std::string& key_system) const { |
return concrete_key_system_map_.count(key_system) != 0; |
} |
-bool KeySystemsImpl::IsSupportedCodecCombination( |
+EmeConfigRule KeySystemsImpl::GetContentTypeConfigRule( |
const std::string& key_system, |
EmeMediaType media_type, |
const std::string& container_mime_type, |
@@ -677,12 +677,12 @@ bool KeySystemsImpl::IsSupportedCodecCombination( |
switch (media_type) { |
case EmeMediaType::AUDIO: |
if (!StartsWithASCII(container_mime_type, "audio/", true)) |
- return false; |
+ return EmeConfigRule::NOT_SUPPORTED; |
media_type_codec_mask = audio_codec_mask_; |
break; |
case EmeMediaType::VIDEO: |
if (!StartsWithASCII(container_mime_type, "video/", true)) |
- return false; |
+ return EmeConfigRule::NOT_SUPPORTED; |
media_type_codec_mask = video_codec_mask_; |
break; |
} |
@@ -692,26 +692,39 @@ bool KeySystemsImpl::IsSupportedCodecCombination( |
concrete_key_system_map_.find(key_system); |
if (key_system_iter == concrete_key_system_map_.end()) { |
NOTREACHED(); |
- return false; |
+ return EmeConfigRule::NOT_SUPPORTED; |
} |
SupportedCodecs key_system_codec_mask = |
key_system_iter->second.supported_codecs; |
+#if defined(OS_ANDROID) |
+ SupportedCodecs key_system_secure_codec_mask = |
+ key_system_iter->second.supported_secure_codecs; |
+#endif // defined(OS_ANDROID) |
+ |
// Check that the container is supported by the key system. (This check is |
// necessary because |codecs| may be empty.) |
SupportedCodecs container_codec_mask = |
GetCodecMaskForContainer(container_mime_type) & media_type_codec_mask; |
if ((key_system_codec_mask & container_codec_mask) == 0) |
- return false; |
+ return EmeConfigRule::NOT_SUPPORTED; |
// Check that the codecs are supported by the key system and container. |
+ EmeConfigRule support = EmeConfigRule::SUPPORTED; |
for (size_t i = 0; i < codecs.size(); i++) { |
SupportedCodecs codec = GetCodecForString(codecs[i]); |
if ((codec & key_system_codec_mask & container_codec_mask) == 0) |
- return false; |
+ return EmeConfigRule::NOT_SUPPORTED; |
+#if defined(OS_ANDROID) |
+ // We don't support the inverse (only hardware-secure codecs allowed) for |
ddorwin
2015/04/30 18:18:04
The subject of "the inverse" is not clearly specif
sandersd (OOO until July 31)
2015/04/30 19:57:44
Done.
|
+ // simplicity, but such support could be added here. |
ddorwin
2015/04/30 18:18:04
What do you mean "could be added"? Does this mean,
sandersd (OOO until July 31)
2015/04/30 19:57:45
Done.
|
+ if ((codec & key_system_secure_codec_mask) == 0) |
+ support = EmeConfigRule::SECURE_CODECS_NOT_ALLOWED; |
jrummell
2015/04/30 02:08:37
If |codecs| contains 2 codecs, both of which are i
sandersd (OOO until July 31)
2015/04/30 18:19:34
I believe this is correct; and codec that does not
|
+#endif // defined(OS_ANDROID) |
+ |
} |
- return true; |
+ return support; |
} |
EmeConfigRule KeySystemsImpl::GetRobustnessConfigRule( |
@@ -771,6 +784,13 @@ EmeConfigRule KeySystemsImpl::GetRobustnessConfigRule( |
} |
#endif // defined(OS_CHROMEOS) |
ddorwin
2015/04/30 18:18:04
#elif
sandersd (OOO until July 31)
2015/04/30 19:57:44
Done.
|
+#if defined(OS_ANDROID) |
+ if (key_system == kWidevineKeySystem && |
+ robustness > EmeRobustness::SW_SECURE_CRYPTO) { |
+ return EmeConfigRule::SECURE_CODECS_REQUIRED; |
+ } |
+#endif // defined(OS_ANDROID) |
+ |
return EmeConfigRule::SUPPORTED; |
} |