Loading media/java/android/media/MediaCodec.java +2 −2 Original line number Diff line number Diff line Loading @@ -669,10 +669,10 @@ final public class MediaCodec { * Thrown when an internal codec error occurs. */ public final static class CodecException extends IllegalStateException { CodecException(int errorCode, int actionCode, String detailMessage) { CodecException(int errorCode, int actionCode, String detailMessage, int reason) { super(detailMessage); mErrorCode = errorCode; mReason = REASON_HARDWARE; mReason = reason; mActionCode = actionCode; // TODO get this from codec Loading media/jni/android_media_MediaCodec.cpp +19 −2 Original line number Diff line number Diff line Loading @@ -70,6 +70,11 @@ static struct CodecActionCodes { jint codecActionRecoverable; } gCodecActionCodes; static struct ExceptionReason { jint reasonHardware; jint reasonReclaimed; } gExceptionReason; struct fields_t { jfieldID context; jmethodID postEventFromNativeID; Loading Loading @@ -568,7 +573,7 @@ static jthrowable createCodecException( env, env->FindClass("android/media/MediaCodec$CodecException")); CHECK(clazz.get() != NULL); const jmethodID ctor = env->GetMethodID(clazz.get(), "<init>", "(IILjava/lang/String;)V"); const jmethodID ctor = env->GetMethodID(clazz.get(), "<init>", "(IILjava/lang/String;I)V"); CHECK(ctor != NULL); ScopedLocalRef<jstring> msgObj( Loading @@ -587,7 +592,9 @@ static jthrowable createCodecException( break; } return (jthrowable)env->NewObject(clazz.get(), ctor, err, actionCode, msgObj.get()); // TODO: propagate reason from MediaCodec. int reason = gExceptionReason.reasonHardware; return (jthrowable)env->NewObject(clazz.get(), ctor, err, actionCode, msgObj.get(), reason); } void JMediaCodec::handleCallback(const sp<AMessage> &msg) { Loading Loading @@ -1454,6 +1461,16 @@ static void android_media_MediaCodec_native_init(JNIEnv *env) { CHECK(field != NULL); gCodecActionCodes.codecActionRecoverable = env->GetStaticIntField(clazz.get(), field); field = env->GetStaticFieldID(clazz.get(), "REASON_HARDWARE", "I"); CHECK(field != NULL); gExceptionReason.reasonHardware = env->GetStaticIntField(clazz.get(), field); field = env->GetStaticFieldID(clazz.get(), "REASON_RECLAIMED", "I"); CHECK(field != NULL); gExceptionReason.reasonReclaimed = env->GetStaticIntField(clazz.get(), field); } static void android_media_MediaCodec_native_setup( Loading Loading
media/java/android/media/MediaCodec.java +2 −2 Original line number Diff line number Diff line Loading @@ -669,10 +669,10 @@ final public class MediaCodec { * Thrown when an internal codec error occurs. */ public final static class CodecException extends IllegalStateException { CodecException(int errorCode, int actionCode, String detailMessage) { CodecException(int errorCode, int actionCode, String detailMessage, int reason) { super(detailMessage); mErrorCode = errorCode; mReason = REASON_HARDWARE; mReason = reason; mActionCode = actionCode; // TODO get this from codec Loading
media/jni/android_media_MediaCodec.cpp +19 −2 Original line number Diff line number Diff line Loading @@ -70,6 +70,11 @@ static struct CodecActionCodes { jint codecActionRecoverable; } gCodecActionCodes; static struct ExceptionReason { jint reasonHardware; jint reasonReclaimed; } gExceptionReason; struct fields_t { jfieldID context; jmethodID postEventFromNativeID; Loading Loading @@ -568,7 +573,7 @@ static jthrowable createCodecException( env, env->FindClass("android/media/MediaCodec$CodecException")); CHECK(clazz.get() != NULL); const jmethodID ctor = env->GetMethodID(clazz.get(), "<init>", "(IILjava/lang/String;)V"); const jmethodID ctor = env->GetMethodID(clazz.get(), "<init>", "(IILjava/lang/String;I)V"); CHECK(ctor != NULL); ScopedLocalRef<jstring> msgObj( Loading @@ -587,7 +592,9 @@ static jthrowable createCodecException( break; } return (jthrowable)env->NewObject(clazz.get(), ctor, err, actionCode, msgObj.get()); // TODO: propagate reason from MediaCodec. int reason = gExceptionReason.reasonHardware; return (jthrowable)env->NewObject(clazz.get(), ctor, err, actionCode, msgObj.get(), reason); } void JMediaCodec::handleCallback(const sp<AMessage> &msg) { Loading Loading @@ -1454,6 +1461,16 @@ static void android_media_MediaCodec_native_init(JNIEnv *env) { CHECK(field != NULL); gCodecActionCodes.codecActionRecoverable = env->GetStaticIntField(clazz.get(), field); field = env->GetStaticFieldID(clazz.get(), "REASON_HARDWARE", "I"); CHECK(field != NULL); gExceptionReason.reasonHardware = env->GetStaticIntField(clazz.get(), field); field = env->GetStaticFieldID(clazz.get(), "REASON_RECLAIMED", "I"); CHECK(field != NULL); gExceptionReason.reasonReclaimed = env->GetStaticIntField(clazz.get(), field); } static void android_media_MediaCodec_native_setup( Loading