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
|
# CDM top level makefile
|
||||||
#
|
#
|
||||||
@@ -115,13 +113,9 @@ LOCAL_MODULE_OWNER := widevine
|
|||||||
|
|
||||||
LOCAL_PROPRIETARY_MODULE := true
|
LOCAL_PROPRIETARY_MODULE := true
|
||||||
|
|
||||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
|
||||||
include vendor/widevine/libwvdrmengine/cdm/Android.mk
|
include vendor/widevine/libwvdrmengine/cdm/Android.mk
|
||||||
include vendor/widevine/libwvdrmengine/level3/Android.mk
|
include vendor/widevine/libwvdrmengine/level3/Android.mk
|
||||||
include vendor/widevine/libwvdrmengine/mediacrypto/Android.mk
|
include vendor/widevine/libwvdrmengine/mediacrypto/Android.mk
|
||||||
include vendor/widevine/libwvdrmengine/mediadrm/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 := libcdm
|
||||||
LOCAL_MODULE_TAGS := optional
|
LOCAL_MODULE_TAGS := optional
|
||||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
|
||||||
|
|
||||||
include $(BUILD_STATIC_LIBRARY)
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
|||||||
@@ -393,8 +393,8 @@ int64_t PolicyEngine::GetLicenseOrRentalDurationRemaining(
|
|||||||
const int64_t license_expiry_time = GetRentalExpiryTime();
|
const int64_t license_expiry_time = GetRentalExpiryTime();
|
||||||
if (license_expiry_time == NEVER_EXPIRES) return LLONG_MAX;
|
if (license_expiry_time == NEVER_EXPIRES) return LLONG_MAX;
|
||||||
if (license_expiry_time < current_time) return 0;
|
if (license_expiry_time < current_time) return 0;
|
||||||
return std::min(license_expiry_time - current_time,
|
const int64_t policy_license_duration = policy_.license_duration_seconds();
|
||||||
policy_.license_duration_seconds());
|
return std::min(license_expiry_time - current_time, policy_license_duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t PolicyEngine::GetPlaybackDurationRemaining(int64_t current_time) {
|
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_;
|
const int64_t playback_expiry_time = playback_duration + playback_start_time_;
|
||||||
if (playback_expiry_time < current_time) return 0;
|
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,
|
return std::min(playback_expiry_time - current_time,
|
||||||
policy_.playback_duration_seconds());
|
policy_playback_duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PolicyEngine::HasRenewalDelayExpired(int64_t current_time) {
|
bool PolicyEngine::HasRenewalDelayExpired(int64_t current_time) {
|
||||||
|
|||||||
@@ -89,8 +89,13 @@ class WvCdmEngineTest : public testing::Test {
|
|||||||
std::string message;
|
std::string message;
|
||||||
bool ok = url_request.GetResponse(&message);
|
bool ok = url_request.GetResponse(&message);
|
||||||
EXPECT_TRUE(ok);
|
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,
|
ASSERT_EQ(NO_ERROR, cdm_engine_.HandleProvisioningResponse(message, &cert,
|
||||||
&wrapped_key));
|
&wrapped_key))
|
||||||
|
<< "Error response: " << message;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenerateKeyRequest(const std::string& key_id,
|
void GenerateKeyRequest(const std::string& key_id,
|
||||||
|
|||||||
@@ -50,7 +50,4 @@ LOCAL_SHARED_LIBRARIES := \
|
|||||||
|
|
||||||
LOCAL_CFLAGS += -DUNIT_TEST
|
LOCAL_CFLAGS += -DUNIT_TEST
|
||||||
|
|
||||||
|
|
||||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
|
||||||
|
|
||||||
include $(BUILD_EXECUTABLE)
|
include $(BUILD_EXECUTABLE)
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ LOCAL_MODULE := libwvdrmcryptoplugin
|
|||||||
|
|
||||||
LOCAL_MODULE_TAGS := optional
|
LOCAL_MODULE_TAGS := optional
|
||||||
|
|
||||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
|
||||||
|
|
||||||
LOCAL_STATIC_LIBRARIES := libcrypto_static
|
LOCAL_STATIC_LIBRARIES := libcrypto_static
|
||||||
|
|
||||||
include $(BUILD_STATIC_LIBRARY)
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
|||||||
@@ -43,6 +43,4 @@ LOCAL_MODULE := libwvdrmmediacrypto_test
|
|||||||
|
|
||||||
LOCAL_MODULE_TAGS := tests
|
LOCAL_MODULE_TAGS := tests
|
||||||
|
|
||||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
|
||||||
|
|
||||||
include $(BUILD_EXECUTABLE)
|
include $(BUILD_EXECUTABLE)
|
||||||
|
|||||||
@@ -19,6 +19,4 @@ LOCAL_MODULE := libwvdrmdrmplugin
|
|||||||
|
|
||||||
LOCAL_MODULE_TAGS := optional
|
LOCAL_MODULE_TAGS := optional
|
||||||
|
|
||||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
|
||||||
|
|
||||||
include $(BUILD_STATIC_LIBRARY)
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
|||||||
@@ -44,6 +44,4 @@ LOCAL_MODULE := libwvdrmdrmplugin_test
|
|||||||
|
|
||||||
LOCAL_MODULE_TAGS := tests
|
LOCAL_MODULE_TAGS := tests
|
||||||
|
|
||||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
|
||||||
|
|
||||||
include $(BUILD_EXECUTABLE)
|
include $(BUILD_EXECUTABLE)
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ LOCAL_STATIC_LIBRARIES := \
|
|||||||
# Proprietary modules are put in vendor/lib instead of /system/lib.
|
# Proprietary modules are put in vendor/lib instead of /system/lib.
|
||||||
LOCAL_PROPRIETARY_MODULE := true
|
LOCAL_PROPRIETARY_MODULE := true
|
||||||
LOCAL_MODULE := liboemcrypto
|
LOCAL_MODULE := liboemcrypto
|
||||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ include $(CLEAR_VARS)
|
|||||||
LOCAL_MODULE:=oemcrypto_test
|
LOCAL_MODULE:=oemcrypto_test
|
||||||
LOCAL_MODULE_TAGS := tests
|
LOCAL_MODULE_TAGS := tests
|
||||||
|
|
||||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
|
||||||
|
|
||||||
include $(LOCAL_PATH)/common.mk
|
include $(LOCAL_PATH)/common.mk
|
||||||
|
|
||||||
include $(BUILD_EXECUTABLE)
|
include $(BUILD_EXECUTABLE)
|
||||||
|
|||||||
@@ -30,6 +30,4 @@ LOCAL_MODULE := libwvdrmengine_test
|
|||||||
|
|
||||||
LOCAL_MODULE_TAGS := tests
|
LOCAL_MODULE_TAGS := tests
|
||||||
|
|
||||||
LOCAL_MODULE_TARGET_ARCH := arm x86 mips
|
|
||||||
|
|
||||||
include $(BUILD_EXECUTABLE)
|
include $(BUILD_EXECUTABLE)
|
||||||
|
|||||||
Reference in New Issue
Block a user