From 6f37557f029f5b7c2801dee6944c1539bde9c89d Mon Sep 17 00:00:00 2001 From: Wu-cheng Li Date: Wed, 31 Aug 2011 15:53:48 +0800 Subject: Fix the bug that jpeg size is always 6.8MB. Allocate an exact size of jpeg heap before passing to camera service. bug:5160482 Change-Id: Id78f60b03a90533cb62f0c6489c9680692583c23 --- libcamera/SecCameraHWInterface.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'libcamera') diff --git a/libcamera/SecCameraHWInterface.cpp b/libcamera/SecCameraHWInterface.cpp index 7922896..875fbcd 100755 --- a/libcamera/SecCameraHWInterface.cpp +++ b/libcamera/SecCameraHWInterface.cpp @@ -1166,16 +1166,18 @@ int CameraHardwareSec::pictureThread() if (JpegExifSize < 0) { ret = UNKNOWN_ERROR; + ExifHeap->release(ExifHeap); goto out; } - unsigned char *ExifStart = (unsigned char *)JpegHeap->data + 2; - unsigned char *ImageStart = ExifStart + JpegExifSize; - - memmove(ImageStart, ExifStart, JpegImageSize - 2); - memcpy(ExifStart, ExifHeap->data, JpegExifSize); - - mDataCb(CAMERA_MSG_COMPRESSED_IMAGE, JpegHeap, 0, NULL, mCallbackCookie); + camera_memory_t *mem = mGetMemoryCb(-1, JpegImageSize + JpegExifSize, 1, 0); + uint8_t *ptr = (uint8_t *) mem->data; + memcpy(ptr, JpegHeap->data, 2); ptr += 2; + memcpy(ptr, ExifHeap->data, JpegExifSize); ptr += JpegExifSize; + memcpy(ptr, (uint8_t *) JpegHeap->data + 2, JpegImageSize - 2); + mDataCb(CAMERA_MSG_COMPRESSED_IMAGE, mem, 0, NULL, mCallbackCookie); + mem->release(mem); + ExifHeap->release(ExifHeap); } LOG_TIME_END(0) -- cgit v1.1