libwvhidl: upgrade to android.hardware.drm@1.4

Bug: 136119370
Test: GtsMediaTestCases MediaDrmTest#testRequiresSecureDecoder
Change-Id: Iaaa7c225c0056904b5fd98c4557ec47f661b2c7d
This commit is contained in:
Robert Shih
2021-01-19 05:52:59 -08:00
parent 5eb7d21fd5
commit 56195b41c6
27 changed files with 204 additions and 49 deletions

View File

@@ -93,6 +93,7 @@ cc_defaults {
"android.hardware.drm@1.1",
"android.hardware.drm@1.2",
"android.hardware.drm@1.3",
"android.hardware.drm@1.4",
"libbase",
"libhidlbase",
"liblog",
@@ -168,6 +169,39 @@ cc_binary {
}
// ----------------------------------------------------------------------------
// Builds android.hardware.drm@1.4-service.widevine
//
cc_binary {
name: "android.hardware.drm@1.4-service.widevine",
defaults: [
"common_widevine_service-multilib-first",
"common_widevine_service-multilib-defaults",
],
srcs: ["src_hidl/service.cpp"],
init_rc: ["src_hidl/android.hardware.drm@1.4-service.widevine.rc"],
vintf_fragments: ["manifest_android.hardware.drm@1.4-service.widevine.xml"],
}
// ----------------------------------------------------------------------------
// Builds android.hardware.drm@1.4-service-lazy.widevine
//
cc_binary {
name: "android.hardware.drm@1.4-service-lazy.widevine",
defaults: [
"common_widevine_service-multilib-first",
"common_widevine_service-multilib-defaults",
],
srcs: ["src_hidl/serviceLazy.cpp"],
overrides: ["android.hardware.drm@1.4-service.widevine"],
init_rc: ["src_hidl/android.hardware.drm@1.4-service-lazy.widevine.rc"],
vintf_fragments: ["manifest_android.hardware.drm@1.4-service.widevine.xml"],
}
// ----------------------------------------------------------------------------
// Builds libcdm_utils.a
//
@@ -323,6 +357,7 @@ cc_library_shared {
"android.hardware.drm@1.1",
"android.hardware.drm@1.2",
"android.hardware.drm@1.3",
"android.hardware.drm@1.4",
"android.hidl.memory@1.0",
"libbase",
"libcrypto",

View File

@@ -8,12 +8,12 @@
#define HIDL_TYPES_H_
#include <android/hardware/drm/1.1/types.h>
#include <android/hardware/drm/1.2/ICryptoPlugin.h>
#include <android/hardware/drm/1.2/IDrmPlugin.h>
#include <android/hardware/drm/1.2/IDrmPluginListener.h>
#include <android/hardware/drm/1.2/types.h>
#include <android/hardware/drm/1.3/ICryptoFactory.h>
#include <android/hardware/drm/1.3/IDrmFactory.h>
#include <android/hardware/drm/1.2/IDrmPluginListener.h>
#include <android/hardware/drm/1.4/ICryptoFactory.h>
#include <android/hardware/drm/1.4/ICryptoPlugin.h>
#include <android/hardware/drm/1.4/IDrmFactory.h>
#include <android/hardware/drm/1.4/IDrmPlugin.h>
#include <hidl/HidlTransportSupport.h>
using ::android::hardware::configureRpcThreadpool;

View File

@@ -12,16 +12,16 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_3 {
namespace V1_4 {
namespace widevine {
extern "C" {
IDrmFactory* createDrmFactory();
ICryptoFactory* createCryptoFactory();
::drm::V1_4::IDrmFactory* createDrmFactory();
::drm::V1_4::ICryptoFactory* createCryptoFactory();
}
} // namespace widevine
} // namespace V1_3
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -13,10 +13,10 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_3 {
namespace V1_4 {
namespace widevine {
struct WVCryptoFactory : public ICryptoFactory {
struct WVCryptoFactory : public ::drm::V1_4::ICryptoFactory {
public:
WVCryptoFactory() {}
virtual ~WVCryptoFactory() {}
@@ -34,7 +34,7 @@ struct WVCryptoFactory : public ICryptoFactory {
};
} // namespace widevine
} // namespace V1_3
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -14,13 +14,13 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_3 {
namespace V1_4 {
namespace widevine {
using ::android::hardware::hidl_handle;
using ::android::hardware::hidl_vec;
struct WVDrmFactory : public IDrmFactory {
struct WVDrmFactory : public ::drm::V1_4::IDrmFactory {
WVDrmFactory() {}
virtual ~WVDrmFactory() {}
@@ -60,7 +60,7 @@ struct WVDrmFactory : public IDrmFactory {
extern "C" IDrmFactory* HIDL_FETCH_IDrmFactory(const char* name);
} // namespace widevine
} // namespace V1_3
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2021 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest version="1.0" type="device">
<hal format="hidl">
<name>android.hardware.drm</name>
<transport>hwbinder</transport>
<fqname>@1.4::ICryptoFactory/widevine</fqname>
<fqname>@1.4::IDrmFactory/widevine</fqname>
</hal>
</manifest>

View File

@@ -83,6 +83,7 @@ cc_library_static {
"android.hardware.drm@1.1",
"android.hardware.drm@1.2",
"android.hardware.drm@1.3",
"android.hardware.drm@1.4",
"android.hidl.memory@1.0",
"libcrypto",
"libhidlmemory",

View File

@@ -16,12 +16,12 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_2 {
namespace V1_4 {
namespace widevine {
using ::android::hidl::memory::V1_0::IMemory;
struct WVCryptoPlugin : public ICryptoPlugin {
struct WVCryptoPlugin : public ::drm::V1_4::ICryptoPlugin {
WVCryptoPlugin(const void* data, size_t size,
const sp<wvcdm::WvContentDecryptionModule>& cdm);
virtual ~WVCryptoPlugin() {}
@@ -75,7 +75,7 @@ struct WVCryptoPlugin : public ICryptoPlugin {
};
} // namespace widevine
} // namespace V1_2
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -40,7 +40,7 @@ inline Status toStatus_1_0(Status_V1_2 status) {
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_2 {
namespace V1_4 {
namespace widevine {
using android::hardware::drm::V1_2::widevine::toVector;
@@ -345,7 +345,7 @@ Status_V1_2 WVCryptoPlugin::attemptDecrypt(
}
} // namespace widevine
} // namespace V1_2
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -96,6 +96,7 @@ LOCAL_SHARED_LIBRARIES := \
android.hardware.drm@1.1 \
android.hardware.drm@1.2 \
android.hardware.drm@1.3 \
android.hardware.drm@1.4 \
android.hidl.memory@1.0 \
libbase \
libbinder \

View File

@@ -30,7 +30,7 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_2 {
namespace V1_4 {
namespace widevine {
using ::android::MemoryDealer;
@@ -637,7 +637,7 @@ TEST_F(WVCryptoPluginTest, DisallowsUnopenedSessionIdChanges) {
}
} // namespace widevine
} // namespace V1_2
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -88,6 +88,7 @@ cc_library_static {
"android.hardware.drm@1.1",
"android.hardware.drm@1.2",
"android.hardware.drm@1.3",
"android.hardware.drm@1.4",
"android.hidl.memory@1.0",
"libcrypto",
"liblog",

View File

@@ -21,7 +21,7 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_2 {
namespace V1_4 {
namespace widevine {
using std::map;
@@ -34,7 +34,7 @@ using wvcdm::WvContentDecryptionModule;
const OEMCrypto_Algorithm kInvalidCryptoAlgorithm =
static_cast<OEMCrypto_Algorithm>(-1);
struct WVDrmPlugin : public IDrmPlugin, IDrmPluginListener,
struct WVDrmPlugin : public ::drm::V1_4::IDrmPlugin, IDrmPluginListener,
wvcdm::WvCdmEventListener {
WVDrmPlugin(const sp<WvContentDecryptionModule>& cdm,
@@ -220,6 +220,11 @@ struct WVDrmPlugin : public IDrmPlugin, IDrmPluginListener,
Return<void> sendSessionLostState(
const hidl_vec<uint8_t>& sessionId) override;
Return<bool> requiresSecureDecoder(const hidl_string& mime, SecurityLevel level)
override;
Return<bool> requiresSecureDecoderDefault(const hidl_string& mime) override;
// The following methods do not use hidl interface, it is used internally.
virtual Status unprovisionDevice();
@@ -484,7 +489,7 @@ struct WVDrmPlugin : public IDrmPlugin, IDrmPluginListener,
};
} // namespace widevine
} // namespace V1_2
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -41,7 +41,7 @@ static const std::string kKeyOrigin = "origin";
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_2 {
namespace V1_4 {
namespace widevine {
using android::hardware::drm::V1_2::widevine::toHidlVec;
@@ -1926,6 +1926,35 @@ Return<void> WVDrmPlugin::sendSessionLostState(
return err;
}
Return<bool> WVDrmPlugin::requiresSecureDecoder(
const hidl_string& mime, SecurityLevel level) {
if (!strncasecmp(mime.c_str(), "video/", 6)) {
// Type is video, so check level to see if we require a secure decoder.
return level == SecurityLevel::HW_SECURE_ALL
|| level == SecurityLevel::HW_SECURE_DECODE;
} else {
// Type is not video, so never require a secure decoder.
return false;
}
}
Return<bool> WVDrmPlugin::requiresSecureDecoderDefault(const hidl_string& mime) {
if (!strncasecmp(mime.c_str(), "video/", 6)) {
// Type is video, so check level to see if we require a secure decoder.
std::string level(mPropertySet.security_level());
if (level == kResetSecurityLevel) {
mCDM->QueryStatus(wvcdm::kLevelDefault,
wvcdm::QUERY_KEY_SECURITY_LEVEL, &level);
}
return level == wvcdm::QUERY_VALUE_SECURITY_LEVEL_L1;
} else {
// Type is not video, so never require a secure decoder.
return false;
}
}
void WVDrmPlugin::OnSessionRenewalNeeded(const CdmSessionId& cdmSessionId) {
const std::vector<uint8_t> sessionId = StrToVector(cdmSessionId);
const hidl_vec<uint8_t> data; // data is ignored
@@ -2313,7 +2342,7 @@ uint32_t WVDrmPlugin::CdmIdentifierBuilder::getNextUniqueId() {
}
} // namespace widevine
} // namespace V1_2
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -100,6 +100,7 @@ LOCAL_SHARED_LIBRARIES := \
android.hardware.drm@1.1 \
android.hardware.drm@1.2 \
android.hardware.drm@1.3 \
android.hardware.drm@1.4 \
android.hidl.memory@1.0 \
libbinder \
libbase \

View File

@@ -31,7 +31,7 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_2 {
namespace V1_4 {
namespace widevine {
using android::hardware::drm::V1_2::widevine::toHidlVec;
@@ -3427,7 +3427,7 @@ TEST_F(WVDrmPluginTest, RemoveOfflineLicense) {
}
} // namespace widevine
} // namespace V1_2
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -12,22 +12,22 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_3 {
namespace V1_4 {
namespace widevine {
extern "C" {
IDrmFactory* createDrmFactory() {
::drm::V1_4::IDrmFactory* createDrmFactory() {
return new WVDrmFactory();
}
ICryptoFactory* createCryptoFactory() {
::drm::V1_4::ICryptoFactory* createCryptoFactory() {
return new WVCryptoFactory();
}
} // extern "C"
} // namespace widevine
} // namespace V1_3
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -19,10 +19,10 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_3 {
namespace V1_4 {
namespace widevine {
using wvdrm::hardware::drm::V1_2::widevine::WVCryptoPlugin;
using wvdrm::hardware::drm::V1_4::widevine::WVCryptoPlugin;
Return<bool> WVCryptoFactory::isCryptoSchemeSupported(
const hidl_array<uint8_t, 16>& uuid) {
@@ -54,7 +54,7 @@ Return<void> WVCryptoFactory::createPlugin(
}
} // namespace widevine
} // namespace V1_3
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -24,10 +24,10 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_3 {
namespace V1_4 {
namespace widevine {
using wvdrm::hardware::drm::V1_2::widevine::WVDrmPlugin;
using wvdrm::hardware::drm::V1_4::widevine::WVDrmPlugin;
WVGenericCryptoInterface WVDrmFactory::sOemCryptoInterface;
@@ -269,7 +269,7 @@ Return<void> WVDrmFactory::debug(const hidl_handle& fd,
}
} // namespace widevine
} // namespace V1_3
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -0,0 +1,30 @@
on property:init.svc.mediadrm=running
mkdir /data/vendor/mediadrm 0770 media mediadrm
start vendor.move_data_sh
service vendor.move_data_sh /system/bin/move_widevine_data.sh
class late_start
user media
group media mediadrm system
disabled
oneshot
service vendor.drm-widevine-hal-1-4 /vendor/bin/hw/android.hardware.drm@1.4-service-lazy.widevine
interface android.hardware.drm@1.0::ICryptoFactory widevine
interface android.hardware.drm@1.0::IDrmFactory widevine
interface android.hardware.drm@1.1::ICryptoFactory widevine
interface android.hardware.drm@1.1::IDrmFactory widevine
interface android.hardware.drm@1.2::ICryptoFactory widevine
interface android.hardware.drm@1.2::IDrmFactory widevine
interface android.hardware.drm@1.3::ICryptoFactory widevine
interface android.hardware.drm@1.3::IDrmFactory widevine
interface android.hardware.drm@1.4::ICryptoFactory widevine
interface android.hardware.drm@1.4::IDrmFactory widevine
interface android.hidl.base@1.0::IBase widevine
oneshot
disabled
class hal
user media
group media mediadrm drmrpc system
ioprio rt 4
writepid /dev/cpuset/foreground/tasks

View File

@@ -0,0 +1,28 @@
on property:init.svc.mediadrm=running
mkdir /data/vendor/mediadrm 0770 media mediadrm
start vendor.move_data_sh
service vendor.move_data_sh /system/bin/move_widevine_data.sh
class late_start
user media
group media mediadrm system
disabled
oneshot
service vendor.drm-widevine-hal-1-4 /vendor/bin/hw/android.hardware.drm@1.4-service.widevine
interface android.hardware.drm@1.0::ICryptoFactory widevine
interface android.hardware.drm@1.0::IDrmFactory widevine
interface android.hardware.drm@1.1::ICryptoFactory widevine
interface android.hardware.drm@1.1::IDrmFactory widevine
interface android.hardware.drm@1.2::ICryptoFactory widevine
interface android.hardware.drm@1.2::IDrmFactory widevine
interface android.hardware.drm@1.3::ICryptoFactory widevine
interface android.hardware.drm@1.3::IDrmFactory widevine
interface android.hardware.drm@1.4::ICryptoFactory widevine
interface android.hardware.drm@1.4::IDrmFactory widevine
interface android.hidl.base@1.0::IBase widevine
class hal
user media
group media mediadrm drmrpc system
ioprio rt 4
writepid /dev/cpuset/foreground/tasks

View File

@@ -22,8 +22,8 @@
#include "WVCryptoFactory.h"
#include "WVDrmFactory.h"
using wvdrm::hardware::drm::V1_3::widevine::WVCryptoFactory;
using wvdrm::hardware::drm::V1_3::widevine::WVDrmFactory;
using wvdrm::hardware::drm::V1_4::widevine::WVCryptoFactory;
using wvdrm::hardware::drm::V1_4::widevine::WVDrmFactory;
int main(int /* argc */, char** /* argv */) {
sp<IDrmFactory> drmFactory = new WVDrmFactory;

View File

@@ -23,8 +23,8 @@
#include "WVCryptoFactory.h"
#include "WVDrmFactory.h"
using wvdrm::hardware::drm::V1_3::widevine::WVCryptoFactory;
using wvdrm::hardware::drm::V1_3::widevine::WVDrmFactory;
using wvdrm::hardware::drm::V1_4::widevine::WVCryptoFactory;
using wvdrm::hardware::drm::V1_4::widevine::WVDrmFactory;
using android::hardware::LazyServiceRegistrar;
int main(int /* argc */, char** /* argv */) {

View File

@@ -76,6 +76,7 @@ LOCAL_SHARED_LIBRARIES := \
android.hardware.drm@1.1 \
android.hardware.drm@1.2 \
android.hardware.drm@1.3 \
android.hardware.drm@1.4 \
libbase \
libcrypto \
libdl \

View File

@@ -10,7 +10,7 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_3 {
namespace V1_4 {
namespace widevine {
using ::android::sp;
@@ -32,7 +32,7 @@ TEST(CreatePluginFactoriesTest, CreatesCryptoFactory) {
}
} // namespace widevine
} // namespace V1_3
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -10,7 +10,7 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_3 {
namespace V1_4 {
namespace widevine {
using ::android::sp;
@@ -48,7 +48,7 @@ TEST(WVCryptoFactoryTest, DoesNotSupportUnsupportedCryptoSchemes) {
}
} // namespace widevine
} // namespace V1_3
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm

View File

@@ -13,7 +13,7 @@
namespace wvdrm {
namespace hardware {
namespace drm {
namespace V1_3 {
namespace V1_4 {
namespace widevine {
using namespace android;
@@ -144,7 +144,7 @@ TEST(WVDrmFactoryTest, CalculatesBlankAppPackageNamePermissibilityCorrectly) {
}
} // namespace widevine
} // namespace V1_3
} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace wvdrm