Merge "libmedia_jni: map drm MediaError to Java error" into sc-dev

This commit is contained in:
Robert Shih
2021-02-19 03:51:23 +00:00
committed by Android (Google) Code Review
2 changed files with 86 additions and 1 deletions

View File

@@ -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));
}

View File

@@ -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_