From 0c4e56d0baaa19fcf17234b38d634b7281e2ae37 Mon Sep 17 00:00:00 2001 From: Yin-Chia Yeh Date: Fri, 9 Jan 2015 15:21:27 -0800 Subject: Camera: make sure jpeg buffer size isn't too small Assuming the jpeg header can take up to 256KB, make sure we always allocate enough size for the image data. Bug: 18962703 Change-Id: I08eb3d198d12f71f3ab7266324e80fe7410bdc89 --- services/camera/libcameraservice/device3/Camera3Device.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'services/camera') diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index bba3905..53e6fa9 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -361,16 +361,15 @@ ssize_t Camera3Device::getJpegBufferSize(uint32_t width, uint32_t height) const return BAD_VALUE; } maxJpegBufferSize = jpegBufMaxSize.data.i32[0]; + assert(kMinJpegBufferSize < maxJpegBufferSize); // Calculate final jpeg buffer size for the given resolution. float scaleFactor = ((float) (width * height)) / (maxJpegResolution.width * maxJpegResolution.height); - ssize_t jpegBufferSize = scaleFactor * maxJpegBufferSize; - // Bound the buffer size to [MIN_JPEG_BUFFER_SIZE, maxJpegBufferSize]. + ssize_t jpegBufferSize = scaleFactor * (maxJpegBufferSize - kMinJpegBufferSize) + + kMinJpegBufferSize; if (jpegBufferSize > maxJpegBufferSize) { jpegBufferSize = maxJpegBufferSize; - } else if (jpegBufferSize < kMinJpegBufferSize) { - jpegBufferSize = kMinJpegBufferSize; } return jpegBufferSize; -- cgit v1.1