From eb8a42b934f20a15f40d656e2bc90f384f1ccb10 Mon Sep 17 00:00:00 2001 From: Alex Ray Date: Tue, 25 Sep 2012 12:37:14 -0700 Subject: [PATCH] Camera2: Fix JPEG Transport Header offset Use offset into start of buffer after transport header Bug: 7108816 Change-Id: I6f9778db313856eaeee31f6999e4e55678b09b26 --- services/camera/libcameraservice/camera2/JpegProcessor.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/services/camera/libcameraservice/camera2/JpegProcessor.cpp b/services/camera/libcameraservice/camera2/JpegProcessor.cpp index 27f0fd95cb..1fa56bdd20 100644 --- a/services/camera/libcameraservice/camera2/JpegProcessor.cpp +++ b/services/camera/libcameraservice/camera2/JpegProcessor.cpp @@ -235,8 +235,11 @@ status_t JpegProcessor::processNewCapture(sp &client) { // Find size of JPEG image uint8_t *jpegStart; // points to start of buffer in imgBuffer.data size_t jpegSize = findJpegSize(imgBuffer.data, imgBuffer.width, &jpegStart); + if (jpegSize == 0) { // failed to find size, default to whole buffer + jpegStart = imgBuffer.data; + jpegSize = imgBuffer.width; + } size_t heapSize = mCaptureHeap->getSize(); - if (jpegSize == 0) jpegSize = imgBuffer.width; if (jpegSize > heapSize) { ALOGW("%s: JPEG image is larger than expected, truncating " "(got %d, expected at most %d bytes)", @@ -247,7 +250,7 @@ status_t JpegProcessor::processNewCapture(sp &client) { // TODO: Optimize this to avoid memcopy sp captureBuffer = new MemoryBase(mCaptureHeap, 0, jpegSize); void* captureMemory = mCaptureHeap->getBase(); - memcpy(captureMemory, imgBuffer.data, jpegSize); + memcpy(captureMemory, jpegStart, jpegSize); mCaptureConsumer->unlockBuffer(imgBuffer); @@ -403,7 +406,8 @@ size_t JpegProcessor::findJpegSize(uint8_t* jpegBuffer, ALOGW("JPEG size %d too large, reducing to maxSize %d", size, maxSize); size = maxSize; } - ALOGV("Final JPEG size %d", size); + ALOGV("Final JPEG size %d, starting at %p", size, start); + *jpegStart = start; return size; } -- 2.11.0