Implement isCryptoSchemeSupported in the Widevine drm plugin

Support overloaded isCryptoSchemeSupported method that
accepts a security level parameter

bug:110701831
test: cts media test cases, widevine integration tests, gts media tests

Change-Id: Ia84e40ff8d4f13fc06478e338e3238061e283dac
This commit is contained in:
Jeff Tinker
2019-01-25 22:06:22 -08:00
parent 54104c7a22
commit 8084bd5375
5 changed files with 27 additions and 3 deletions

View File

@@ -24,6 +24,7 @@ class InitializationData {
bool is_cenc() const { return is_cenc_; } bool is_cenc() const { return is_cenc_; }
bool is_hls() const { return is_hls_; } bool is_hls() const { return is_hls_; }
bool is_webm() const { return is_webm_; } bool is_webm() const { return is_webm_; }
bool is_audio() const { return is_audio_; }
bool IsEmpty() const { return data_.empty(); } bool IsEmpty() const { return data_.empty(); }
@@ -84,6 +85,7 @@ class InitializationData {
bool is_cenc_; bool is_cenc_;
bool is_hls_; bool is_hls_;
bool is_webm_; bool is_webm_;
bool is_audio_;
std::vector<uint8_t> hls_iv_; std::vector<uint8_t> hls_iv_;
CdmHlsMethod hls_method_; CdmHlsMethod hls_method_;

View File

@@ -55,6 +55,7 @@ InitializationData::InitializationData(const std::string& type,
is_cenc_(false), is_cenc_(false),
is_hls_(false), is_hls_(false),
is_webm_(false), is_webm_(false),
is_audio_(false),
hls_method_(kHlsMethodNone) { hls_method_(kHlsMethodNone) {
if (type == ISO_BMFF_VIDEO_MIME_TYPE || type == ISO_BMFF_AUDIO_MIME_TYPE || if (type == ISO_BMFF_VIDEO_MIME_TYPE || type == ISO_BMFF_AUDIO_MIME_TYPE ||
type == CENC_INIT_DATA_FORMAT) { type == CENC_INIT_DATA_FORMAT) {
@@ -65,6 +66,9 @@ InitializationData::InitializationData(const std::string& type,
} else if (type == HLS_INIT_DATA_FORMAT) { } else if (type == HLS_INIT_DATA_FORMAT) {
is_hls_ = true; is_hls_ = true;
} }
if (type == ISO_BMFF_AUDIO_MIME_TYPE || type == WEBM_AUDIO_MIME_TYPE) {
is_audio_ = true;
}
if (data.size() && is_supported()) { if (data.size() && is_supported()) {
if (is_cenc()) { if (is_cenc()) {

View File

@@ -34,6 +34,7 @@ class WvContentDecryptionModule : public android::RefBase, public TimerHandler {
static bool IsCenc(const std::string& init_data_type); static bool IsCenc(const std::string& init_data_type);
static bool IsWebm(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 IsHls(const std::string& init_data_type);
static bool IsAudio(const std::string& init_data_type);
// Session related methods // Session related methods
virtual CdmResponseType OpenSession(const CdmKeySystem& key_system, virtual CdmResponseType OpenSession(const CdmKeySystem& key_system,

View File

@@ -47,6 +47,10 @@ bool WvContentDecryptionModule::IsHls(const std::string& init_data_type) {
return InitializationData(init_data_type).is_hls(); 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( CdmResponseType WvContentDecryptionModule::OpenSession(
const CdmKeySystem& key_system, CdmClientPropertySet* property_set, const CdmKeySystem& key_system, CdmClientPropertySet* property_set,
const CdmIdentifier& identifier, WvCdmEventListener* event_listener, const CdmIdentifier& identifier, WvCdmEventListener* event_listener,

View File

@@ -35,9 +35,22 @@ Return<bool> WVDrmFactory::isCryptoSchemeSupported_1_2(
const hidl_array<uint8_t, 16>& uuid, const hidl_array<uint8_t, 16>& uuid,
const hidl_string& initDataType, const hidl_string& initDataType,
SecurityLevel level) { SecurityLevel level) {
return isWidevineUUID(uuid.data()) &&
isContentTypeSupported(initDataType) if (!isWidevineUUID(uuid.data()) || !isContentTypeSupported(initDataType)) {
/* TODO: jtinker@ b/117104043 && wvcdm::IsSecurityLevelSupported(level)*/; 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<bool> WVDrmFactory::isContentTypeSupported( Return<bool> WVDrmFactory::isContentTypeSupported(