[libcamera-devel] [PATCH 01/11] pipeline: ipu3: Check if sensor supports test pattern control

Daniel Scally dan.scally at ideasonboard.com
Sun Mar 19 00:40:04 CET 2023


The IPU3 pipeline calls CameraSensor::setTestPatternMode() in ::start().
That control is not a libcamera mandatory control and so might not be
present for a sensor. Check for its presence before trying to set the
control to avoid uneccessary failures.

Fixes: acf8d028e ("libcamera: pipeline: ipu3: Apply a requested test pattern mode")
Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
---
I'll patch this control into the ov7251 driver upstream as the sensor does have
a test pattern mode, but still - it's not mandatory!

 src/libcamera/pipeline/ipu3/ipu3.cpp | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 355cb0cb..d0d55651 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -722,10 +722,14 @@ int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlLis
 	int ret;
 
 	/* Disable test pattern mode on the sensor, if any. */
-	ret = cio2->sensor()->setTestPatternMode(
-		controls::draft::TestPatternModeEnum::TestPatternModeOff);
-	if (ret)
-		return ret;
+	const ControlInfoMap &sensorControls = cio2->sensor()->controls();
+
+	if (sensorControls.find(&controls::draft::TestPatternMode) != sensorControls.end()) {
+		ret = cio2->sensor()->setTestPatternMode(
+			controls::draft::TestPatternModeEnum::TestPatternModeOff);
+		if (ret)
+			return ret;
+	}
 
 	/* Allocate buffers for internal pipeline usage. */
 	ret = allocateBuffers(camera);
-- 
2.34.1



More information about the libcamera-devel mailing list