Merge "Make sure we only release the HDCP module once shutdown has completed." into jb-mr1-dev
diff --git a/services/camera/libcameraservice/camera2/JpegProcessor.cpp b/services/camera/libcameraservice/camera2/JpegProcessor.cpp
index 27f0fd9..1fa56bd 100644
--- a/services/camera/libcameraservice/camera2/JpegProcessor.cpp
+++ b/services/camera/libcameraservice/camera2/JpegProcessor.cpp
@@ -235,8 +235,11 @@
     // 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 @@
     // TODO: Optimize this to avoid memcopy
     sp<MemoryBase> 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 @@
         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;
 }