| Index: components/cdm/renderer/android_key_systems.cc
|
| diff --git a/components/cdm/renderer/android_key_systems.cc b/components/cdm/renderer/android_key_systems.cc
|
| index 56d2aec617265331d7181e11a3a9b903e5409374..8e4f7529fff0123a8980727fa2de3b3d18ee1921 100644
|
| --- a/components/cdm/renderer/android_key_systems.cc
|
| +++ b/components/cdm/renderer/android_key_systems.cc
|
| @@ -10,21 +10,89 @@
|
| #include "base/command_line.h"
|
| #include "base/logging.h"
|
| #include "components/cdm/common/cdm_messages_android.h"
|
| -#include "components/cdm/renderer/widevine_key_systems.h"
|
| +#include "components/cdm/renderer/widevine_key_system_properties.h"
|
| #include "content/public/renderer/render_thread.h"
|
| #include "media/base/eme_constants.h"
|
| #include "media/base/media_switches.h"
|
|
|
| #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR.
|
|
|
| +using media::EmeConfigRule;
|
| using media::EmeFeatureSupport;
|
| +using media::EmeInitDataType;
|
| using media::EmeRobustness;
|
| using media::EmeSessionTypeSupport;
|
| -using media::KeySystemInfo;
|
| +using media::KeySystemProperties;
|
| using media::SupportedCodecs;
|
|
|
| namespace cdm {
|
|
|
| +namespace {
|
| +
|
| +// Implementation of KeySystemProperties for platform-supported key systems.
|
| +// Assumes that platform key systems support no features but can and will
|
| +// make use of persistence and identifiers.
|
| +class AndroidPlatformKeySystemProperties : public KeySystemProperties {
|
| + public:
|
| + AndroidPlatformKeySystemProperties(const std::string& name,
|
| + SupportedCodecs supported_codecs)
|
| + : name_(name), supported_codecs_(supported_codecs) {}
|
| +
|
| + std::string GetKeySystemName() const override { return name_; }
|
| +
|
| + bool IsSupportedInitDataType(EmeInitDataType init_data_type) const override {
|
| + // Here we assume that support for a container implies support for the
|
| + // associated initialization data type. KeySystems handles validating
|
| + // |init_data_type| x |container| pairings.
|
| + switch (init_data_type) {
|
| + case EmeInitDataType::WEBM:
|
| + return (supported_codecs_ & media::EME_CODEC_WEBM_ALL) != 0;
|
| + case EmeInitDataType::CENC:
|
| +#if defined(USE_PROPRIETARY_CODECS)
|
| + return (supported_codecs_ & media::EME_CODEC_MP4_ALL) != 0;
|
| +#else
|
| + return false;
|
| +#endif // defined(USE_PROPRIETARY_CODECS)
|
| + case EmeInitDataType::KEYIDS:
|
| + case EmeInitDataType::UNKNOWN:
|
| + return false;
|
| + }
|
| + NOTREACHED();
|
| + return false;
|
| + }
|
| +
|
| + SupportedCodecs GetSupportedCodecs() const override {
|
| + return supported_codecs_;
|
| + }
|
| +
|
| + EmeConfigRule GetRobustnessConfigRule(
|
| + media::EmeMediaType media_type,
|
| + const std::string& requested_robustness) const override {
|
| + return requested_robustness.empty() ? EmeConfigRule::SUPPORTED
|
| + : EmeConfigRule::NOT_SUPPORTED;
|
| + }
|
| +
|
| + EmeSessionTypeSupport GetPersistentLicenseSessionSupport() const override {
|
| + return EmeSessionTypeSupport::NOT_SUPPORTED;
|
| + }
|
| + EmeSessionTypeSupport GetPersistentReleaseMessageSessionSupport()
|
| + const override {
|
| + return EmeSessionTypeSupport::NOT_SUPPORTED;
|
| + }
|
| + EmeFeatureSupport GetPersistentStateSupport() const override {
|
| + return EmeFeatureSupport::ALWAYS_ENABLED;
|
| + }
|
| + EmeFeatureSupport GetDistinctiveIdentifierSupport() const override {
|
| + return EmeFeatureSupport::ALWAYS_ENABLED;
|
| + }
|
| +
|
| + private:
|
| + const std::string name_;
|
| + const SupportedCodecs supported_codecs_;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| static SupportedKeySystemResponse QueryKeySystemSupport(
|
| const std::string& key_system) {
|
| SupportedKeySystemRequest request;
|
| @@ -41,7 +109,8 @@ static SupportedKeySystemResponse QueryKeySystemSupport(
|
| return response;
|
| }
|
|
|
| -void AddAndroidWidevine(std::vector<KeySystemInfo>* concrete_key_systems) {
|
| +void AddAndroidWidevine(
|
| + std::vector<std::unique_ptr<KeySystemProperties>>* concrete_key_systems) {
|
| SupportedKeySystemResponse response = QueryKeySystemSupport(
|
| kWidevineKeySystem);
|
|
|
| @@ -50,7 +119,7 @@ void AddAndroidWidevine(std::vector<KeySystemInfo>* concrete_key_systems) {
|
| // persistence-based features are supported.
|
|
|
| if (response.compositing_codecs != media::EME_CODEC_NONE) {
|
| - AddWidevineWithCodecs(
|
| + concrete_key_systems->emplace_back(new WidevineKeySystemProperties(
|
| response.compositing_codecs, // Regular codecs.
|
| response.non_compositing_codecs, // Hardware-secure codecs.
|
| EmeRobustness::HW_SECURE_CRYPTO, // Max audio robustness.
|
| @@ -58,8 +127,7 @@ void AddAndroidWidevine(std::vector<KeySystemInfo>* concrete_key_systems) {
|
| EmeSessionTypeSupport::NOT_SUPPORTED, // persistent-license.
|
| EmeSessionTypeSupport::NOT_SUPPORTED, // persistent-release-message.
|
| EmeFeatureSupport::ALWAYS_ENABLED, // Persistent state.
|
| - EmeFeatureSupport::ALWAYS_ENABLED, // Distinctive identifier.
|
| - concrete_key_systems);
|
| + EmeFeatureSupport::ALWAYS_ENABLED)); // Distinctive identifier.
|
| } else {
|
| // It doesn't make sense to support secure codecs but not regular codecs.
|
| DCHECK(response.non_compositing_codecs == media::EME_CODEC_NONE);
|
| @@ -67,7 +135,7 @@ void AddAndroidWidevine(std::vector<KeySystemInfo>* concrete_key_systems) {
|
| }
|
|
|
| void AddAndroidPlatformKeySystems(
|
| - std::vector<KeySystemInfo>* concrete_key_systems) {
|
| + std::vector<std::unique_ptr<KeySystemProperties>>* concrete_key_systems) {
|
| std::vector<std::string> key_system_names;
|
| content::RenderThread::Get()->Send(
|
| new ChromeViewHostMsg_GetPlatformKeySystemNames(&key_system_names));
|
| @@ -76,30 +144,8 @@ void AddAndroidPlatformKeySystems(
|
| it != key_system_names.end(); ++it) {
|
| SupportedKeySystemResponse response = QueryKeySystemSupport(*it);
|
| if (response.compositing_codecs != media::EME_CODEC_NONE) {
|
| - KeySystemInfo info;
|
| - info.key_system = *it;
|
| - info.supported_codecs = response.compositing_codecs;
|
| - // Here we assume that support for a container implies support for the
|
| - // 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::kInitDataTypeMaskWebM;
|
| -#if defined(USE_PROPRIETARY_CODECS)
|
| - if (response.compositing_codecs & media::EME_CODEC_MP4_ALL)
|
| - info.supported_init_data_types |= media::kInitDataTypeMaskCenc;
|
| -#endif // defined(USE_PROPRIETARY_CODECS)
|
| - info.max_audio_robustness = EmeRobustness::EMPTY;
|
| - info.max_video_robustness = EmeRobustness::EMPTY;
|
| - // Assume that platform key systems support no features but can and will
|
| - // make use of persistence and identifiers.
|
| - info.persistent_license_support =
|
| - media::EmeSessionTypeSupport::NOT_SUPPORTED;
|
| - info.persistent_release_message_support =
|
| - media::EmeSessionTypeSupport::NOT_SUPPORTED;
|
| - info.persistent_state_support = media::EmeFeatureSupport::ALWAYS_ENABLED;
|
| - info.distinctive_identifier_support =
|
| - media::EmeFeatureSupport::ALWAYS_ENABLED;
|
| - concrete_key_systems->push_back(info);
|
| + concrete_key_systems->emplace_back(new AndroidPlatformKeySystemProperties(
|
| + *it, response.compositing_codecs));
|
| }
|
| }
|
| }
|
|
|