Merge "CDM handles mixed output warnings." into rvc-dev

This commit is contained in:
Alex Dale
2020-03-02 18:35:13 +00:00
committed by Android (Google) Code Review
2 changed files with 28 additions and 2 deletions

View File

@@ -430,6 +430,13 @@ class CryptoSession {
uint32_t api_version_; uint32_t api_version_;
// Stores the most recent error code returned from a call to
// OEMCrypto_DecryptCENC. This is used to reduce the total number of
// error logs for decrypt calls, as there could be a large number of
// same error code in sequence of each other. A value of
// OEMCrypto_SUCCESS indicates that no error have yet occurred.
OEMCryptoResult last_decrypt_error_ = OEMCrypto_SUCCESS;
// In order to avoid creating a deadlock if instantiation needs to take any // In order to avoid creating a deadlock if instantiation needs to take any
// of the CryptoSession static mutexes, |factory_| is protected by its own // of the CryptoSession static mutexes, |factory_| is protected by its own
// mutex that is only used in the two funtions that interact with it. // mutex that is only used in the two funtions that interact with it.
@@ -437,7 +444,7 @@ class CryptoSession {
static std::unique_ptr<CryptoSessionFactory> factory_; static std::unique_ptr<CryptoSessionFactory> factory_;
CORE_DISALLOW_COPY_AND_ASSIGN(CryptoSession); CORE_DISALLOW_COPY_AND_ASSIGN(CryptoSession);
}; }; // class CryptoSession
class CryptoSessionFactory { class CryptoSessionFactory {
public: public:

View File

@@ -1476,10 +1476,29 @@ CdmResponseType CryptoSession::Decrypt(
} }
// Perform decrypt // Perform decrypt
OEMCryptoResult sts = const OEMCryptoResult sts =
DecryptMultipleSamples(oec_samples, params.cipher_mode, oec_pattern); DecryptMultipleSamples(oec_samples, params.cipher_mode, oec_pattern);
if (sts != OEMCrypto_SUCCESS && last_decrypt_error_ != sts) {
// Decrypt errors and warnings are only logged when the error code
// changes. This is in anticipation that if an error code is
// returned, then the same error code is likely to be returned in
// the next call. The calling application may make several more
// decrypt requests before the error is handled by the app.
last_decrypt_error_ = sts;
if (sts == OEMCrypto_WARNING_MIXED_OUTPUT_PROTECTION) {
LOGW(
"OEMCrypto_DecryptCENC is warning of mixed HDCP output protection: "
"oec_session_id = %u",
oec_session_id_);
} else {
LOGE("OEMCrypto_DecryptCENC failed: status = %d", static_cast<int>(sts));
}
}
switch (sts) { switch (sts) {
case OEMCrypto_SUCCESS: case OEMCrypto_SUCCESS:
case OEMCrypto_WARNING_MIXED_OUTPUT_PROTECTION:
return NO_ERROR; return NO_ERROR;
case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES:
return INSUFFICIENT_CRYPTO_RESOURCES_5; return INSUFFICIENT_CRYPTO_RESOURCES_5;