From c7ba4a5c938d191bf0e477fc9b9aa4f0cba986ef Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Mon, 1 Jul 2013 09:23:55 -0700 Subject: [PATCH] Camera2Api: Creating a JPEG stream needs to use the right size JPEG streams have variable size, so use the HAL-provided max size to size the stream buffers. Change-Id: Ie6900bc9ece6e972eae93fca6aca779224c9bfc6 --- .../photography/CameraDeviceClient.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/services/camera/libcameraservice/photography/CameraDeviceClient.cpp b/services/camera/libcameraservice/photography/CameraDeviceClient.cpp index 3209a565a7..bd6b60ae04 100644 --- a/services/camera/libcameraservice/photography/CameraDeviceClient.cpp +++ b/services/camera/libcameraservice/photography/CameraDeviceClient.cpp @@ -337,8 +337,23 @@ status_t CameraDeviceClient::createStream(int width, int height, int format, // after each call, but only once we are done with all. int streamId = -1; - res = mDevice->createStream(anw, width, height, format, /*size*/1, - &streamId); + if (format == HAL_PIXEL_FORMAT_BLOB) { + // JPEG buffers need to be sized for maximum possible compressed size + CameraMetadata staticInfo = mDevice->info(); + camera_metadata_entry_t entry = staticInfo.find(ANDROID_JPEG_MAX_SIZE); + if (entry.count == 0) { + ALOGE("%s: Camera %d: Can't find maximum JPEG size in " + "static metadata!", __FUNCTION__, mCameraId); + return INVALID_OPERATION; + } + int32_t maxJpegSize = entry.data.i32[0]; + res = mDevice->createStream(anw, width, height, format, maxJpegSize, + &streamId); + } else { + // All other streams are a known size + res = mDevice->createStream(anw, width, height, format, /*size*/0, + &streamId); + } if (res == OK) { mStreamMap.add(bufferProducer->asBinder(), streamId); -- 2.11.0