Merge "fallout of cleaning-up libutils includes"
diff --git a/drm/libmediadrm/Android.mk b/drm/libmediadrm/Android.mk
index a57fafa..590622e 100644
--- a/drm/libmediadrm/Android.mk
+++ b/drm/libmediadrm/Android.mk
@@ -48,7 +48,8 @@
android.hidl.base@1.0 \
android.hardware.drm@1.0 \
libhidlbase \
- libhidlmemory
+ libhidlmemory \
+ libhidltransport
endif
LOCAL_CFLAGS += -Werror -Wno-error=deprecated-declarations -Wall
diff --git a/drm/libmediadrm/CryptoHal.cpp b/drm/libmediadrm/CryptoHal.cpp
index 5732613..1fda06c 100644
--- a/drm/libmediadrm/CryptoHal.cpp
+++ b/drm/libmediadrm/CryptoHal.cpp
@@ -17,10 +17,9 @@
//#define LOG_NDEBUG 0
#define LOG_TAG "CryptoHal"
#include <utils/Log.h>
-#include <dirent.h>
-#include <dlfcn.h>
#include <android/hardware/drm/1.0/types.h>
+#include <android/hidl/manager/1.0/IServiceManager.h>
#include <binder/IMemory.h>
#include <cutils/native_handle.h>
@@ -47,6 +46,7 @@
using ::android::hardware::hidl_vec;
using ::android::hardware::Return;
using ::android::hardware::Void;
+using ::android::hidl::manager::V1_0::IServiceManager;
using ::android::sp;
@@ -101,31 +101,52 @@
CryptoHal::CryptoHal()
- : mFactory(makeCryptoFactory()),
- mInitCheck((mFactory == NULL) ? ERROR_UNSUPPORTED : NO_INIT),
+ : mFactories(makeCryptoFactories()),
+ mInitCheck((mFactories.size() == 0) ? ERROR_UNSUPPORTED : NO_INIT),
mNextBufferId(0) {
}
CryptoHal::~CryptoHal() {
}
+Vector<sp<ICryptoFactory>> CryptoHal::makeCryptoFactories() {
+ Vector<sp<ICryptoFactory>> factories;
-sp<ICryptoFactory> CryptoHal::makeCryptoFactory() {
- sp<ICryptoFactory> factory = ICryptoFactory::getService("crypto");
- if (factory == NULL) {
- ALOGE("Failed to make crypto factory");
+ auto manager = ::IServiceManager::getService("manager");
+ if (manager != NULL) {
+ manager->listByInterface(ICryptoFactory::descriptor,
+ [&factories](const hidl_vec<hidl_string> ®istered) {
+ for (const auto &instance : registered) {
+ auto factory = ICryptoFactory::getService(instance);
+ if (factory != NULL) {
+ factories.push_back(factory);
+ ALOGI("makeCryptoFactories: factory instance %s is %s",
+ instance.c_str(),
+ factory->isRemote() ? "Remote" : "Not Remote");
+ }
+ }
+ }
+ );
}
- return factory;
+
+ if (factories.size() == 0) {
+ // must be in passthrough mode, load the default passthrough service
+ auto passthrough = ICryptoFactory::getService("crypto");
+ if (passthrough != NULL) {
+ ALOGI("makeCryptoFactories: using default crypto instance");
+ factories.push_back(passthrough);
+ } else {
+ ALOGE("Failed to find any crypto factories");
+ }
+ }
+ return factories;
}
-sp<ICryptoPlugin> CryptoHal::makeCryptoPlugin(const uint8_t uuid[16],
- const void *initData, size_t initDataSize) {
- if (mFactory == NULL){
- return NULL;
- }
+sp<ICryptoPlugin> CryptoHal::makeCryptoPlugin(const sp<ICryptoFactory>& factory,
+ const uint8_t uuid[16], const void *initData, size_t initDataSize) {
sp<ICryptoPlugin> plugin;
- Return<void> hResult = mFactory->createPlugin(toHidlArray16(uuid),
+ Return<void> hResult = factory->createPlugin(toHidlArray16(uuid),
toHidlVec(initData, initDataSize),
[&](Status status, const sp<ICryptoPlugin>& hPlugin) {
if (status != Status::OK) {
@@ -146,17 +167,24 @@
bool CryptoHal::isCryptoSchemeSupported(const uint8_t uuid[16]) {
Mutex::Autolock autoLock(mLock);
- if (mFactory != NULL) {
- return mFactory->isCryptoSchemeSupported(uuid);
+
+ for (size_t i = 0; i < mFactories.size(); i++) {
+ if (mFactories[i]->isCryptoSchemeSupported(uuid)) {
+ return true;
+ }
}
return false;
}
-status_t CryptoHal::createPlugin(
- const uint8_t uuid[16], const void *data, size_t size) {
+status_t CryptoHal::createPlugin(const uint8_t uuid[16], const void *data,
+ size_t size) {
Mutex::Autolock autoLock(mLock);
- mPlugin = makeCryptoPlugin(uuid, data, size);
+ for (size_t i = 0; i < mFactories.size(); i++) {
+ if (mFactories[i]->isCryptoSchemeSupported(uuid)) {
+ mPlugin = makeCryptoPlugin(mFactories[i], uuid, data, size);
+ }
+ }
if (mPlugin == NULL) {
mInitCheck = ERROR_UNSUPPORTED;
diff --git a/drm/libmediadrm/DrmHal.cpp b/drm/libmediadrm/DrmHal.cpp
index 8200d55..595b895 100644
--- a/drm/libmediadrm/DrmHal.cpp
+++ b/drm/libmediadrm/DrmHal.cpp
@@ -20,12 +20,11 @@
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
-#include <dirent.h>
-#include <dlfcn.h>
#include <android/hardware/drm/1.0/IDrmFactory.h>
#include <android/hardware/drm/1.0/IDrmPlugin.h>
#include <android/hardware/drm/1.0/types.h>
+#include <android/hidl/manager/1.0/IServiceManager.h>
#include <media/DrmHal.h>
#include <media/DrmSessionClientInterface.h>
@@ -52,6 +51,7 @@
using ::android::hardware::hidl_vec;
using ::android::hardware::Return;
using ::android::hardware::Void;
+using ::android::hidl::manager::V1_0::IServiceManager;
using ::android::sp;
namespace android {
@@ -110,9 +110,9 @@
return keyedVector;
}
-static List<Vector<uint8_t> > toSecureStops(const hidl_vec<SecureStop>&
+static List<Vector<uint8_t>> toSecureStops(const hidl_vec<SecureStop>&
hSecureStops) {
- List<Vector<uint8_t> > secureStops;
+ List<Vector<uint8_t>> secureStops;
for (size_t i = 0; i < hSecureStops.size(); i++) {
secureStops.push_back(toVector(hSecureStops[i].opaqueData));
}
@@ -189,43 +189,61 @@
DrmHal::DrmHal()
: mDrmSessionClient(new DrmSessionClient(this)),
- mFactory(makeDrmFactory()),
- mInitCheck((mFactory == NULL) ? ERROR_UNSUPPORTED : NO_INIT) {
+ mFactories(makeDrmFactories()),
+ mInitCheck((mFactories.size() == 0) ? ERROR_UNSUPPORTED : NO_INIT) {
}
DrmHal::~DrmHal() {
DrmSessionManager::Instance()->removeDrm(mDrmSessionClient);
}
-sp<IDrmFactory> DrmHal::makeDrmFactory() {
- sp<IDrmFactory> factory = IDrmFactory::getService("drm");
- if (factory == NULL) {
- ALOGE("Failed to make drm factory");
- return NULL;
+Vector<sp<IDrmFactory>> DrmHal::makeDrmFactories() {
+ Vector<sp<IDrmFactory>> factories;
+
+ auto manager = ::IServiceManager::getService("manager");
+
+ if (manager != NULL) {
+ manager->listByInterface(IDrmFactory::descriptor,
+ [&factories](const hidl_vec<hidl_string> ®istered) {
+ for (const auto &instance : registered) {
+ auto factory = IDrmFactory::getService(instance);
+ if (factory != NULL) {
+ factories.push_back(factory);
+ ALOGI("makeDrmFactories: factory instance %s is %s",
+ instance.c_str(),
+ factory->isRemote() ? "Remote" : "Not Remote");
+ }
+ }
+ }
+ );
}
- ALOGD("makeDrmFactory: service is %s",
- factory->isRemote() ? "Remote" : "Not Remote");
-
- return factory;
+ if (factories.size() == 0) {
+ // must be in passthrough mode, load the default passthrough service
+ auto passthrough = IDrmFactory::getService("drm");
+ if (passthrough != NULL) {
+ ALOGI("makeDrmFactories: using default drm instance");
+ factories.push_back(passthrough);
+ } else {
+ ALOGE("Failed to find any drm factories");
+ }
+ }
+ return factories;
}
-sp<IDrmPlugin> DrmHal::makeDrmPlugin(const uint8_t uuid[16],
- const String8& appPackageName) {
- if (mFactory == NULL){
- return NULL;
- }
+sp<IDrmPlugin> DrmHal::makeDrmPlugin(const sp<IDrmFactory>& factory,
+ const uint8_t uuid[16], const String8& appPackageName) {
sp<IDrmPlugin> plugin;
- Return<void> hResult = mFactory->createPlugin(uuid, appPackageName.string(),
+ Return<void> hResult = factory->createPlugin(uuid, appPackageName.string(),
[&](Status status, const sp<IDrmPlugin>& hPlugin) {
- if (status != Status::OK) {
- ALOGD("Failed to make drm plugin");
- return;
- }
- plugin = hPlugin;
- }
- );
+ if (status != Status::OK) {
+ ALOGE("Failed to make drm plugin");
+ return;
+ }
+ plugin = hPlugin;
+ }
+ );
return plugin;
}
@@ -346,22 +364,30 @@
bool DrmHal::isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType) {
Mutex::Autolock autoLock(mLock);
- bool result = false;
- if (mFactory != NULL && mFactory->isCryptoSchemeSupported(uuid)) {
- result = true;
- if (mimeType != "") {
- result = mFactory->isContentTypeSupported(mimeType.string());
+ for (size_t i = 0; i < mFactories.size(); i++) {
+ if (mFactories[i]->isCryptoSchemeSupported(uuid)) {
+ if (mimeType != "") {
+ if (mFactories[i]->isContentTypeSupported(mimeType.string())) {
+ return true;
+ }
+ } else {
+ return true;
+ }
}
}
- return result;
+ return false;
}
status_t DrmHal::createPlugin(const uint8_t uuid[16],
const String8& appPackageName) {
Mutex::Autolock autoLock(mLock);
- mPlugin = makeDrmPlugin(uuid, appPackageName);
+ for (size_t i = 0; i < mFactories.size(); i++) {
+ if (mFactories[i]->isCryptoSchemeSupported(uuid)) {
+ mPlugin = makeDrmPlugin(mFactories[i], uuid, appPackageName);
+ }
+ }
if (mPlugin == NULL) {
mInitCheck = ERROR_UNSUPPORTED;
@@ -628,7 +654,7 @@
return hResult.isOk() ? err : DEAD_OBJECT;
}
-status_t DrmHal::getSecureStops(List<Vector<uint8_t> > &secureStops) {
+status_t DrmHal::getSecureStops(List<Vector<uint8_t>> &secureStops) {
Mutex::Autolock autoLock(mLock);
if (mInitCheck != OK) {
diff --git a/include/ndk/NdkImage.h b/include/ndk/NdkImage.h
index 9a99287..15eae40 100644
--- a/include/ndk/NdkImage.h
+++ b/include/ndk/NdkImage.h
@@ -54,6 +54,97 @@
// Formats not listed here will not be supported by AImageReader
enum AIMAGE_FORMATS {
/**
+ * 32 bits RGBA format, 8 bits for each of the four channels.
+ *
+ * <p>
+ * Corresponding formats:
+ * <ul>
+ * <li>AHardwareBuffer: AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM</li>
+ * <li>Vulkan: VK_FORMAT_R8G8B8A8_UNORM</li>
+ * <li>OpenGL ES: GL_RGBA8</li>
+ * </ul>
+ * </p>
+ *
+ * @see AImage
+ * @see AImageReader
+ * @see AHardwareBuffer
+ */
+ AIMAGE_FORMAT_RGBA_8888 = 0x1,
+
+ /**
+ * 32 bits RGBX format, 8 bits for each of the four channels.
+ *
+ * <p>
+ * Corresponding formats:
+ * <ul>
+ * <li>AHardwareBuffer: AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM</li>
+ * <li>Vulkan: VK_FORMAT_R8G8B8A8_UNORM</li>
+ * <li>OpenGL ES: GL_RGBA8</li>
+ * </ul>
+ * </p>
+ *
+ * @see AImage
+ * @see AImageReader
+ * @see AHardwareBuffer
+ */
+ AIMAGE_FORMAT_RGBX_8888 = 0x2,
+
+ /**
+ * 24 bits RGB format, 8 bits for each of the three channels.
+ *
+ * <p>
+ * Corresponding formats:
+ * <ul>
+ * <li>AHardwareBuffer: AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM</li>
+ * <li>Vulkan: VK_FORMAT_R8G8B8_UNORM</li>
+ * <li>OpenGL ES: GL_RGB8</li>
+ * </ul>
+ * </p>
+ *
+ * @see AImage
+ * @see AImageReader
+ * @see AHardwareBuffer
+ */
+ AIMAGE_FORMAT_RGB_888 = 0x3,
+
+ /**
+ * 16 bits RGB format, 5 bits for Red channel, 6 bits for Green channel,
+ * and 5 bits for Blue channel.
+ *
+ * <p>
+ * Corresponding formats:
+ * <ul>
+ * <li>AHardwareBuffer: AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM</li>
+ * <li>Vulkan: VK_FORMAT_R5G6B5_UNORM_PACK16</li>
+ * <li>OpenGL ES: GL_RGB565</li>
+ * </ul>
+ * </p>
+ *
+ * @see AImage
+ * @see AImageReader
+ * @see AHardwareBuffer
+ */
+ AIMAGE_FORMAT_RGB_565 = 0x4,
+
+ /**
+ * 64 bits RGBA format, 16 bits for each of the four channels.
+ *
+ * <p>
+ * Corresponding formats:
+ * <ul>
+ * <li>AHardwareBuffer: AHARDWAREBUFFER_FORMAT_R16G16B16A16_SFLOAT</li>
+ * <li>Vulkan: VK_FORMAT_R16G16B16A16_SFLOAT</li>
+ * <li>OpenGL ES: GL_RGBA16F</li>
+ * </ul>
+ * </p>
+ *
+ * @see AImage
+ * @see AImageReader
+ * @see AHardwareBuffer
+ */
+ AIMAGE_FORMAT_RGBA_FP16 = 0x16,
+
+ /**
* Multi-plane Android YUV 420 format.
*
* <p>This format is a generic YCbCr format, capable of describing any 4:2:0
diff --git a/media/libmedia/include/CryptoHal.h b/media/libmedia/include/CryptoHal.h
index 9d0c3e4..28ade20 100644
--- a/media/libmedia/include/CryptoHal.h
+++ b/media/libmedia/include/CryptoHal.h
@@ -20,11 +20,14 @@
#include <android/hardware/drm/1.0/ICryptoFactory.h>
#include <android/hardware/drm/1.0/ICryptoPlugin.h>
+
#include <media/ICrypto.h>
#include <utils/KeyedVector.h>
#include <utils/threads.h>
-#include "SharedLibrary.h"
+using ::android::hardware::drm::V1_0::ICryptoFactory;
+using ::android::hardware::drm::V1_0::ICryptoPlugin;
+using ::android::hardware::drm::V1_0::SharedBuffer;
class IMemoryHeap;
@@ -60,9 +63,8 @@
private:
mutable Mutex mLock;
- sp<SharedLibrary> mLibrary;
- sp<::android::hardware::drm::V1_0::ICryptoFactory> mFactory;
- sp<::android::hardware::drm::V1_0::ICryptoPlugin> mPlugin;
+ const Vector<sp<ICryptoFactory>> mFactories;
+ sp<ICryptoPlugin> mPlugin;
/**
* mInitCheck is:
@@ -75,16 +77,13 @@
KeyedVector<void *, uint32_t> mHeapBases;
uint32_t mNextBufferId;
- sp<::android::hardware::drm::V1_0::ICryptoFactory>
- makeCryptoFactory();
- sp<::android::hardware::drm::V1_0::ICryptoPlugin>
- makeCryptoPlugin(const uint8_t uuid[16], const void *initData,
- size_t size);
+ Vector<sp<ICryptoFactory>> makeCryptoFactories();
+ sp<ICryptoPlugin> makeCryptoPlugin(const sp<ICryptoFactory>& factory,
+ const uint8_t uuid[16], const void *initData, size_t size);
void setHeapBase(const sp<IMemoryHeap>& heap);
- status_t toSharedBuffer(const sp<IMemory>& memory,
- ::android::hardware::drm::V1_0::SharedBuffer* buffer);
+ status_t toSharedBuffer(const sp<IMemory>& memory, ::SharedBuffer* buffer);
DISALLOW_EVIL_CONSTRUCTORS(CryptoHal);
};
diff --git a/media/libmedia/include/DrmHal.h b/media/libmedia/include/DrmHal.h
index 82d2555..e031765 100644
--- a/media/libmedia/include/DrmHal.h
+++ b/media/libmedia/include/DrmHal.h
@@ -87,7 +87,7 @@
Vector<uint8_t> &certificate,
Vector<uint8_t> &wrappedKey);
- virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops);
+ virtual status_t getSecureStops(List<Vector<uint8_t>> &secureStops);
virtual status_t getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop);
virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease);
@@ -158,7 +158,7 @@
mutable Mutex mEventLock;
mutable Mutex mNotifyLock;
- sp<IDrmFactory> mFactory;
+ const Vector<sp<IDrmFactory>> mFactories;
sp<IDrmPlugin> mPlugin;
/**
@@ -169,9 +169,9 @@
*/
status_t mInitCheck;
- sp<IDrmFactory> makeDrmFactory();
- sp<IDrmPlugin> makeDrmPlugin(const uint8_t uuid[16],
- const String8 &appPackageName);
+ Vector<sp<IDrmFactory>> makeDrmFactories();
+ sp<IDrmPlugin> makeDrmPlugin(const sp<IDrmFactory>& factory,
+ const uint8_t uuid[16], const String8& appPackageName);
void writeByteArray(Parcel &obj, const hidl_vec<uint8_t>& array);
diff --git a/media/ndk/NdkImageReader.cpp b/media/ndk/NdkImageReader.cpp
index a3a4625..ab3829e 100644
--- a/media/ndk/NdkImageReader.cpp
+++ b/media/ndk/NdkImageReader.cpp
@@ -42,6 +42,11 @@
bool
AImageReader::isSupportedFormat(int32_t format) {
switch (format) {
+ case AIMAGE_FORMAT_RGBA_8888:
+ case AIMAGE_FORMAT_RGBX_8888:
+ case AIMAGE_FORMAT_RGB_888:
+ case AIMAGE_FORMAT_RGB_565:
+ case AIMAGE_FORMAT_RGBA_FP16:
case AIMAGE_FORMAT_YUV_420_888:
case AIMAGE_FORMAT_JPEG:
case AIMAGE_FORMAT_RAW16:
@@ -61,6 +66,11 @@
switch (format) {
case AIMAGE_FORMAT_YUV_420_888:
return 3;
+ case AIMAGE_FORMAT_RGBA_8888:
+ case AIMAGE_FORMAT_RGBX_8888:
+ case AIMAGE_FORMAT_RGB_888:
+ case AIMAGE_FORMAT_RGB_565:
+ case AIMAGE_FORMAT_RGBA_FP16:
case AIMAGE_FORMAT_JPEG:
case AIMAGE_FORMAT_RAW16:
case AIMAGE_FORMAT_RAW_PRIVATE:
diff --git a/services/mediacodec/seccomp_policy/mediacodec-arm.policy b/services/mediacodec/seccomp_policy/mediacodec-arm.policy
index a8f2ca9..081caf0 100644
--- a/services/mediacodec/seccomp_policy/mediacodec-arm.policy
+++ b/services/mediacodec/seccomp_policy/mediacodec-arm.policy
@@ -59,3 +59,7 @@
connect: 1
fcntl64: 1
rt_tgsigqueueinfo: 1
+geteuid32: 1
+getgid32: 1
+getegid32: 1
+getgroups32: 1
diff --git a/services/mediaextractor/seccomp_policy/mediaextractor-arm.policy b/services/mediaextractor/seccomp_policy/mediaextractor-arm.policy
index 165694c..72a1edb 100644
--- a/services/mediaextractor/seccomp_policy/mediaextractor-arm.policy
+++ b/services/mediaextractor/seccomp_policy/mediaextractor-arm.policy
@@ -45,3 +45,7 @@
connect: 1
fcntl64: 1
rt_tgsigqueueinfo: 1
+geteuid32: 1
+getgid32: 1
+getegid32: 1
+getgroups32: 1
diff --git a/services/mediaextractor/seccomp_policy/mediaextractor-arm64.policy b/services/mediaextractor/seccomp_policy/mediaextractor-arm64.policy
index 7e7b858..6f2d33f 100644
--- a/services/mediaextractor/seccomp_policy/mediaextractor-arm64.policy
+++ b/services/mediaextractor/seccomp_policy/mediaextractor-arm64.policy
@@ -36,3 +36,7 @@
connect: 1
rt_tgsigqueueinfo: 1
writev: 1
+geteuid: 1
+getgid: 1
+getegid: 1
+getgroups: 1
diff --git a/services/mediaextractor/seccomp_policy/mediaextractor-x86.policy b/services/mediaextractor/seccomp_policy/mediaextractor-x86.policy
index 189855c..4a06e5a 100644
--- a/services/mediaextractor/seccomp_policy/mediaextractor-x86.policy
+++ b/services/mediaextractor/seccomp_policy/mediaextractor-x86.policy
@@ -44,3 +44,7 @@
rt_sigprocmask: 1
fcntl64: 1
rt_tgsigqueueinfo: 1
+geteuid32: 1
+getgid32: 1
+getegid32: 1
+getgroups32: 1