Combined Decrypt Calls
(This is a merge of http://go/wvgerrit/93829, http://go/wvgerrit/93830, http://go/wvgerrit/93832, http://go/wvgerrit/93833, and http://go/wvgerrit/93834 from the Widevine repo.) This implements the CDM code changes necessary to take advantage of Combined Decrypt Calls on OEMCrypto v16. The result of this is that WVCryptoPlugin is much lighter now because it can pass the full sample down to the core in one call, but CryptoSession is heavier, as it now has to handle more complex fallback logic when devices can't handle multiple subsamples at once. This patch also removes support for the 'cens' and 'cbc1' schema, which are being dropped in OEMCrypto v16. This fixes an overflow in the code for handling those schemas by removing it entirely. This patch also fixes the "in chunks" legacy decrypt path to use larger chunk sizes on devices with higher resource rating tiers. Bug: 135285640 Bug: 123435824 Bug: 138584971 Bug: 139257871 Bug: 78289910 Bug: 149361893 Test: no new CE CDM Unit Test failures Test: Google Play plays Test: Netflix plays Test: no new GTS failures Change-Id: Ic4952c9fa3bc7fd5ed08698e88254380a7a18514
This commit is contained in:
@@ -95,8 +95,8 @@ class MockCdmEngineImpl : public CdmEngine {
|
||||
CdmResponseType(const std::string&, const CdmSecureStopId&));
|
||||
MOCK_METHOD1(ReleaseUsageInfo,
|
||||
CdmResponseType(const CdmUsageInfoReleaseMessage&));
|
||||
MOCK_METHOD2(Decrypt, CdmResponseType(const CdmSessionId&,
|
||||
const CdmDecryptionParameters&));
|
||||
MOCK_METHOD2(DecryptV16, CdmResponseType(const CdmSessionId&,
|
||||
const CdmDecryptionParametersV16&));
|
||||
MOCK_METHOD2(FindSessionForKey, bool(const KeyId&, CdmSessionId*));
|
||||
};
|
||||
|
||||
@@ -491,12 +491,12 @@ TEST_F(WvCdmEngineMetricsImplTest, FindSessionForKey) {
|
||||
}
|
||||
|
||||
TEST_F(WvCdmEngineMetricsImplTest, Decrypt) {
|
||||
CdmDecryptionParameters parameters;
|
||||
EXPECT_CALL(*test_cdm_metrics_engine_, Decrypt(Eq("fake session id"), _))
|
||||
CdmDecryptionParametersV16 parameters;
|
||||
EXPECT_CALL(*test_cdm_metrics_engine_, DecryptV16(Eq("fake session id"), _))
|
||||
.WillOnce(Return(wvcdm::UNKNOWN_ERROR));
|
||||
|
||||
ASSERT_EQ(wvcdm::UNKNOWN_ERROR,
|
||||
test_cdm_metrics_engine_->Decrypt("fake session id", parameters));
|
||||
ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->DecryptV16(
|
||||
"fake session id", parameters));
|
||||
|
||||
drm_metrics::WvCdmMetrics metrics_proto;
|
||||
test_cdm_metrics_engine_->GetMetricsSnapshot(&metrics_proto);
|
||||
|
||||
@@ -23,6 +23,12 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
|
||||
case ANALOG_OUTPUT_ERROR:
|
||||
*os << "ANALOG_OUTPUT_ERROR";
|
||||
break;
|
||||
case CANNOT_DECRYPT_ZERO_SAMPLES:
|
||||
*os << "CANNOT_DECRYPT_ZERO_SAMPLES";
|
||||
break;
|
||||
case CANNOT_DECRYPT_ZERO_SUBSAMPLES:
|
||||
*os << "CANNOT_DECRYPT_ZERO_SUBSAMPLES";
|
||||
break;
|
||||
case CENC_INIT_DATA_UNAVAILABLE:
|
||||
*os << "CENC_INIT_DATA_UNAVAILABLE";
|
||||
break;
|
||||
@@ -314,6 +320,9 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
|
||||
case INVALID_DEVICE_CERTIFICATE_TYPE:
|
||||
*os << "INVALID_DEVICE_CERTIFICATE_TYPE";
|
||||
break;
|
||||
case INVALID_IV_SIZE:
|
||||
*os << "INVALID_IV_SIZE";
|
||||
break;
|
||||
case INVALID_KEY_SYSTEM:
|
||||
*os << "INVALID_KEY_SYSTEM";
|
||||
break;
|
||||
@@ -725,6 +734,9 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
|
||||
case RSA_SIGNATURE_GENERATION_ERROR:
|
||||
*os << "RSA_SIGNATURE_GENERATION_ERROR";
|
||||
break;
|
||||
case SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH:
|
||||
*os << "SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH";
|
||||
break;
|
||||
case SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY:
|
||||
*os << "SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY";
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user