diff --git a/libwvdrmengine/cdm/core/include/initialization_data.h b/libwvdrmengine/cdm/core/include/initialization_data.h index fb75350f..4252c1fb 100644 --- a/libwvdrmengine/cdm/core/include/initialization_data.h +++ b/libwvdrmengine/cdm/core/include/initialization_data.h @@ -24,6 +24,7 @@ class InitializationData { bool is_cenc() const { return is_cenc_; } bool is_hls() const { return is_hls_; } bool is_webm() const { return is_webm_; } + bool is_audio() const { return is_audio_; } bool IsEmpty() const { return data_.empty(); } @@ -84,6 +85,7 @@ class InitializationData { bool is_cenc_; bool is_hls_; bool is_webm_; + bool is_audio_; std::vector hls_iv_; CdmHlsMethod hls_method_; diff --git a/libwvdrmengine/cdm/core/src/initialization_data.cpp b/libwvdrmengine/cdm/core/src/initialization_data.cpp index 1c52741f..662c353c 100644 --- a/libwvdrmengine/cdm/core/src/initialization_data.cpp +++ b/libwvdrmengine/cdm/core/src/initialization_data.cpp @@ -55,6 +55,7 @@ InitializationData::InitializationData(const std::string& type, is_cenc_(false), is_hls_(false), is_webm_(false), + is_audio_(false), hls_method_(kHlsMethodNone) { if (type == ISO_BMFF_VIDEO_MIME_TYPE || type == ISO_BMFF_AUDIO_MIME_TYPE || type == CENC_INIT_DATA_FORMAT) { @@ -65,6 +66,9 @@ InitializationData::InitializationData(const std::string& type, } else if (type == HLS_INIT_DATA_FORMAT) { is_hls_ = true; } + if (type == ISO_BMFF_AUDIO_MIME_TYPE || type == WEBM_AUDIO_MIME_TYPE) { + is_audio_ = true; + } if (data.size() && is_supported()) { if (is_cenc()) { diff --git a/libwvdrmengine/cdm/include/wv_content_decryption_module.h b/libwvdrmengine/cdm/include/wv_content_decryption_module.h index 848b702e..4f12f545 100644 --- a/libwvdrmengine/cdm/include/wv_content_decryption_module.h +++ b/libwvdrmengine/cdm/include/wv_content_decryption_module.h @@ -34,6 +34,7 @@ class WvContentDecryptionModule : public android::RefBase, public TimerHandler { static bool IsCenc(const std::string& init_data_type); static bool IsWebm(const std::string& init_data_type); static bool IsHls(const std::string& init_data_type); + static bool IsAudio(const std::string& init_data_type); // Session related methods virtual CdmResponseType OpenSession(const CdmKeySystem& key_system, diff --git a/libwvdrmengine/cdm/src/wv_content_decryption_module.cpp b/libwvdrmengine/cdm/src/wv_content_decryption_module.cpp index dfd6ac57..e4dac5b2 100644 --- a/libwvdrmengine/cdm/src/wv_content_decryption_module.cpp +++ b/libwvdrmengine/cdm/src/wv_content_decryption_module.cpp @@ -47,6 +47,10 @@ bool WvContentDecryptionModule::IsHls(const std::string& init_data_type) { return InitializationData(init_data_type).is_hls(); } +bool WvContentDecryptionModule::IsAudio(const std::string& init_data_type) { + return InitializationData(init_data_type).is_audio(); +} + CdmResponseType WvContentDecryptionModule::OpenSession( const CdmKeySystem& key_system, CdmClientPropertySet* property_set, const CdmIdentifier& identifier, WvCdmEventListener* event_listener, diff --git a/libwvdrmengine/src_hidl/WVDrmFactory.cpp b/libwvdrmengine/src_hidl/WVDrmFactory.cpp index 704ef1d1..1a87c9a7 100644 --- a/libwvdrmengine/src_hidl/WVDrmFactory.cpp +++ b/libwvdrmengine/src_hidl/WVDrmFactory.cpp @@ -35,9 +35,22 @@ Return WVDrmFactory::isCryptoSchemeSupported_1_2( const hidl_array& uuid, const hidl_string& initDataType, SecurityLevel level) { - return isWidevineUUID(uuid.data()) && - isContentTypeSupported(initDataType) - /* TODO: jtinker@ b/117104043 && wvcdm::IsSecurityLevelSupported(level)*/; + + if (!isWidevineUUID(uuid.data()) || !isContentTypeSupported(initDataType)) { + return false; + } + + if (wvcdm::WvContentDecryptionModule::IsSecurityLevelSupported( + wvcdm::kSecurityLevelL1)) { + if (wvcdm::WvContentDecryptionModule::IsAudio(initDataType)) { + if (level < SecurityLevel::HW_SECURE_ALL) { + return true; + } + } else { + return true; + } + } + return level <= SecurityLevel::SW_SECURE_DECODE; } Return WVDrmFactory::isContentTypeSupported(