Merge "codec2: add util method to fill Traits from C2ComponentInterface" into sc-dev
diff --git a/drm/libmediadrm/Android.bp b/drm/libmediadrm/Android.bp
index b49ec75..b042c27 100644
--- a/drm/libmediadrm/Android.bp
+++ b/drm/libmediadrm/Android.bp
@@ -64,6 +64,7 @@
"android.hardware.drm@1.0",
"android.hardware.drm@1.1",
"android.hardware.drm@1.2",
+ "android.hardware.drm@1.4",
],
cflags: [
diff --git a/drm/libmediadrm/CryptoHal.cpp b/drm/libmediadrm/CryptoHal.cpp
index 18772e0..9d39f83 100644
--- a/drm/libmediadrm/CryptoHal.cpp
+++ b/drm/libmediadrm/CryptoHal.cpp
@@ -28,6 +28,7 @@
#include <media/stagefright/foundation/hexdump.h>
#include <media/stagefright/MediaErrors.h>
#include <mediadrm/CryptoHal.h>
+#include <mediadrm/DrmUtils.h>
using drm::V1_0::BufferType;
using drm::V1_0::DestinationBuffer;
@@ -39,6 +40,7 @@
using drm::V1_0::Status;
using drm::V1_0::SubSample;
+using ::android::DrmUtils::toStatusT;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_handle;
using ::android::hardware::hidl_memory;
@@ -53,42 +55,6 @@
namespace android {
-static status_t toStatusT(Status status) {
- switch (status) {
- case Status::OK:
- return OK;
- case Status::ERROR_DRM_NO_LICENSE:
- return ERROR_DRM_NO_LICENSE;
- case Status::ERROR_DRM_LICENSE_EXPIRED:
- return ERROR_DRM_LICENSE_EXPIRED;
- case Status::ERROR_DRM_RESOURCE_BUSY:
- return ERROR_DRM_RESOURCE_BUSY;
- case Status::ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION:
- return ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION;
- case Status::ERROR_DRM_SESSION_NOT_OPENED:
- return ERROR_DRM_SESSION_NOT_OPENED;
- case Status::ERROR_DRM_CANNOT_HANDLE:
- return ERROR_DRM_CANNOT_HANDLE;
- case Status::ERROR_DRM_DECRYPT:
- return ERROR_DRM_DECRYPT;
- default:
- return UNKNOWN_ERROR;
- }
-}
-
-static status_t toStatusT_1_2(Status_V1_2 status) {
- switch (status) {
- case Status_V1_2::ERROR_DRM_SESSION_LOST_STATE:
- return ERROR_DRM_SESSION_LOST_STATE;;
- case Status_V1_2::ERROR_DRM_FRAME_TOO_LARGE:
- return ERROR_DRM_FRAME_TOO_LARGE;
- case Status_V1_2::ERROR_DRM_INSUFFICIENT_SECURITY:
- return ERROR_DRM_INSUFFICIENT_SECURITY;
- default:
- return toStatusT(static_cast<Status>(status));
- }
-}
-
static hidl_vec<uint8_t> toHidlVec(const Vector<uint8_t> &vector) {
hidl_vec<uint8_t> vec;
vec.setToExternal(const_cast<uint8_t *>(vector.array()), vector.size());
@@ -384,7 +350,7 @@
bytesWritten = hBytesWritten;
*errorDetailMsg = toString8(hDetailedError);
}
- err = toStatusT_1_2(status);
+ err = toStatusT(status);
}
);
} else {
@@ -427,4 +393,8 @@
return toStatusT(mPlugin->setMediaDrmSession(toHidlVec(sessionId)));
}
+status_t CryptoHal::getLogMessages(Vector<drm::V1_4::LogMessage> &logs) const {
+ Mutex::Autolock autoLock(mLock);
+ return DrmUtils::GetLogMessages<drm::V1_4::ICryptoPlugin>(mPlugin, logs);
+}
} // namespace android
diff --git a/drm/libmediadrm/DrmHal.cpp b/drm/libmediadrm/DrmHal.cpp
index 501471c..f8f2bc6 100644
--- a/drm/libmediadrm/DrmHal.cpp
+++ b/drm/libmediadrm/DrmHal.cpp
@@ -55,6 +55,7 @@
using drm::V1_1::SecurityLevel;
using drm::V1_2::KeySetId;
using drm::V1_2::KeyStatusType;
+using ::android::DrmUtils::toStatusT;
using ::android::hardware::drm::V1_1::DrmMetricGroup;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_string;
@@ -235,58 +236,6 @@
return keySetIds;
}
-static status_t toStatusT(Status status) {
- switch (status) {
- case Status::OK:
- return OK;
- break;
- case Status::ERROR_DRM_NO_LICENSE:
- return ERROR_DRM_NO_LICENSE;
- break;
- case Status::ERROR_DRM_LICENSE_EXPIRED:
- return ERROR_DRM_LICENSE_EXPIRED;
- break;
- case Status::ERROR_DRM_SESSION_NOT_OPENED:
- return ERROR_DRM_SESSION_NOT_OPENED;
- break;
- case Status::ERROR_DRM_CANNOT_HANDLE:
- return ERROR_DRM_CANNOT_HANDLE;
- break;
- case Status::ERROR_DRM_INVALID_STATE:
- return ERROR_DRM_INVALID_STATE;
- break;
- case Status::BAD_VALUE:
- return BAD_VALUE;
- break;
- case Status::ERROR_DRM_NOT_PROVISIONED:
- return ERROR_DRM_NOT_PROVISIONED;
- break;
- case Status::ERROR_DRM_RESOURCE_BUSY:
- return ERROR_DRM_RESOURCE_BUSY;
- break;
- case Status::ERROR_DRM_DEVICE_REVOKED:
- return ERROR_DRM_DEVICE_REVOKED;
- break;
- case Status::ERROR_DRM_UNKNOWN:
- default:
- return ERROR_DRM_UNKNOWN;
- break;
- }
-}
-
-static status_t toStatusT_1_2(Status_V1_2 status) {
- switch (status) {
- case Status_V1_2::ERROR_DRM_RESOURCE_CONTENTION:
- return ERROR_DRM_RESOURCE_CONTENTION;
- case Status_V1_2::ERROR_DRM_FRAME_TOO_LARGE:
- return ERROR_DRM_FRAME_TOO_LARGE;
- case Status_V1_2::ERROR_DRM_INSUFFICIENT_SECURITY:
- return ERROR_DRM_INSUFFICIENT_SECURITY;
- default:
- return toStatusT(static_cast<Status>(status));
- }
-}
-
Mutex DrmHal::mLock;
struct DrmHal::DrmSessionClient : public aidl::android::media::BnResourceManagerClient {
@@ -825,7 +774,7 @@
defaultUrl = toString8(hDefaultUrl);
*keyRequestType = toKeyRequestType_1_1(hKeyRequestType);
}
- err = toStatusT_1_2(status);
+ err = toStatusT(status);
});
} else if (mPluginV1_1 != NULL) {
hResult = mPluginV1_1->getKeyRequest_1_1(
@@ -947,7 +896,7 @@
request = toVector(hRequest);
defaultUrl = toString8(hDefaultUrl);
}
- err = toStatusT_1_2(status);
+ err = toStatusT(status);
}
);
} else {
@@ -1119,7 +1068,7 @@
*connected = toHdcpLevel(hConnected);
*max = toHdcpLevel(hMax);
}
- err = toStatusT_1_2(status);
+ err = toStatusT(status);
});
} else if (mPluginV1_1 != NULL) {
hResult = mPluginV1_1->getHdcpLevels(
@@ -1596,4 +1545,9 @@
return toStatusT(err);
}
+status_t DrmHal::getLogMessages(Vector<drm::V1_4::LogMessage> &logs) const {
+ Mutex::Autolock autoLock(mLock);
+ return DrmUtils::GetLogMessages<drm::V1_4::IDrmPlugin>(mPlugin, logs);
+}
+
} // namespace android
diff --git a/drm/libmediadrm/DrmUtils.cpp b/drm/libmediadrm/DrmUtils.cpp
index d85fa61..82eadd9 100644
--- a/drm/libmediadrm/DrmUtils.cpp
+++ b/drm/libmediadrm/DrmUtils.cpp
@@ -177,5 +177,93 @@
return plugins;
}
+status_t toStatusT_1_4(::V1_4::Status status) {
+ switch (status) {
+ case ::V1_4::Status::OK:
+ return OK;
+ case ::V1_4::Status::BAD_VALUE:
+ return BAD_VALUE;
+ case ::V1_4::Status::ERROR_DRM_CANNOT_HANDLE:
+ return ERROR_DRM_CANNOT_HANDLE;
+ case ::V1_4::Status::ERROR_DRM_DECRYPT:
+ return ERROR_DRM_DECRYPT;
+ case ::V1_4::Status::ERROR_DRM_DEVICE_REVOKED:
+ return ERROR_DRM_DEVICE_REVOKED;
+ case ::V1_4::Status::ERROR_DRM_FRAME_TOO_LARGE:
+ return ERROR_DRM_FRAME_TOO_LARGE;
+ case ::V1_4::Status::ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION:
+ return ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION;
+ case ::V1_4::Status::ERROR_DRM_INSUFFICIENT_SECURITY:
+ return ERROR_DRM_INSUFFICIENT_SECURITY;
+ case ::V1_4::Status::ERROR_DRM_INVALID_STATE:
+ return ERROR_DRM_INVALID_STATE;
+ case ::V1_4::Status::ERROR_DRM_LICENSE_EXPIRED:
+ return ERROR_DRM_LICENSE_EXPIRED;
+ case ::V1_4::Status::ERROR_DRM_NO_LICENSE:
+ return ERROR_DRM_NO_LICENSE;
+ case ::V1_4::Status::ERROR_DRM_NOT_PROVISIONED:
+ return ERROR_DRM_NOT_PROVISIONED;
+ case ::V1_4::Status::ERROR_DRM_RESOURCE_BUSY:
+ return ERROR_DRM_RESOURCE_BUSY;
+ case ::V1_4::Status::ERROR_DRM_RESOURCE_CONTENTION:
+ return ERROR_DRM_RESOURCE_CONTENTION;
+ case ::V1_4::Status::ERROR_DRM_SESSION_LOST_STATE:
+ return ERROR_DRM_SESSION_LOST_STATE;
+ case ::V1_4::Status::ERROR_DRM_SESSION_NOT_OPENED:
+ return ERROR_DRM_SESSION_NOT_OPENED;
+
+ // New in S / drm@1.4:
+ case ::V1_4::Status::CANNOT_DECRYPT_ZERO_SUBSAMPLES:
+ return ERROR_DRM_ZERO_SUBSAMPLES;
+ case ::V1_4::Status::CRYPTO_LIBRARY_ERROR:
+ return ERROR_DRM_CRYPTO_LIBRARY;
+ case ::V1_4::Status::GENERAL_OEM_ERROR:
+ return ERROR_DRM_GENERIC_OEM;
+ case ::V1_4::Status::GENERAL_PLUGIN_ERROR:
+ return ERROR_DRM_GENERIC_PLUGIN;
+ case ::V1_4::Status::INIT_DATA_INVALID:
+ return ERROR_DRM_INIT_DATA;
+ case ::V1_4::Status::KEY_NOT_LOADED:
+ return ERROR_DRM_KEY_NOT_LOADED;
+ case ::V1_4::Status::LICENSE_PARSE_ERROR:
+ return ERROR_DRM_LICENSE_PARSE;
+ case ::V1_4::Status::LICENSE_POLICY_ERROR:
+ return ERROR_DRM_LICENSE_POLICY;
+ case ::V1_4::Status::LICENSE_RELEASE_ERROR:
+ return ERROR_DRM_LICENSE_RELEASE;
+ case ::V1_4::Status::LICENSE_REQUEST_REJECTED:
+ return ERROR_DRM_LICENSE_REQUEST_REJECTED;
+ case ::V1_4::Status::LICENSE_RESTORE_ERROR:
+ return ERROR_DRM_LICENSE_RESTORE;
+ case ::V1_4::Status::LICENSE_STATE_ERROR:
+ return ERROR_DRM_LICENSE_STATE;
+ case ::V1_4::Status::MALFORMED_CERTIFICATE:
+ return ERROR_DRM_CERTIFICATE_MALFORMED;
+ case ::V1_4::Status::MEDIA_FRAMEWORK_ERROR:
+ return ERROR_DRM_MEDIA_FRAMEWORK;
+ case ::V1_4::Status::MISSING_CERTIFICATE:
+ return ERROR_DRM_CERTIFICATE_MISSING;
+ case ::V1_4::Status::PROVISIONING_CERTIFICATE_ERROR:
+ return ERROR_DRM_PROVISIONING_CERTIFICATE;
+ case ::V1_4::Status::PROVISIONING_CONFIGURATION_ERROR:
+ return ERROR_DRM_PROVISIONING_CONFIG;
+ case ::V1_4::Status::PROVISIONING_PARSE_ERROR:
+ return ERROR_DRM_PROVISIONING_PARSE;
+ case ::V1_4::Status::RETRYABLE_PROVISIONING_ERROR:
+ return ERROR_DRM_PROVISIONING_RETRY;
+ case ::V1_4::Status::SECURE_STOP_RELEASE_ERROR:
+ return ERROR_DRM_SECURE_STOP_RELEASE;
+ case ::V1_4::Status::STORAGE_READ_FAILURE:
+ return ERROR_DRM_STORAGE_READ;
+ case ::V1_4::Status::STORAGE_WRITE_FAILURE:
+ return ERROR_DRM_STORAGE_WRITE;
+
+ case ::V1_4::Status::ERROR_DRM_UNKNOWN:
+ default:
+ return ERROR_DRM_UNKNOWN;
+ }
+ return ERROR_DRM_UNKNOWN;
+}
+
} // namespace DrmUtils
} // namespace android
diff --git a/drm/libmediadrm/include/mediadrm/CryptoHal.h b/drm/libmediadrm/include/mediadrm/CryptoHal.h
index c9fda67..5fd39e6 100644
--- a/drm/libmediadrm/include/mediadrm/CryptoHal.h
+++ b/drm/libmediadrm/include/mediadrm/CryptoHal.h
@@ -22,6 +22,7 @@
#include <android/hardware/drm/1.0/ICryptoPlugin.h>
#include <android/hardware/drm/1.1/ICryptoFactory.h>
#include <android/hardware/drm/1.2/ICryptoPlugin.h>
+#include <android/hardware/drm/1.4/ICryptoPlugin.h>
#include <mediadrm/ICrypto.h>
#include <utils/KeyedVector.h>
@@ -71,6 +72,8 @@
}
virtual void unsetHeap(int32_t seqNum) { clearHeapBase(seqNum); }
+ virtual status_t getLogMessages(Vector<drm::V1_4::LogMessage> &logs) const;
+
private:
mutable Mutex mLock;
diff --git a/drm/libmediadrm/include/mediadrm/DrmHal.h b/drm/libmediadrm/include/mediadrm/DrmHal.h
index 2fd4d81..a0aac30 100644
--- a/drm/libmediadrm/include/mediadrm/DrmHal.h
+++ b/drm/libmediadrm/include/mediadrm/DrmHal.h
@@ -26,6 +26,7 @@
#include <android/hardware/drm/1.2/IDrmPlugin.h>
#include <android/hardware/drm/1.2/IDrmPluginListener.h>
#include <android/hardware/drm/1.4/IDrmPlugin.h>
+#include <android/hardware/drm/1.4/types.h>
#include <media/drm/DrmAPI.h>
#include <mediadrm/DrmMetrics.h>
@@ -188,6 +189,8 @@
Vector<uint8_t> const &sessionId,
const char *playbackId);
+ virtual status_t getLogMessages(Vector<drm::V1_4::LogMessage> &logs) const;
+
// Methods of IDrmPluginListener
Return<void> sendEvent(EventType eventType,
const hidl_vec<uint8_t>& sessionId, const hidl_vec<uint8_t>& data);
diff --git a/drm/libmediadrm/include/mediadrm/IDrm.h b/drm/libmediadrm/include/mediadrm/IDrm.h
index ed71eee..b5bc73d 100644
--- a/drm/libmediadrm/include/mediadrm/IDrm.h
+++ b/drm/libmediadrm/include/mediadrm/IDrm.h
@@ -24,6 +24,15 @@
#define ANDROID_IDRM_H_
namespace android {
+namespace hardware {
+namespace drm {
+namespace V1_4 {
+struct LogMessage;
+} // namespace V1_4
+} // namespace drm
+} // namespace hardware
+
+namespace drm = ::android::hardware::drm;
struct AString;
@@ -153,9 +162,12 @@
DrmPlugin::SecurityLevel securityLevel) const = 0;
virtual status_t setPlaybackId(
+
Vector<uint8_t> const &sessionId,
const char *playbackId) = 0;
+ virtual status_t getLogMessages(Vector<drm::V1_4::LogMessage> &logs) const = 0;
+
protected:
IDrm() {}
diff --git a/drm/libmediadrm/interface/mediadrm/DrmUtils.h b/drm/libmediadrm/interface/mediadrm/DrmUtils.h
index 20b3fe9..10b7207 100644
--- a/drm/libmediadrm/interface/mediadrm/DrmUtils.h
+++ b/drm/libmediadrm/interface/mediadrm/DrmUtils.h
@@ -19,11 +19,18 @@
#include <android/hardware/drm/1.0/ICryptoFactory.h>
#include <android/hardware/drm/1.0/IDrmFactory.h>
+#include <android/hardware/drm/1.4/IDrmPlugin.h>
+#include <android/hardware/drm/1.4/types.h>
+#include <media/stagefright/MediaErrors.h>
#include <utils/Errors.h> // for status_t
+#include <utils/Vector.h>
#include <utils/StrongPointer.h>
#include <vector>
+
using namespace ::android::hardware::drm;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
namespace android {
@@ -91,8 +98,46 @@
std::vector<sp<::V1_0::ICryptoPlugin>> MakeCryptoPlugins(const uint8_t uuid[16],
const void *initData, size_t initDataSize);
+status_t toStatusT_1_4(::V1_4::Status status);
+
+template<typename S>
+inline status_t toStatusT(S status) {
+ auto err = static_cast<::V1_4::Status>(status);
+ return toStatusT_1_4(err);
+}
+
+template<typename T>
+inline status_t toStatusT(const android::hardware::Return<T> &status) {
+ auto t = static_cast<T>(status);
+ auto err = static_cast<::V1_4::Status>(t);
+ return toStatusT_1_4(err);
+}
+
+template<typename T, typename U>
+status_t GetLogMessages(const sp<U> &obj, Vector<::V1_4::LogMessage> &logs) {
+ sp<T> plugin = T::castFrom(obj);
+ if (plugin == NULL) {
+ return ERROR_UNSUPPORTED;
+ }
+
+ ::V1_4::Status err{};
+ ::V1_4::IDrmPlugin::getLogMessages_cb cb = [&](
+ ::V1_4::Status status,
+ hidl_vec<::V1_4::LogMessage> hLogs) {
+ if (::V1_4::Status::OK == status) {
+ err = status;
+ return;
+ }
+ logs.appendArray(hLogs.data(), hLogs.size());
+ };
+
+ Return<void> hResult = plugin->getLogMessages(cb);
+ if (!hResult.isOk()) {
+ return DEAD_OBJECT;
+ }
+ return toStatusT(err);
+}
+
} // namespace DrmUtils
-
} // namespace android
-
#endif // ANDROID_DRMUTILS_H
diff --git a/drm/libmediadrm/interface/mediadrm/ICrypto.h b/drm/libmediadrm/interface/mediadrm/ICrypto.h
index df980ae..2c4df60 100644
--- a/drm/libmediadrm/interface/mediadrm/ICrypto.h
+++ b/drm/libmediadrm/interface/mediadrm/ICrypto.h
@@ -32,6 +32,10 @@
struct SharedBuffer;
struct DestinationBuffer;
} // namespace V1_0
+
+namespace V1_4 {
+struct LogMessage;
+} // namespace V1_4
} // namespace drm
} // namespace hardware
} // namespace android
@@ -83,6 +87,8 @@
virtual int32_t setHeap(const sp<hardware::HidlMemory>& heap) = 0;
virtual void unsetHeap(int32_t seqNum) = 0;
+ virtual status_t getLogMessages(Vector<drm::V1_4::LogMessage> &logs) const = 0;
+
protected:
ICrypto() {}
diff --git a/media/libstagefright/include/media/stagefright/MediaErrors.h b/media/libstagefright/include/media/stagefright/MediaErrors.h
index 5418f10..7368ad9 100644
--- a/media/libstagefright/include/media/stagefright/MediaErrors.h
+++ b/media/libstagefright/include/media/stagefright/MediaErrors.h
@@ -75,7 +75,31 @@
ERROR_DRM_RESOURCE_CONTENTION = DRM_ERROR_BASE - 14,
ERROR_DRM_SESSION_LOST_STATE = DRM_ERROR_BASE - 15,
ERROR_DRM_INVALID_STATE = DRM_ERROR_BASE - 16,
- ERROR_DRM_LAST_USED_ERRORCODE = DRM_ERROR_BASE - 16,
+
+ // New in S / drm@1.4:
+ ERROR_DRM_CERTIFICATE_MALFORMED = DRM_ERROR_BASE - 17,
+ ERROR_DRM_CERTIFICATE_MISSING = DRM_ERROR_BASE - 18,
+ ERROR_DRM_CRYPTO_LIBRARY = DRM_ERROR_BASE - 19,
+ ERROR_DRM_GENERIC_OEM = DRM_ERROR_BASE - 20,
+ ERROR_DRM_GENERIC_PLUGIN = DRM_ERROR_BASE - 21,
+ ERROR_DRM_INIT_DATA = DRM_ERROR_BASE - 22,
+ ERROR_DRM_KEY_NOT_LOADED = DRM_ERROR_BASE - 23,
+ ERROR_DRM_LICENSE_PARSE = DRM_ERROR_BASE - 24,
+ ERROR_DRM_LICENSE_POLICY = DRM_ERROR_BASE - 25,
+ ERROR_DRM_LICENSE_RELEASE = DRM_ERROR_BASE - 26,
+ ERROR_DRM_LICENSE_REQUEST_REJECTED = DRM_ERROR_BASE - 27,
+ ERROR_DRM_LICENSE_RESTORE = DRM_ERROR_BASE - 28,
+ ERROR_DRM_LICENSE_STATE = DRM_ERROR_BASE - 29,
+ ERROR_DRM_MEDIA_FRAMEWORK = DRM_ERROR_BASE - 30,
+ ERROR_DRM_PROVISIONING_CERTIFICATE = DRM_ERROR_BASE - 31,
+ ERROR_DRM_PROVISIONING_CONFIG = DRM_ERROR_BASE - 32,
+ ERROR_DRM_PROVISIONING_PARSE = DRM_ERROR_BASE - 33,
+ ERROR_DRM_PROVISIONING_RETRY = DRM_ERROR_BASE - 34,
+ ERROR_DRM_SECURE_STOP_RELEASE = DRM_ERROR_BASE - 35,
+ ERROR_DRM_STORAGE_READ = DRM_ERROR_BASE - 36,
+ ERROR_DRM_STORAGE_WRITE = DRM_ERROR_BASE - 37,
+ ERROR_DRM_ZERO_SUBSAMPLES = DRM_ERROR_BASE - 38,
+ ERROR_DRM_LAST_USED_ERRORCODE = DRM_ERROR_BASE - 38,
ERROR_DRM_VENDOR_MAX = DRM_ERROR_BASE - 500,
ERROR_DRM_VENDOR_MIN = DRM_ERROR_BASE - 999,