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
This commit is contained in:
John W. Bruce
2017-03-01 12:34:13 -08:00
committed by John Bruce
parent 848d851441
commit df0dad5311
12 changed files with 10 additions and 27 deletions

View File

@@ -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.

View File

@@ -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)

View File

@@ -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) {

View File

@@ -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,

View File

@@ -50,7 +50,4 @@ LOCAL_SHARED_LIBRARIES := \
LOCAL_CFLAGS += -DUNIT_TEST
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
include $(BUILD_EXECUTABLE)

View File

@@ -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)

View File

@@ -43,6 +43,4 @@ LOCAL_MODULE := libwvdrmmediacrypto_test
LOCAL_MODULE_TAGS := tests
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
include $(BUILD_EXECUTABLE)

View File

@@ -19,6 +19,4 @@ LOCAL_MODULE := libwvdrmdrmplugin
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
include $(BUILD_STATIC_LIBRARY)

View File

@@ -44,6 +44,4 @@ LOCAL_MODULE := libwvdrmdrmplugin_test
LOCAL_MODULE_TAGS := tests
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
include $(BUILD_EXECUTABLE)

View File

@@ -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)

View File

@@ -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)

View File

@@ -30,6 +30,4 @@ LOCAL_MODULE := libwvdrmengine_test
LOCAL_MODULE_TAGS := tests
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
include $(BUILD_EXECUTABLE)