From dc9809f7c36538796dc3becad68a9fac5a8ebf40 Mon Sep 17 00:00:00 2001 From: Robert Shih Date: Fri, 27 Mar 2020 12:03:22 -0700 Subject: [PATCH 1/2] CryptoSession: handle 0-length buffer in DecryptSample In `Combine Decrypt Calls to OEMCrypto`, OEMCrypto_ERROR_BUFFER_TOO_LARGE is used as the default error code to signal fallback to legacy decrypt (sending subsamples separately). The error code would not be updated if no calls to OEMCrypto were made (e.g. 0-length buffers). This change resets error code to OEMCrypto_SUCCESS after fall back to legacy decrypt. Consequently, buffers that do no require OEMCrypto calls would return OEMCrypto_SUCCESS. Merge of http://go/wvgerrit/96743 Bug: 150188155 Test: GtsMediaTestCases Test: DashTest#testWidevineH264AdaptiveWithRendererDisabling Change-Id: Ib23803c51f16bc809bda5c2720e628e81f1df1dc --- libwvdrmengine/cdm/core/src/crypto_session.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libwvdrmengine/cdm/core/src/crypto_session.cpp b/libwvdrmengine/cdm/core/src/crypto_session.cpp index 0563e4e9..fe0b600e 100644 --- a/libwvdrmengine/cdm/core/src/crypto_session.cpp +++ b/libwvdrmengine/cdm/core/src/crypto_session.cpp @@ -2692,6 +2692,7 @@ OEMCryptoResult CryptoSession::DecryptSample( if (sts == OEMCrypto_ERROR_BUFFER_TOO_LARGE) { // Fall back to sending each subsample region individually + sts = OEMCrypto_SUCCESS; OEMCrypto_SampleDescription fake_sample = sample; for (size_t i = 0; i < sample.subsamples_length; ++i) { const OEMCrypto_SubSampleDescription& original_subsample = From 07f40d1bedf46500dbb0e29699d7c5427f236328 Mon Sep 17 00:00:00 2001 From: Robert Shih Date: Thu, 26 Mar 2020 13:54:05 -0700 Subject: [PATCH 2/2] CryptoSession: Propagate err from `GetSystemIdInternal` in `Open` Merge of http://go/wvgerrit/96509 Bug: 151231204 Test: GtsMediaTestCases Change-Id: Ib29691fcea1c9d5fcfa981caf3e5bdab00cbb0bf --- libwvdrmengine/cdm/core/src/crypto_session.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libwvdrmengine/cdm/core/src/crypto_session.cpp b/libwvdrmengine/cdm/core/src/crypto_session.cpp index dee93007..c7fc91a2 100644 --- a/libwvdrmengine/cdm/core/src/crypto_session.cpp +++ b/libwvdrmengine/cdm/core/src/crypto_session.cpp @@ -748,12 +748,13 @@ CdmResponseType CryptoSession::Open(SecurityLevel requested_security_level) { open_ = true; // Get System ID and save it. - if (GetSystemIdInternal(&system_id_) == NO_ERROR) { + result = GetSystemIdInternal(&system_id_); + if (result == NO_ERROR) { metrics_->crypto_session_system_id_.Record(system_id_); } else { LOGE("Failed to fetch system ID"); - metrics_->crypto_session_system_id_.SetError(LOAD_SYSTEM_ID_ERROR); - return LOAD_SYSTEM_ID_ERROR; + metrics_->crypto_session_system_id_.SetError(result); + return result; } // Set up request ID