Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d59d3625 authored by Jeff Tinker's avatar Jeff Tinker
Browse files

Implement services for crypto+drm HALs

Test: service runs, basic gtests pass

bug:32815560
Change-Id: I9642f20d11805c56c46ddede64e776df5314f089
parent 353f8907
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
#
# Copyright (C) 2016 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.


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.drm@1.0-service
LOCAL_INIT_RC := android.hardware.drm@1.0-service.rc
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_SRC_FILES := \
  service.cpp \

LOCAL_SHARED_LIBRARIES := \
  libhidlbase \
  libhidltransport \
  liblog \
  libhwbinder \
  libutils \
  libhardware \
  android.hardware.drm.drm@1.0 \
  android.hardware.drm.crypto@1.0 \
  android.hidl.memory@1.0 \


LOCAL_C_INCLUDES := \
  hardware/interfaces/drm

# TODO: The legacy DRM plugins only support 32-bit. They need
# to be migrated to 64-bit (b/18948909)
LOCAL_32_BIT_ONLY := true

include $(BUILD_EXECUTABLE)
+6 −0
Original line number Diff line number Diff line
service drm-hal-1-0 /system/bin/hw/android.hardware.drm@1.0-service
    class hal
    user media
    group mediadrm drmrpc
    ioprio rt 4
    writepid /dev/cpuset/foreground/tasks
+38 −0
Original line number Diff line number Diff line
/*
 * Copyright 2016 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 "android.hardware.drm@1.0-service"

#include <crypto/1.0/default/CryptoFactory.h>
#include <drm/1.0/default/DrmFactory.h>

#include <hidl/HidlTransportSupport.h>
#include <hidl/LegacySupport.h>

using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
using android::hardware::registerPassthroughServiceImplementation;

using android::hardware::drm::crypto::V1_0::ICryptoFactory;
using android::hardware::drm::drm::V1_0::IDrmFactory;

int main() {
    ALOGD("android.hardware.drm@1.0-service starting...");
    configureRpcThreadpool(8, true /* callerWillJoin */);
    registerPassthroughServiceImplementation<IDrmFactory>("drm");
    registerPassthroughServiceImplementation<ICryptoFactory>("crypto");
    joinRpcThreadpool();
}
+6 −1
Original line number Diff line number Diff line
@@ -32,10 +32,15 @@ LOCAL_SHARED_LIBRARIES := \
    libmediadrm \
    libstagefright_foundation \
    android.hardware.drm.crypto@1.0 \
    android.hidl.memory@1.0
    android.hidl.memory@1.0 \

LOCAL_C_INCLUDES := \
    frameworks/native/include \
    frameworks/av/include

# TODO: The legacy DRM plugins only support 32-bit. They need
# to be migrated to 64-bit (b/18948909)
LOCAL_32_BIT_ONLY := true


include $(BUILD_SHARED_LIBRARY)
+3 −3
Original line number Diff line number Diff line
@@ -27,7 +27,8 @@ namespace V1_0 {
namespace implementation {

    CryptoFactory::CryptoFactory() :
        loader("/vendor/lib/mediadrm", "createCryptoFactory") {}
        loader("/vendor/lib/mediadrm", "createCryptoFactory") {
    }

    // Methods from ::android::hardware::drm::crypto::V1_0::ICryptoFactory follow.
    Return<bool> CryptoFactory::isCryptoSchemeSupported(
@@ -42,7 +43,6 @@ namespace implementation {

    Return<void> CryptoFactory::createPlugin(const hidl_array<uint8_t, 16>& uuid,
            const hidl_vec<uint8_t>& initData, createPlugin_cb _hidl_cb) {

        for (size_t i = 0; i < loader.factoryCount(); i++) {
            if (loader.getFactory(i)->isCryptoSchemeSupported(uuid.data())) {
                android::CryptoPlugin *legacyPlugin = NULL;
@@ -62,7 +62,7 @@ namespace implementation {
        return Void();
    }

    ICryptoFactory* HIDL_FETCH_ICryptoFactory(const char /* *name */) {
    ICryptoFactory* HIDL_FETCH_ICryptoFactory(const char* /* name */) {
        return new CryptoFactory();
    }

Loading