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
diff --git a/services/camera/libcameraservice/photography/CameraDeviceClient.cpp b/services/camera/libcameraservice/photography/CameraDeviceClient.cpp
index 3209a56..bd6b60a 100644
--- a/services/camera/libcameraservice/photography/CameraDeviceClient.cpp
+++ b/services/camera/libcameraservice/photography/CameraDeviceClient.cpp
@@ -337,8 +337,23 @@
// 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);