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:
committed by
John Bruce
parent
848d851441
commit
df0dad5311
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -50,7 +50,4 @@ LOCAL_SHARED_LIBRARIES := \
|
||||
|
||||
LOCAL_CFLAGS += -DUNIT_TEST
|
||||
|
||||
|
||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
||||
|
||||
include $(BUILD_EXECUTABLE)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -43,6 +43,4 @@ LOCAL_MODULE := libwvdrmmediacrypto_test
|
||||
|
||||
LOCAL_MODULE_TAGS := tests
|
||||
|
||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
||||
|
||||
include $(BUILD_EXECUTABLE)
|
||||
|
||||
@@ -19,6 +19,4 @@ LOCAL_MODULE := libwvdrmdrmplugin
|
||||
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
|
||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
@@ -44,6 +44,4 @@ LOCAL_MODULE := libwvdrmdrmplugin_test
|
||||
|
||||
LOCAL_MODULE_TAGS := tests
|
||||
|
||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
||||
|
||||
include $(BUILD_EXECUTABLE)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -30,6 +30,4 @@ LOCAL_MODULE := libwvdrmengine_test
|
||||
|
||||
LOCAL_MODULE_TAGS := tests
|
||||
|
||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
||||
|
||||
include $(BUILD_EXECUTABLE)
|
||||
|
||||
Reference in New Issue
Block a user