[libcamera-devel] [PATCH v3 4/8] android: camera_device: Translate Android format

Jacopo Mondi jacopo at jmondi.org
Fri Jun 5 16:09:58 CEST 2020


Translate the Android format code to the libcamera format code
at stream configuration time, using the translation map built at
camera device initialization time.

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 src/android/camera_device.cpp | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 7e3df2503468..bbfc2464c908 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -939,12 +939,26 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
 			       << ", format: " << utils::hex(stream->format);
 	}
 
-	/* Hardcode viewfinder role, collecting sizes from the stream config. */
+	/* Only one stream is supported. */
 	if (stream_list->num_streams != 1) {
 		LOG(HAL, Error) << "Only one stream supported";
 		return -EINVAL;
 	}
+	camera3_stream_t *camera3Stream = stream_list->streams[0];
+
+	/* Translate Android format code to libcamera pixel format. */
+	auto it = formatsMap_.find(camera3Stream->format);
+	if (it == formatsMap_.end()) {
+		LOG(HAL, Error) << "Requested format "
+				<< utils::hex(camera3Stream->format)
+				<< " not supported";
+		return -EINVAL;
+	}
 
+	/*
+	 * Hardcode viewfinder role, replacing the generated configuration
+	 * parameters with the ones requested by the Android framework.
+	 */
 	StreamRoles roles = { StreamRole::Viewfinder };
 	config_ = camera_->generateConfiguration(roles);
 	if (!config_ || config_->empty()) {
@@ -952,17 +966,10 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
 		return -EINVAL;
 	}
 
-	/* Only one stream is supported. */
-	camera3_stream_t *camera3Stream = stream_list->streams[0];
 	StreamConfiguration *streamConfiguration = &config_->at(0);
 	streamConfiguration->size.width = camera3Stream->width;
 	streamConfiguration->size.height = camera3Stream->height;
-
-	/*
-	 * \todo We'll need to translate from Android defined pixel format codes
-	 * to the libcamera image format codes. For now, do not change the
-	 * format returned from Camera::generateConfiguration().
-	 */
+	streamConfiguration->pixelFormat = it->second;
 
 	switch (config_->validate()) {
 	case CameraConfiguration::Valid:
-- 
2.27.0



More information about the libcamera-devel mailing list