Merge "libmedia_jni: map drm MediaError to Java error" into sc-dev
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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_
|
||||
|
||||
Reference in New Issue
Block a user