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
This commit is contained in:
@@ -234,34 +234,23 @@ void JNICameraContext::copyAndPost(JNIEnv* env, const sp<IMemory>& dataPtr, int
|
|||||||
if (heapBase != NULL) {
|
if (heapBase != NULL) {
|
||||||
const jbyte* data = reinterpret_cast<const jbyte*>(heapBase + offset);
|
const jbyte* data = reinterpret_cast<const jbyte*>(heapBase + offset);
|
||||||
|
|
||||||
if (!mManualBufferMode) {
|
if (msgType == CAMERA_MSG_RAW_IMAGE) {
|
||||||
LOGV("Allocating callback buffer");
|
obj = getCallbackBuffer(env, &mRawImageCallbackBuffers, size);
|
||||||
obj = env->NewByteArray(size);
|
} else if (msgType == CAMERA_MSG_PREVIEW_FRAME && mManualBufferMode) {
|
||||||
} else {
|
obj = getCallbackBuffer(env, &mCallbackBuffers, size);
|
||||||
switch (msgType) {
|
|
||||||
case CAMERA_MSG_PREVIEW_FRAME: {
|
|
||||||
obj = getCallbackBuffer(env, &mCallbackBuffers, size);
|
|
||||||
|
|
||||||
if (mCallbackBuffers.isEmpty()) {
|
if (mCallbackBuffers.isEmpty()) {
|
||||||
LOGV("Out of buffers, clearing callback!");
|
LOGV("Out of buffers, clearing callback!");
|
||||||
mCamera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP);
|
mCamera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP);
|
||||||
mManualCameraCallbackSet = false;
|
mManualCameraCallbackSet = false;
|
||||||
|
|
||||||
if (obj == NULL) {
|
if (obj == NULL) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case CAMERA_MSG_RAW_IMAGE: {
|
|
||||||
obj = getCallbackBuffer(env, &mRawImageCallbackBuffers, size);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
jniThrowRuntimeException(env, "Unsupported message type");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
LOGV("Allocating callback buffer");
|
||||||
|
obj = env->NewByteArray(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj == NULL) {
|
if (obj == NULL) {
|
||||||
|
|||||||
Reference in New Issue
Block a user