[libcamera-devel] [PATCH v8 3/6] libcamera: CameraSensorProperties: Add table of v4l2 index and test pattern

Hirokazu Honda hiroh at chromium.org
Thu Jun 10 10:25:36 CEST 2021


The V4L2 specification defines the sensor test pattern modes
through a menu control, where a numerical index is associated to
a string that describes the test pattern. The index-to-pattern
mapping is driver specific and requires a corresponding representation
in the library.

Add to the static list of CameraSensorProperties a map of indexes to
libcamera::controls::TestPatternModes values to be able to map the
indexes returned by the driver to the corresponding test pattern mode.

Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 .../internal/camera_sensor_properties.h       |  2 ++
 src/libcamera/camera_sensor_properties.cpp    | 33 +++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h
index f5e242cb..67c77920 100644
--- a/include/libcamera/internal/camera_sensor_properties.h
+++ b/include/libcamera/internal/camera_sensor_properties.h
@@ -7,6 +7,7 @@
 #ifndef __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__
 #define __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__
 
+#include <map>
 #include <string>
 
 #include <libcamera/geometry.h>
@@ -17,6 +18,7 @@ struct CameraSensorProperties {
 	static const CameraSensorProperties *get(const std::string &sensor);
 
 	Size unitCellSize;
+	std::map<int32_t, int32_t> testPatternModes;
 };
 
 } /* namespace libcamera */
diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp
index a2c04009..f660743a 100644
--- a/src/libcamera/camera_sensor_properties.cpp
+++ b/src/libcamera/camera_sensor_properties.cpp
@@ -9,6 +9,8 @@
 
 #include <map>
 
+#include <libcamera/control_ids.h>
+
 #include "libcamera/internal/log.h"
 
 /**
@@ -34,6 +36,11 @@ LOG_DEFINE_CATEGORY(CameraSensorProperties)
  *
  * \var CameraSensorProperties::unitCellSize
  * \brief The physical size of a pixel, including pixel edges, in nanometers.
+ *
+ * \var CameraSensorProperties::testPatternModes
+ * \brief Map that associates the indexes of the sensor test pattern modes as
+ * returned by V4L2_CID_TEST_PATTERN with the corresponding TestPattern
+ * control value
  */
 
 /**
@@ -47,18 +54,44 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
 	static const std::map<std::string, const CameraSensorProperties> sensorProps = {
 		{ "imx219", {
 			.unitCellSize = { 1120, 1120 },
+			.testPatternModes = {
+				{ 0, controls::draft::TestPatternModeOff },
+				{ 1, controls::draft::TestPatternModeColorBars },
+				{ 2, controls::draft::TestPatternModeSolidColor },
+				{ 3, controls::draft::TestPatternModeColorBarsFadeToGray },
+				{ 4, controls::draft::TestPatternModePn9 },
+			},
 		} },
 		{ "imx258", {
 			.unitCellSize = { 1120, 1120 },
+			/* \todo fill test pattern modes for imx258. */
+			.testPatternModes = {},
 		} },
 		{ "ov5670", {
 			.unitCellSize = { 1120, 1120 },
+			.testPatternModes = {
+				{ 0, controls::draft::TestPatternModeOff },
+				{ 1, controls::draft::TestPatternModeColorBars },
+			},
 		} },
 		{ "ov13858", {
 			.unitCellSize = { 1120, 1120 },
+			.testPatternModes =  {
+				{ 0, controls::draft::TestPatternModeOff },
+				{ 1, controls::draft::TestPatternModeColorBars },
+			},
 		} },
 		{ "ov5693", {
 			.unitCellSize = { 1400, 1400 },
+			.testPatternModes = {
+				{ 0, controls::draft::TestPatternModeOff },
+				{ 2, controls::draft::TestPatternModeColorBars },
+				/*
+				 * No corresponding test pattern mode for
+				 * 1: "Random data" and 3: "Colour Bars with
+				 * Rolling Bar".
+				 */
+			},
 		} },
 	};
 
-- 
2.32.0.rc1.229.g3e70b5a671-goog



More information about the libcamera-devel mailing list