diff options
| author | 2021-02-19 03:51:23 +0000 | |
|---|---|---|
| committer | 2021-02-19 03:51:23 +0000 | |
| commit | 55356d91bd1f167b5fcad9846c5516526cd8ded9 (patch) | |
| tree | 61b8b1bb18869eb36099b26c9337d0516778a4d2 | |
| parent | 9236bf7e5c551b025c8e8643eafd9df0c976340c (diff) | |
| parent | 620f4a641a843480f9e3fad5e19297bfabca0f4d (diff) | |
Merge "libmedia_jni: map drm MediaError to Java error" into sc-dev
| -rw-r--r-- | media/jni/android_media_MediaDrm.cpp | 47 | ||||
| -rw-r--r-- | media/jni/android_media_MediaDrm.h | 40 |
2 files changed, 86 insertions, 1 deletions
diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp index d15e8485873d..6f1b6d3ba7b5 100644 --- a/media/jni/android_media_MediaDrm.cpp +++ b/media/jni/android_media_MediaDrm.cpp @@ -343,11 +343,56 @@ void JNIDrmListener::notify(DrmPlugin::EventType eventType, int extra, } } +jint MediaErrorToJavaError(status_t err) { +#define STATUS_CASE(status) \ + case status: \ + return J##status + + switch (err) { + STATUS_CASE(ERROR_DRM_UNKNOWN); + STATUS_CASE(ERROR_DRM_NO_LICENSE); + STATUS_CASE(ERROR_DRM_LICENSE_EXPIRED); + STATUS_CASE(ERROR_DRM_RESOURCE_BUSY); + STATUS_CASE(ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION); + STATUS_CASE(ERROR_DRM_SESSION_NOT_OPENED); + STATUS_CASE(ERROR_DRM_CANNOT_HANDLE); + STATUS_CASE(ERROR_DRM_INSUFFICIENT_SECURITY); + STATUS_CASE(ERROR_DRM_FRAME_TOO_LARGE); + STATUS_CASE(ERROR_DRM_SESSION_LOST_STATE); + STATUS_CASE(ERROR_DRM_CERTIFICATE_MALFORMED); + STATUS_CASE(ERROR_DRM_CERTIFICATE_MISSING); + STATUS_CASE(ERROR_DRM_CRYPTO_LIBRARY); + STATUS_CASE(ERROR_DRM_GENERIC_OEM); + STATUS_CASE(ERROR_DRM_GENERIC_PLUGIN); + STATUS_CASE(ERROR_DRM_INIT_DATA); + STATUS_CASE(ERROR_DRM_KEY_NOT_LOADED); + STATUS_CASE(ERROR_DRM_LICENSE_PARSE); + STATUS_CASE(ERROR_DRM_LICENSE_POLICY); + STATUS_CASE(ERROR_DRM_LICENSE_RELEASE); + STATUS_CASE(ERROR_DRM_LICENSE_REQUEST_REJECTED); + STATUS_CASE(ERROR_DRM_LICENSE_RESTORE); + STATUS_CASE(ERROR_DRM_LICENSE_STATE); + STATUS_CASE(ERROR_DRM_MEDIA_FRAMEWORK); + STATUS_CASE(ERROR_DRM_PROVISIONING_CERTIFICATE); + STATUS_CASE(ERROR_DRM_PROVISIONING_CONFIG); + STATUS_CASE(ERROR_DRM_PROVISIONING_PARSE); + STATUS_CASE(ERROR_DRM_PROVISIONING_RETRY); + STATUS_CASE(ERROR_DRM_RESOURCE_CONTENTION); + STATUS_CASE(ERROR_DRM_SECURE_STOP_RELEASE); + STATUS_CASE(ERROR_DRM_STORAGE_READ); + STATUS_CASE(ERROR_DRM_STORAGE_WRITE); + STATUS_CASE(ERROR_DRM_ZERO_SUBSAMPLES); +#undef STATUS_CASE + } + return static_cast<jint>(err); +} + static void throwStateException(JNIEnv *env, const char *msg, status_t err) { ALOGE("Illegal state exception: %s (%d)", msg, err); + jint jerr = MediaErrorToJavaError(err); jobject exception = env->NewObject(gFields.stateException.classId, - gFields.stateException.init, static_cast<int>(err), + gFields.stateException.init, static_cast<int>(jerr), env->NewStringUTF(msg)); env->Throw(static_cast<jthrowable>(exception)); } diff --git a/media/jni/android_media_MediaDrm.h b/media/jni/android_media_MediaDrm.h index b1f544cb2dbe..dc0793af2d17 100644 --- a/media/jni/android_media_MediaDrm.h +++ b/media/jni/android_media_MediaDrm.h @@ -28,6 +28,44 @@ namespace { +enum { + // TODO(b/180483929): use reverse jni e.g. android_media_MediaDrm_native_init + // KEEP IN SYNC with MediaDrm$ErrorCodes in MediaDrm.java! + JERROR_DRM_UNKNOWN = 0, + JERROR_DRM_NO_LICENSE = 1, + JERROR_DRM_LICENSE_EXPIRED = 2, + JERROR_DRM_RESOURCE_BUSY = 3, + JERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION = 4, + JERROR_DRM_SESSION_NOT_OPENED = 5, + JERROR_DRM_CANNOT_HANDLE = 6, + JERROR_DRM_INSUFFICIENT_SECURITY = 7, + JERROR_DRM_FRAME_TOO_LARGE = 8, + JERROR_DRM_SESSION_LOST_STATE = 9, + JERROR_DRM_CERTIFICATE_MALFORMED = 10, + JERROR_DRM_CERTIFICATE_MISSING = 11, + JERROR_DRM_CRYPTO_LIBRARY = 12, + JERROR_DRM_GENERIC_OEM = 13, + JERROR_DRM_GENERIC_PLUGIN = 14, + JERROR_DRM_INIT_DATA = 15, + JERROR_DRM_KEY_NOT_LOADED = 16, + JERROR_DRM_LICENSE_PARSE = 17, + JERROR_DRM_LICENSE_POLICY = 18, + JERROR_DRM_LICENSE_RELEASE = 19, + JERROR_DRM_LICENSE_REQUEST_REJECTED = 20, + JERROR_DRM_LICENSE_RESTORE = 21, + JERROR_DRM_LICENSE_STATE = 22, + JERROR_DRM_MEDIA_FRAMEWORK = 23, + JERROR_DRM_PROVISIONING_CERTIFICATE = 24, + JERROR_DRM_PROVISIONING_CONFIG = 25, + JERROR_DRM_PROVISIONING_PARSE = 26, + JERROR_DRM_PROVISIONING_RETRY = 27, + JERROR_DRM_RESOURCE_CONTENTION = 28, + JERROR_DRM_SECURE_STOP_RELEASE = 29, + JERROR_DRM_STORAGE_READ = 30, + JERROR_DRM_STORAGE_WRITE = 31, + JERROR_DRM_ZERO_SUBSAMPLES = 32, +}; + struct ListenerArgs { jbyteArray jSessionId; jbyteArray jData; @@ -98,6 +136,8 @@ private: DISALLOW_EVIL_CONSTRUCTORS(JDrm); }; +jint MediaErrorToJavaError(status_t err); + } // namespace android #endif // _ANDROID_MEDIA_DRM_H_ |