diff --git a/libwvdrmengine/cdm/core/include/crypto_session.h b/libwvdrmengine/cdm/core/include/crypto_session.h index 588ea58a..f5ca67bb 100644 --- a/libwvdrmengine/cdm/core/include/crypto_session.h +++ b/libwvdrmengine/cdm/core/include/crypto_session.h @@ -92,6 +92,8 @@ class CryptoSession { bool is_destination_buffer_type_valid_; SecurityLevel requested_security_level_; + KeyId key_id_; + CORE_DISALLOW_COPY_AND_ASSIGN(CryptoSession); }; diff --git a/libwvdrmengine/cdm/core/src/cdm_session.cpp b/libwvdrmengine/cdm/core/src/cdm_session.cpp index 4ecce4a5..e3e12e75 100644 --- a/libwvdrmengine/cdm/core/src/cdm_session.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_session.cpp @@ -272,17 +272,6 @@ CdmResponseType CdmSession::Decrypt(const CdmDecryptionParameters& params) { if (crypto_session_.get() == NULL || !crypto_session_->IsOpen()) return UNKNOWN_ERROR; - // Check if key needs to be selected - if (params.is_encrypted) { - if (key_id_.compare(*params.key_id) != 0) { - if (crypto_session_->SelectKey(*params.key_id)) { - key_id_ = *params.key_id; - } else { - return NEED_KEY; - } - } - } - return crypto_session_->Decrypt(params); } diff --git a/libwvdrmengine/cdm/core/src/crypto_session.cpp b/libwvdrmengine/cdm/core/src/crypto_session.cpp index e4b6d2f3..fa23002f 100755 --- a/libwvdrmengine/cdm/core/src/crypto_session.cpp +++ b/libwvdrmengine/cdm/core/src/crypto_session.cpp @@ -433,7 +433,6 @@ bool CryptoSession::RefreshKeys(const std::string& message, } bool CryptoSession::SelectKey(const std::string& key_id) { - AutoLock auto_lock(crypto_lock_); const uint8_t* key_id_string = reinterpret_cast(key_id.data()); @@ -550,6 +549,18 @@ CdmResponseType CryptoSession::Decrypt(const CdmDecryptionParameters& params) { if (!SetDestinationBufferType()) return UNKNOWN_ERROR; } + AutoLock auto_lock(crypto_lock_); + // Check if key needs to be selected + if (params.is_encrypted) { + if (key_id_.compare(*params.key_id) != 0) { + if (SelectKey(*params.key_id)) { + key_id_ = *params.key_id; + } else { + return NEED_KEY; + } + } + } + OEMCrypto_DestBufferDesc buffer_descriptor; buffer_descriptor.type = params.is_secure ? destination_buffer_type_ : OEMCrypto_BufferType_Clear;