From 28feb283f30267593ed4108a9b34fa58d74e8d12 Mon Sep 17 00:00:00 2001 From: Edwin Date: Sat, 5 Mar 2022 07:06:10 -0800 Subject: [PATCH] Add lazy service for Widevine AIDL HAL. Merged from http://go/wvgerrit/147329 Test: atest VtsAidlHalDrmTargetTest Test: atest GtsMediaTestCases Bug: 221078453 Change-Id: I4345816f18c44de4187f03a087d58e890a6d6b01 --- libwvdrmengine/Android.bp | 19 +++++++++ ...roid.hardware.drm-service-lazy.widevine.rc | 12 ++++++ libwvdrmengine/aidl_src/serviceLazy.cpp | 42 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 libwvdrmengine/aidl_src/android.hardware.drm-service-lazy.widevine.rc create mode 100644 libwvdrmengine/aidl_src/serviceLazy.cpp diff --git a/libwvdrmengine/Android.bp b/libwvdrmengine/Android.bp index 0d0cf195..b1e09b7a 100644 --- a/libwvdrmengine/Android.bp +++ b/libwvdrmengine/Android.bp @@ -268,6 +268,25 @@ cc_binary { } +// ---------------------------------------------------------------------------- +// Builds android.hardware.drm-service-lazy.widevine +// +cc_binary { + name: "android.hardware.drm-service-lazy.widevine", + defaults: [ + "common_widevine_service-multilib-first", + "common_widevine_service-multilib-defaults-aidl", + ], + + srcs: ["aidl_src/serviceLazy.cpp"], + + shared_libs: ["libbinder"], + + init_rc: ["aidl_src/android.hardware.drm-service-lazy.widevine.rc"], + vintf_fragments: ["manifest_android.hardware.drm-service.widevine.xml"], + +} + // ---------------------------------------------------------------------------- // Builds libcdm_utils.a and libcdm_utils_hidl.a // diff --git a/libwvdrmengine/aidl_src/android.hardware.drm-service-lazy.widevine.rc b/libwvdrmengine/aidl_src/android.hardware.drm-service-lazy.widevine.rc new file mode 100644 index 00000000..0794f8e7 --- /dev/null +++ b/libwvdrmengine/aidl_src/android.hardware.drm-service-lazy.widevine.rc @@ -0,0 +1,12 @@ +on property:init.svc.mediadrm=running + mkdir /data/vendor/mediadrm 0770 media mediadrm + +service vendor.drm-widevine-hal /vendor/bin/hw/android.hardware.drm-service-lazy.widevine + interface aidl android.hardware.drm.IDrmFactory/widevine + oneshot + disabled + class hal + user media + group media mediadrm drmrpc system + ioprio rt 4 + writepid /dev/cpuset/foreground/tasks diff --git a/libwvdrmengine/aidl_src/serviceLazy.cpp b/libwvdrmengine/aidl_src/serviceLazy.cpp new file mode 100644 index 00000000..33a082ad --- /dev/null +++ b/libwvdrmengine/aidl_src/serviceLazy.cpp @@ -0,0 +1,42 @@ +/* + * Copyright 2022 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. + */ +#define LOG_TAG "WidevineAidlService" + +#include +#include +#include +#include +#include + +#include "WVCreatePluginFactories.h" +#include "WVDrmFactory.h" + +using ::wvdrm::hardware::drm::widevine::createDrmFactory; +using ::wvdrm::hardware::drm::widevine::WVDrmFactory; + +int main(int /* argc */, char** /* argv */) { + ABinderProcess_setThreadPoolMaxThreadCount(8); + + std::shared_ptr drmFactory = createDrmFactory(); + const std::string drmInstance = + std::string(WVDrmFactory::descriptor) + "/widevine"; + binder_status_t status = AServiceManager_registerLazyService( + drmFactory->asBinder().get(), drmInstance.c_str()); + CHECK(status == STATUS_OK) + << "Failed to add Widevine Factory HAL, status=" << status; + + ABinderProcess_joinThreadPool(); +}