From df0dad531103d901246bc1126d1e8721d56a6b09 Mon Sep 17 00:00:00 2001 From: "John W. Bruce" Date: Wed, 1 Mar 2017 12:34:13 -0800 Subject: [PATCH] Enable 64-bit Android Builds (This is a merge of go/wvgerrit/23686) This patch removes the makefile lines that previously prevented the Widevine DRM Plugin from being built as 64-bit on Android. 64-bit builds are now fully supported. Only one piece of CDM code has had to change. Due to a bug in libprotobuf before v3.0, int64 values from protobufs are technically a different type from int64_t values in code on some 64-bit architectures. Both have the same in-memory representation at runtime but are seen as distinct types by the compiler. The compiler will automatically convert in most places, but template instantiation is not one of them, so a few places that passed a Protobuf int64 directly into a template had to be modified. Please note that tweaks to the mediadrmserver (not covered by this patch) are needed in order for it to run as 64-bit and load 64-bit DRM Plugins. Please also note that, as we have no 64-bit L1 OEMCrypto on any devices, using the 64-bit mediadrmserver and Widevine library will make your device fall back to L3 for the time being. Bug: 18949752 Test: OEMCrypto unit tests Test: Widevine unit tests Test: Google Play (on Marlin) Test: Widevine GTS Tests (on Marlin) Change-Id: Ib6cdf2dd1ff75a1c473cacdc5e22397caa0a656c --- libwvdrmengine/Android.mk | 6 ------ libwvdrmengine/cdm/Android.mk | 1 - libwvdrmengine/cdm/core/src/policy_engine.cpp | 7 ++++--- libwvdrmengine/cdm/core/test/cdm_engine_test.cpp | 7 ++++++- libwvdrmengine/cdm/test/unit-test.mk | 3 --- libwvdrmengine/mediacrypto/Android.mk | 2 -- libwvdrmengine/mediacrypto/test/Android.mk | 2 -- libwvdrmengine/mediadrm/Android.mk | 2 -- libwvdrmengine/mediadrm/test/Android.mk | 2 -- libwvdrmengine/oemcrypto/mock/Android.mk | 1 - libwvdrmengine/oemcrypto/test/Android.mk | 2 -- libwvdrmengine/test/unit/Android.mk | 2 -- 12 files changed, 10 insertions(+), 27 deletions(-) diff --git a/libwvdrmengine/Android.mk b/libwvdrmengine/Android.mk index 3372b7ff..5b6173eb 100644 --- a/libwvdrmengine/Android.mk +++ b/libwvdrmengine/Android.mk @@ -1,5 +1,3 @@ -# This library does not build on mips64. -ifneq (mips64,$(TARGET_ARCH)) # ----------------------------------------------------------------------------- # CDM top level makefile # @@ -115,13 +113,9 @@ LOCAL_MODULE_OWNER := widevine LOCAL_PROPRIETARY_MODULE := true -LOCAL_MODULE_TARGET_ARCH := arm x86 mips - include $(BUILD_SHARED_LIBRARY) include vendor/widevine/libwvdrmengine/cdm/Android.mk include vendor/widevine/libwvdrmengine/level3/Android.mk include vendor/widevine/libwvdrmengine/mediacrypto/Android.mk include vendor/widevine/libwvdrmengine/mediadrm/Android.mk - -endif # if target is mips64. diff --git a/libwvdrmengine/cdm/Android.mk b/libwvdrmengine/cdm/Android.mk index 7ed9968f..67ad53bf 100644 --- a/libwvdrmengine/cdm/Android.mk +++ b/libwvdrmengine/cdm/Android.mk @@ -47,6 +47,5 @@ LOCAL_SRC_FILES := \ LOCAL_MODULE := libcdm LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_TARGET_ARCH := arm x86 mips include $(BUILD_STATIC_LIBRARY) diff --git a/libwvdrmengine/cdm/core/src/policy_engine.cpp b/libwvdrmengine/cdm/core/src/policy_engine.cpp index d4633b3b..6caae554 100644 --- a/libwvdrmengine/cdm/core/src/policy_engine.cpp +++ b/libwvdrmengine/cdm/core/src/policy_engine.cpp @@ -393,8 +393,8 @@ int64_t PolicyEngine::GetLicenseOrRentalDurationRemaining( const int64_t license_expiry_time = GetRentalExpiryTime(); if (license_expiry_time == NEVER_EXPIRES) return LLONG_MAX; if (license_expiry_time < current_time) return 0; - return std::min(license_expiry_time - current_time, - policy_.license_duration_seconds()); + const int64_t policy_license_duration = policy_.license_duration_seconds(); + return std::min(license_expiry_time - current_time, policy_license_duration); } int64_t PolicyEngine::GetPlaybackDurationRemaining(int64_t current_time) { @@ -406,8 +406,9 @@ int64_t PolicyEngine::GetPlaybackDurationRemaining(int64_t current_time) { const int64_t playback_expiry_time = playback_duration + playback_start_time_; if (playback_expiry_time < current_time) return 0; + const int64_t policy_playback_duration = policy_.playback_duration_seconds(); return std::min(playback_expiry_time - current_time, - policy_.playback_duration_seconds()); + policy_playback_duration); } bool PolicyEngine::HasRenewalDelayExpired(int64_t current_time) { diff --git a/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp b/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp index a70109ed..c9dbb5ec 100644 --- a/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp +++ b/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp @@ -89,8 +89,13 @@ class WvCdmEngineTest : public testing::Test { std::string message; bool ok = url_request.GetResponse(&message); EXPECT_TRUE(ok); + // One of many reasons a device might fail to provision is that the server + // rejects its keybox. In that case, we usually see an error of + // CERT_PROVISIONING_RESPONSE_ERROR_1. The error response may help + // somebody look through the server logs for more clues. ASSERT_EQ(NO_ERROR, cdm_engine_.HandleProvisioningResponse(message, &cert, - &wrapped_key)); + &wrapped_key)) + << "Error response: " << message; } void GenerateKeyRequest(const std::string& key_id, diff --git a/libwvdrmengine/cdm/test/unit-test.mk b/libwvdrmengine/cdm/test/unit-test.mk index 2eefd04d..ad72462d 100644 --- a/libwvdrmengine/cdm/test/unit-test.mk +++ b/libwvdrmengine/cdm/test/unit-test.mk @@ -50,7 +50,4 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_CFLAGS += -DUNIT_TEST - -LOCAL_MODULE_TARGET_ARCH := arm x86 mips - include $(BUILD_EXECUTABLE) diff --git a/libwvdrmengine/mediacrypto/Android.mk b/libwvdrmengine/mediacrypto/Android.mk index 621cb121..9482cfb5 100644 --- a/libwvdrmengine/mediacrypto/Android.mk +++ b/libwvdrmengine/mediacrypto/Android.mk @@ -18,8 +18,6 @@ LOCAL_MODULE := libwvdrmcryptoplugin LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_TARGET_ARCH := arm x86 mips - LOCAL_STATIC_LIBRARIES := libcrypto_static include $(BUILD_STATIC_LIBRARY) diff --git a/libwvdrmengine/mediacrypto/test/Android.mk b/libwvdrmengine/mediacrypto/test/Android.mk index 927c8601..351f8c90 100644 --- a/libwvdrmengine/mediacrypto/test/Android.mk +++ b/libwvdrmengine/mediacrypto/test/Android.mk @@ -43,6 +43,4 @@ LOCAL_MODULE := libwvdrmmediacrypto_test LOCAL_MODULE_TAGS := tests -LOCAL_MODULE_TARGET_ARCH := arm x86 mips - include $(BUILD_EXECUTABLE) diff --git a/libwvdrmengine/mediadrm/Android.mk b/libwvdrmengine/mediadrm/Android.mk index 497fe67f..27d202fc 100644 --- a/libwvdrmengine/mediadrm/Android.mk +++ b/libwvdrmengine/mediadrm/Android.mk @@ -19,6 +19,4 @@ LOCAL_MODULE := libwvdrmdrmplugin LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_TARGET_ARCH := arm x86 mips - include $(BUILD_STATIC_LIBRARY) diff --git a/libwvdrmengine/mediadrm/test/Android.mk b/libwvdrmengine/mediadrm/test/Android.mk index ca56aab4..13ec9148 100644 --- a/libwvdrmengine/mediadrm/test/Android.mk +++ b/libwvdrmengine/mediadrm/test/Android.mk @@ -44,6 +44,4 @@ LOCAL_MODULE := libwvdrmdrmplugin_test LOCAL_MODULE_TAGS := tests -LOCAL_MODULE_TARGET_ARCH := arm x86 mips - include $(BUILD_EXECUTABLE) diff --git a/libwvdrmengine/oemcrypto/mock/Android.mk b/libwvdrmengine/oemcrypto/mock/Android.mk index 493cc48e..8f0270ef 100644 --- a/libwvdrmengine/oemcrypto/mock/Android.mk +++ b/libwvdrmengine/oemcrypto/mock/Android.mk @@ -44,7 +44,6 @@ LOCAL_STATIC_LIBRARIES := \ # Proprietary modules are put in vendor/lib instead of /system/lib. LOCAL_PROPRIETARY_MODULE := true LOCAL_MODULE := liboemcrypto -LOCAL_MODULE_TARGET_ARCH := arm x86 mips include $(BUILD_SHARED_LIBRARY) diff --git a/libwvdrmengine/oemcrypto/test/Android.mk b/libwvdrmengine/oemcrypto/test/Android.mk index 56e6fff6..143dd25b 100644 --- a/libwvdrmengine/oemcrypto/test/Android.mk +++ b/libwvdrmengine/oemcrypto/test/Android.mk @@ -5,8 +5,6 @@ include $(CLEAR_VARS) LOCAL_MODULE:=oemcrypto_test LOCAL_MODULE_TAGS := tests -LOCAL_MODULE_TARGET_ARCH := arm x86 mips - include $(LOCAL_PATH)/common.mk include $(BUILD_EXECUTABLE) diff --git a/libwvdrmengine/test/unit/Android.mk b/libwvdrmengine/test/unit/Android.mk index 741c744a..f809b511 100644 --- a/libwvdrmengine/test/unit/Android.mk +++ b/libwvdrmengine/test/unit/Android.mk @@ -30,6 +30,4 @@ LOCAL_MODULE := libwvdrmengine_test LOCAL_MODULE_TAGS := tests -LOCAL_MODULE_TARGET_ARCH := arm x86 mips - include $(BUILD_EXECUTABLE)