Skip to content

Commit 5f0ef5f

Browse files
author
Wu-cheng Li
committed
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
1 parent a2520fc commit 5f0ef5f

File tree

1 file changed

+14
-25
lines changed

1 file changed

+14
-25
lines changed

core/jni/android_hardware_Camera.cpp

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -234,34 +234,23 @@ void JNICameraContext::copyAndPost(JNIEnv* env, const sp<IMemory>& dataPtr, int
234234
if (heapBase != NULL) {
235235
const jbyte* data = reinterpret_cast<const jbyte*>(heapBase + offset);
236236

237-
if (!mManualBufferMode) {
238-
LOGV("Allocating callback buffer");
239-
obj = env->NewByteArray(size);
240-
} else {
241-
switch (msgType) {
242-
case CAMERA_MSG_PREVIEW_FRAME: {
243-
obj = getCallbackBuffer(env, &mCallbackBuffers, size);
244-
245-
if (mCallbackBuffers.isEmpty()) {
246-
LOGV("Out of buffers, clearing callback!");
247-
mCamera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP);
248-
mManualCameraCallbackSet = false;
249-
250-
if (obj == NULL) {
251-
return;
252-
}
253-
}
254-
break;
255-
}
256-
case CAMERA_MSG_RAW_IMAGE: {
257-
obj = getCallbackBuffer(env, &mRawImageCallbackBuffers, size);
258-
break;
259-
}
260-
default: {
261-
jniThrowRuntimeException(env, "Unsupported message type");
237+
if (msgType == CAMERA_MSG_RAW_IMAGE) {
238+
obj = getCallbackBuffer(env, &mRawImageCallbackBuffers, size);
239+
} else if (msgType == CAMERA_MSG_PREVIEW_FRAME && mManualBufferMode) {
240+
obj = getCallbackBuffer(env, &mCallbackBuffers, size);
241+
242+
if (mCallbackBuffers.isEmpty()) {
243+
LOGV("Out of buffers, clearing callback!");
244+
mCamera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP);
245+
mManualCameraCallbackSet = false;
246+
247+
if (obj == NULL) {
262248
return;
263249
}
264250
}
251+
} else {
252+
LOGV("Allocating callback buffer");
253+
obj = env->NewByteArray(size);
265254
}
266255

267256
if (obj == NULL) {

0 commit comments

Comments
 (0)