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);