Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb8a42b9 authored by Alex Ray's avatar Alex Ray Committed by Android (Google) Code Review
Browse files

Camera2: Fix JPEG Transport Header offset

Use offset into start of buffer after transport header

Bug: 7108816
Change-Id: I6f9778db313856eaeee31f6999e4e55678b09b26
parent 44b175c3
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -235,8 +235,11 @@ status_t JpegProcessor::processNewCapture(sp<Camera2Client> &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<Camera2Client> &client) {
    // 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 @@ 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;
}