Remove dependency to libmediadrm from drm HAL
am: 07770c78e1
Change-Id: I9963fa4da5dd779af03fa97b6b008326df216a97
This commit is contained in:
commit
b62ca88160
11 changed files with 187 additions and 24 deletions
|
@ -89,3 +89,5 @@ cc_library_shared {
|
|||
"libutils",
|
||||
],
|
||||
}
|
||||
|
||||
subdirs = ["default"]
|
||||
|
|
23
drm/1.0/default/Android.bp
Normal file
23
drm/1.0/default/Android.bp
Normal file
|
@ -0,0 +1,23 @@
|
|||
cc_library_static {
|
||||
name: "android.hardware.drm@1.0-helper",
|
||||
vendor: true,
|
||||
defaults: ["hidl_defaults"],
|
||||
srcs: [
|
||||
"SharedLibrary.cpp",
|
||||
],
|
||||
cflags: [
|
||||
"-Werror",
|
||||
"-Wextra",
|
||||
"-Wall",
|
||||
],
|
||||
shared_libs: [
|
||||
"liblog",
|
||||
],
|
||||
header_libs: [
|
||||
"libutils_headers",
|
||||
],
|
||||
export_header_lib_headers: [
|
||||
"libutils_headers",
|
||||
],
|
||||
export_include_dirs : ["include"]
|
||||
}
|
|
@ -36,6 +36,9 @@ LOCAL_SHARED_LIBRARIES := \
|
|||
libutils \
|
||||
libbinder \
|
||||
|
||||
LOCAL_STATIC_LIBRARIES := \
|
||||
android.hardware.drm@1.0-helper \
|
||||
|
||||
LOCAL_C_INCLUDES := \
|
||||
hardware/interfaces/drm
|
||||
|
||||
|
@ -71,10 +74,12 @@ LOCAL_SHARED_LIBRARIES := \
|
|||
libhidlmemory \
|
||||
libhidltransport \
|
||||
liblog \
|
||||
libmediadrm \
|
||||
libstagefright_foundation_vendor \
|
||||
libutils \
|
||||
|
||||
LOCAL_STATIC_LIBRARIES := \
|
||||
android.hardware.drm@1.0-helper \
|
||||
|
||||
LOCAL_C_INCLUDES := \
|
||||
frameworks/native/include \
|
||||
frameworks/av/include
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <android/hardware/drm/1.0/ICryptoFactory.h>
|
||||
#include <hidl/Status.h>
|
||||
#include <media/hardware/CryptoAPI.h>
|
||||
#include <media/PluginLoader.h>
|
||||
#include <PluginLoader.h>
|
||||
#include <media/SharedLibrary.h>
|
||||
|
||||
namespace android {
|
||||
|
@ -28,6 +28,7 @@ namespace drm {
|
|||
namespace V1_0 {
|
||||
namespace implementation {
|
||||
|
||||
using ::android::hardware::drm::V1_0::helper::PluginLoader;
|
||||
using ::android::hardware::drm::V1_0::ICryptoFactory;
|
||||
using ::android::hardware::drm::V1_0::ICryptoPlugin;
|
||||
using ::android::hardware::hidl_array;
|
||||
|
@ -51,7 +52,7 @@ struct CryptoFactory : public ICryptoFactory {
|
|||
override;
|
||||
|
||||
private:
|
||||
android::PluginLoader<android::CryptoFactory> loader;
|
||||
PluginLoader<android::CryptoFactory> loader;
|
||||
|
||||
CryptoFactory(const CryptoFactory &) = delete;
|
||||
void operator=(const CryptoFactory &) = delete;
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <android/hardware/drm/1.0/IDrmFactory.h>
|
||||
#include <hidl/Status.h>
|
||||
#include <media/drm/DrmAPI.h>
|
||||
#include <media/PluginLoader.h>
|
||||
#include <PluginLoader.h>
|
||||
#include <media/SharedLibrary.h>
|
||||
|
||||
namespace android {
|
||||
|
@ -28,6 +28,7 @@ namespace drm {
|
|||
namespace V1_0 {
|
||||
namespace implementation {
|
||||
|
||||
using ::android::hardware::drm::V1_0::helper::PluginLoader;
|
||||
using ::android::hardware::drm::V1_0::IDrmFactory;
|
||||
using ::android::hardware::drm::V1_0::IDrmPlugin;
|
||||
using ::android::hardware::hidl_array;
|
||||
|
@ -53,7 +54,7 @@ struct DrmFactory : public IDrmFactory {
|
|||
const hidl_string& appPackageName, createPlugin_cb _hidl_cb) override;
|
||||
|
||||
private:
|
||||
android::PluginLoader<android::DrmFactory> loader;
|
||||
PluginLoader<android::DrmFactory> loader;
|
||||
|
||||
DrmFactory(const DrmFactory &) = delete;
|
||||
void operator=(const DrmFactory &) = delete;
|
||||
|
|
|
@ -14,17 +14,19 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#define LOG_TAG "drm-vts-shared-library"
|
||||
|
||||
#include "SharedLibrary.h"
|
||||
|
||||
#include <dlfcn.h>
|
||||
#include <shared_library.h>
|
||||
|
||||
using std::string;
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace drm {
|
||||
namespace V1_0 {
|
||||
namespace helper {
|
||||
|
||||
namespace drm_vts {
|
||||
|
||||
SharedLibrary::SharedLibrary(const string& path) {
|
||||
mLibHandle = dlopen(path.c_str(), RTLD_NOW);
|
||||
SharedLibrary::SharedLibrary(const String8& path) {
|
||||
mLibHandle = dlopen(path.string(), RTLD_NOW);
|
||||
}
|
||||
|
||||
SharedLibrary::~SharedLibrary() {
|
||||
|
@ -53,4 +55,9 @@ const char* SharedLibrary::lastError() const {
|
|||
const char* error = dlerror();
|
||||
return error ? error : "No errors or unknown error";
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace android
|
107
drm/1.0/default/include/PluginLoader.h
Normal file
107
drm/1.0/default/include/PluginLoader.h
Normal file
|
@ -0,0 +1,107 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef PLUGIN_LOADER_H_
|
||||
#define PLUGIN_LOADER_H_
|
||||
|
||||
#include "SharedLibrary.h"
|
||||
#include <utils/Log.h>
|
||||
#include <utils/String8.h>
|
||||
#include <utils/Vector.h>
|
||||
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace drm {
|
||||
namespace V1_0 {
|
||||
namespace helper {
|
||||
|
||||
template <class T>
|
||||
class PluginLoader {
|
||||
|
||||
public:
|
||||
PluginLoader(const char *dir, const char *entry) {
|
||||
/**
|
||||
* scan all plugins in the plugin directory and add them to the
|
||||
* factories list.
|
||||
*/
|
||||
String8 pluginDir(dir);
|
||||
|
||||
DIR* pDir = opendir(pluginDir.string());
|
||||
if (pDir == NULL) {
|
||||
ALOGE("Failed to find plugin directory %s", pluginDir.string());
|
||||
} else {
|
||||
struct dirent* pEntry;
|
||||
while ((pEntry = readdir(pDir))) {
|
||||
String8 file(pEntry->d_name);
|
||||
if (file.getPathExtension() == ".so") {
|
||||
String8 path = pluginDir + "/" + pEntry->d_name;
|
||||
T *plugin = loadOne(path, entry);
|
||||
if (plugin) {
|
||||
factories.push(plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir(pDir);
|
||||
}
|
||||
}
|
||||
|
||||
~PluginLoader() {
|
||||
for (size_t i = 0; i < factories.size(); i++) {
|
||||
delete factories[i];
|
||||
}
|
||||
}
|
||||
|
||||
T *getFactory(size_t i) const {
|
||||
return factories[i];
|
||||
}
|
||||
|
||||
size_t factoryCount() const {return factories.size();}
|
||||
|
||||
private:
|
||||
T* loadOne(const char *path, const char *entry) {
|
||||
sp<SharedLibrary> library = new SharedLibrary(String8(path));
|
||||
if (!library.get()) {
|
||||
ALOGE("Failed to open plugin library %s: %s", path,
|
||||
library->lastError());
|
||||
} else {
|
||||
typedef T *(*CreateFactoryFunc)();
|
||||
CreateFactoryFunc createFactoryFunc =
|
||||
(CreateFactoryFunc)library->lookup(entry);
|
||||
if (createFactoryFunc) {
|
||||
ALOGV("Found plugin factory entry %s in %s", entry, path);
|
||||
libraries.push(library);
|
||||
T* result = createFactoryFunc();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Vector<T *> factories;
|
||||
Vector<sp<SharedLibrary> > libraries;
|
||||
|
||||
PluginLoader(const PluginLoader &) = delete;
|
||||
void operator=(const PluginLoader &) = delete;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace android
|
||||
|
||||
#endif // PLUGIN_LOADER_H_
|
||||
|
|
@ -17,13 +17,18 @@
|
|||
#ifndef SHARED_LIBRARY_H_
|
||||
#define SHARED_LIBRARY_H_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <utils/RefBase.h>
|
||||
#include <utils/String8.h>
|
||||
|
||||
namespace drm_vts {
|
||||
class SharedLibrary {
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace drm {
|
||||
namespace V1_0 {
|
||||
namespace helper {
|
||||
|
||||
class SharedLibrary : public RefBase {
|
||||
public:
|
||||
explicit SharedLibrary(const std::string& path);
|
||||
explicit SharedLibrary(const String8& path);
|
||||
~SharedLibrary();
|
||||
|
||||
bool operator!() const;
|
||||
|
@ -36,6 +41,11 @@ class SharedLibrary {
|
|||
SharedLibrary(const SharedLibrary&) = delete;
|
||||
void operator=(const SharedLibrary&) = delete;
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif // SHARED_LIBRARY_H_
|
|
@ -19,7 +19,6 @@ cc_test {
|
|||
srcs: [
|
||||
"drm_hal_clearkey_test.cpp",
|
||||
"drm_hal_vendor_test.cpp",
|
||||
"shared_library.cpp",
|
||||
"vendor_modules.cpp"
|
||||
],
|
||||
shared_libs: [
|
||||
|
@ -39,7 +38,8 @@ cc_test {
|
|||
"libutils",
|
||||
],
|
||||
static_libs: [
|
||||
"VtsHalHidlTargetTestBase"
|
||||
"VtsHalHidlTargetTestBase",
|
||||
"android.hardware.drm@1.0-helper",
|
||||
],
|
||||
cflags: [
|
||||
"-O0",
|
||||
|
|
|
@ -20,13 +20,16 @@
|
|||
#include <dlfcn.h>
|
||||
#include <log/log.h>
|
||||
#include <memory>
|
||||
#include <utils/String8.h>
|
||||
#include <SharedLibrary.h>
|
||||
|
||||
#include "shared_library.h"
|
||||
#include "vendor_modules.h"
|
||||
|
||||
using std::string;
|
||||
using std::vector;
|
||||
using std::unique_ptr;
|
||||
using ::android::String8;
|
||||
using ::android::hardware::drm::V1_0::helper::SharedLibrary;
|
||||
|
||||
namespace drm_vts {
|
||||
void VendorModules::scanModules(const std::string &directory) {
|
||||
|
@ -48,7 +51,7 @@ void VendorModules::scanModules(const std::string &directory) {
|
|||
|
||||
DrmHalVTSVendorModule* VendorModules::getModule(const string& path) {
|
||||
if (mOpenLibraries.find(path) == mOpenLibraries.end()) {
|
||||
auto library = std::make_unique<SharedLibrary>(path);
|
||||
auto library = std::make_unique<SharedLibrary>(String8(path.c_str()));
|
||||
if (!library) {
|
||||
ALOGE("failed to map shared library %s", path.c_str());
|
||||
return NULL;
|
||||
|
|
|
@ -18,8 +18,12 @@
|
|||
#define VENDOR_MODULES_H
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include "shared_library.h"
|
||||
#include <SharedLibrary.h>
|
||||
|
||||
using ::android::hardware::drm::V1_0::helper::SharedLibrary;
|
||||
|
||||
class DrmHalVTSVendorModule;
|
||||
|
||||
|
|
Loading…
Reference in a new issue