summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2020-09-01 15:34:13 +0200
committerJacopo Mondi <jacopo@jmondi.org>2020-09-18 11:31:55 +0200
commit843565c6ec6813d77ff9417413198228d5428356 (patch)
tree6f6874bed55982e34f4ca295997e8327f748b495
parent3533fd42719075f3e05540d96e3116a3d4001476 (diff)
android: camera_device: Generate JPEG sizes
When producing the list of image resolutions to claim as supported by the camera HAL, the JPEG stream was assumed to be 'always valid' as, at the time, there was no JPEG support in place at all. With the introduction of support for JPEG compression, reporting non-valid sizes as supported obviously causes troubles. In order to avoid reporting non-supported resolutions as supported, produce the list of available JPEG sizes by using the ones supported by the YCbCr_420_888 format, from which the JPEG stream is encoded. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--src/android/camera_device.cpp40
1 files changed, 25 insertions, 15 deletions
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index ebebdac3..3be2dac2 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -370,16 +370,20 @@ int CameraDevice::initializeStreamConfigurations()
camera3Format.libcameraFormats;
/*
+ * JPEG is always supported, either produced directly by the
+ * camera, or encoded in the HAL.
+ */
+ if (androidFormat == HAL_PIXEL_FORMAT_BLOB) {
+ formatsMap_[androidFormat] = formats::MJPEG;
+ continue;
+ }
+
+ /*
* Test the libcamera formats that can produce images
* compatible with the format defined by Android.
*/
PixelFormat mappedFormat;
for (const PixelFormat &pixelFormat : libcameraFormats) {
- /* \todo Fixed mapping for JPEG. */
- if (androidFormat == HAL_PIXEL_FORMAT_BLOB) {
- mappedFormat = formats::MJPEG;
- break;
- }
/*
* The stream configuration size can be adjusted,
@@ -422,19 +426,25 @@ int CameraDevice::initializeStreamConfigurations()
cfg.size = res;
CameraConfiguration::Status status = cameraConfig->validate();
- /*
- * Unconditionally report we can produce JPEG.
- *
- * \todo The JPEG stream will be implemented as an
- * HAL-only stream, but some cameras can produce it
- * directly. As of now, claim support for JPEG without
- * inspecting where the JPEG stream is produced.
- */
- if (androidFormat != HAL_PIXEL_FORMAT_BLOB &&
- status != CameraConfiguration::Valid)
+ if (status != CameraConfiguration::Valid)
continue;
streamConfigurations_.push_back({ res, androidFormat });
+
+ /*
+ * If the format is HAL_PIXEL_FORMAT_YCbCr_420_888
+ * from which JPEG is produced, add an entry for
+ * the JPEG stream.
+ *
+ * \todo Wire the JPEG encoder to query the supported
+ * sizes provided a list of formats it can encode.
+ *
+ * \todo Support JPEG streams produced by the Camera
+ * natively.
+ */
+ if (androidFormat == HAL_PIXEL_FORMAT_YCbCr_420_888)
+ streamConfigurations_.push_back(
+ { res, HAL_PIXEL_FORMAT_BLOB });
}
}