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

Commit 5f0ef5fb authored by Wu-cheng Li's avatar Wu-cheng Li
Browse files

Fix jpeg callback is lost if setPreviewCallbackWithBuffer has been called.

mManualBufferMode is only for CAMERA_MSG_PREVIEW_FRAME. If it is
CAMERA_MSG_COMPRESSED_IMAGE, a new byte array should be allocated.

bug:5340480

Change-Id: I4f33bd6297bfd30505e0e15ae46012ea44e85962
parent a2520fc1
Loading
Loading
Loading
Loading
+14 −25
Original line number Diff line number Diff line
@@ -234,12 +234,9 @@ void JNICameraContext::copyAndPost(JNIEnv* env, const sp<IMemory>& dataPtr, int
        if (heapBase != NULL) {
            const jbyte* data = reinterpret_cast<const jbyte*>(heapBase + offset);

            if (!mManualBufferMode) {
                LOGV("Allocating callback buffer");
                obj = env->NewByteArray(size);
            } else {
                switch (msgType) {
                    case CAMERA_MSG_PREVIEW_FRAME: {
            if (msgType == CAMERA_MSG_RAW_IMAGE) {
                obj = getCallbackBuffer(env, &mRawImageCallbackBuffers, size);
            } else if (msgType == CAMERA_MSG_PREVIEW_FRAME && mManualBufferMode) {
                obj = getCallbackBuffer(env, &mCallbackBuffers, size);

                if (mCallbackBuffers.isEmpty()) {
@@ -251,17 +248,9 @@ void JNICameraContext::copyAndPost(JNIEnv* env, const sp<IMemory>& dataPtr, int
                        return;
                    }
                }
                        break;
                    }
                    case CAMERA_MSG_RAW_IMAGE: {
                        obj = getCallbackBuffer(env, &mRawImageCallbackBuffers, size);
                        break;
                    }
                    default: {
                        jniThrowRuntimeException(env, "Unsupported message type");
                        return;
                    }
                }
            } else {
                LOGV("Allocating callback buffer");
                obj = env->NewByteArray(size);
            }

            if (obj == NULL) {