Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(638)

Unified Diff: media/base/key_systems.cc

Issue 1106263004: Support Android secure codecs in requestMediaKeySystemAccess(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Include build_config.h. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/key_systems.h ('k') | media/base/key_systems_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/key_systems.cc
diff --git a/media/base/key_systems.cc b/media/base/key_systems.cc
index f89992572ea6258a481fdeba97157be69993e1cf..fbff37d55dfbb64e6c22923789f854a3502f1402 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,43 @@ 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)
+ // Check whether the codec supports a hardware-secure mode; if not, indicate
+ // that hardware-secure codecs are not available for all listed codecs.
+ // Because the check for regular codec support is early-exit, we don't have
+ // to consider codecs that are only supported in hardware-secure mode. We
+ // could do so, and make use of SECURE_CODECS_REQUIRED, if it turns out that
+ // hardware-secure-only codecs actually exist and are useful.
+ if ((codec & key_system_secure_codec_mask) == 0)
+ support = EmeConfigRule::SECURE_CODECS_NOT_ALLOWED;
+#endif // defined(OS_ANDROID)
+
}
- return true;
+ return support;
}
EmeConfigRule KeySystemsImpl::GetRobustnessConfigRule(
@@ -754,8 +771,8 @@ EmeConfigRule KeySystemsImpl::GetRobustnessConfigRule(
return EmeConfigRule::NOT_SUPPORTED;
}
-#if defined(OS_CHROMEOS)
if (key_system == kWidevineKeySystem) {
+#if defined(OS_CHROMEOS)
// Hardware security requires remote attestation.
if (robustness >= EmeRobustness::HW_SECURE_CRYPTO)
return EmeConfigRule::IDENTIFIER_REQUIRED;
@@ -768,8 +785,11 @@ EmeConfigRule KeySystemsImpl::GetRobustnessConfigRule(
max_robustness == EmeRobustness::HW_SECURE_ALL) {
return EmeConfigRule::IDENTIFIER_RECOMMENDED;
}
- }
+#elif defined(OS_ANDROID)
+ if (robustness > EmeRobustness::SW_SECURE_CRYPTO)
+ return EmeConfigRule::SECURE_CODECS_REQUIRED;
#endif // defined(OS_CHROMEOS)
+ }
return EmeConfigRule::SUPPORTED;
}
« no previous file with comments | « media/base/key_systems.h ('k') | media/base/key_systems_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698