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
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 884fa78..fe60381 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -234,34 +234,23 @@
         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: {
-                        obj = getCallbackBuffer(env, &mCallbackBuffers, size);
+            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()) {
-                            LOGV("Out of buffers, clearing callback!");
-                            mCamera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP);
-                            mManualCameraCallbackSet = false;
+                if (mCallbackBuffers.isEmpty()) {
+                    LOGV("Out of buffers, clearing callback!");
+                    mCamera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP);
+                    mManualCameraCallbackSet = false;
 
-                            if (obj == NULL) {
-                                return;
-                            }
-                        }
-                        break;
-                    }
-                    case CAMERA_MSG_RAW_IMAGE: {
-                        obj = getCallbackBuffer(env, &mRawImageCallbackBuffers, size);
-                        break;
-                    }
-                    default: {
-                        jniThrowRuntimeException(env, "Unsupported message type");
+                    if (obj == NULL) {
                         return;
                     }
                 }
+            } else {
+                LOGV("Allocating callback buffer");
+                obj = env->NewByteArray(size);
             }
 
             if (obj == NULL) {