Loading media/jni/android_media_MediaDrm.cpp +46 −1 Original line number Diff line number Diff line Loading @@ -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)); } Loading media/jni/android_media_MediaDrm.h +40 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -98,6 +136,8 @@ private: DISALLOW_EVIL_CONSTRUCTORS(JDrm); }; jint MediaErrorToJavaError(status_t err); } // namespace android #endif // _ANDROID_MEDIA_DRM_H_ Loading
media/jni/android_media_MediaDrm.cpp +46 −1 Original line number Diff line number Diff line Loading @@ -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)); } Loading
media/jni/android_media_MediaDrm.h +40 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -98,6 +136,8 @@ private: DISALLOW_EVIL_CONSTRUCTORS(JDrm); }; jint MediaErrorToJavaError(status_t err); } // namespace android #endif // _ANDROID_MEDIA_DRM_H_