Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 94686d13 authored by Chong Zhang's avatar Chong Zhang
Browse files

MediaCodec: change onError cb to send CodecException

Bug: 11990118
Change-Id: I8b6112f126c2f473f64e2aad6ffcfbc3f1d6e64a
parent d336042f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -14336,7 +14336,7 @@ package android.media {
  public static abstract class MediaCodec.Callback {
    ctor public MediaCodec.Callback();
    method public abstract void onError(android.media.MediaCodec, int, int);
    method public abstract void onError(android.media.MediaCodec, android.media.MediaCodec.CodecException);
    method public abstract void onInputBufferAvailable(android.media.MediaCodec, int);
    method public abstract void onOutputBufferAvailable(android.media.MediaCodec, int, android.media.MediaCodec.BufferInfo);
    method public abstract void onOutputFormatChanged(android.media.MediaCodec, android.media.MediaFormat);
+3 −5
Original line number Diff line number Diff line
@@ -332,8 +332,7 @@ final public class MediaCodec {

                case CB_ERROR:
                {
                    mCallback.onError(mCodec,
                            msg.arg2 /* error */, (Integer) msg.obj /* actionCode */);
                    mCallback.onError(mCodec, (MediaCodec.CodecException) msg.obj);
                    break;
                }

@@ -1454,10 +1453,9 @@ final public class MediaCodec {
         * Called when the MediaCodec encountered an error
         *
         * @param codec The MediaCodec object.
         * @param error a device specific error code.
         * @param actionCode a value for use in {@link MediaCodec.CodecException}.
         * @param e The {@link MediaCodec.CodecException} object describing the error.
         */
        public abstract void onError(MediaCodec codec, int error, int actionCode);
        public abstract void onError(MediaCodec codec, CodecException e);

        /**
         * Called when the output format has changed
+14 −7
Original line number Diff line number Diff line
@@ -566,20 +566,27 @@ void JMediaCodec::handleCallback(const sp<AMessage> &msg) {

        case MediaCodec::CB_ERROR:
        {
            CHECK(msg->findInt32("err", &arg2));

            int32_t actionCode;
            int32_t err, actionCode;
            CHECK(msg->findInt32("err", &err));
            CHECK(msg->findInt32("actionCode", &actionCode));

            // use Integer object to pass the action code
            ScopedLocalRef<jclass> clazz(
                    env, env->FindClass("java/lang/Integer"));
            jmethodID ctor = env->GetMethodID(clazz.get(), "<init>", "(I)V");
            obj = env->NewObject(clazz.get(), ctor, actionCode);
                    env, env->FindClass("android/media/MediaCodec$CodecException"));
            jmethodID ctor = env->GetMethodID(clazz.get(), "<init>", "(IILjava/lang/String;)V");

            AString str;
            const char *detail = "Unknown error";
            if (msg->findString("detail", &str)) {
                detail = str.c_str();
            }
            jstring msgObj = env->NewStringUTF(detail);

            obj = env->NewObject(clazz.get(), ctor, err, actionCode, msgObj);

            if (obj == NULL) {
                if (env->ExceptionCheck()) {
                    ALOGE("Could not create Integer object for actionCode.");
                    ALOGE("Could not create CodecException object.");
                    env->ExceptionClear();
                }
                jniThrowException(env, "java/lang/IllegalStateException", NULL);