[libcamera-devel] [PATCH v3 12/23] libcamera: ipu3: Drop DelayedControls

Jacopo Mondi jacopo at jmondi.org
Thu Jun 30 15:38:51 CEST 2022


Now that the CameraSensor class exposes the DelayedControl interface
use the sensor to operate controls.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 src/libcamera/pipeline/ipu3/ipu3.cpp | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 85e5f8a70408..a5a35b6585c6 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -26,7 +26,6 @@
 #include "libcamera/internal/camera.h"
 #include "libcamera/internal/camera_lens.h"
 #include "libcamera/internal/camera_sensor.h"
-#include "libcamera/internal/delayed_controls.h"
 #include "libcamera/internal/device_enumerator.h"
 #include "libcamera/internal/framebuffer.h"
 #include "libcamera/internal/ipa_manager.h"
@@ -74,7 +73,6 @@ public:
 	bool supportsFlips_;
 	Transform rotationTransform_;
 
-	std::unique_ptr<DelayedControls> delayedCtrls_;
 	IPU3Frames frameInfos_;
 
 	std::unique_ptr<ipa::ipu3::IPAProxyIPU3> ipa_;
@@ -785,8 +783,6 @@ int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] const ControlLis
 	if (ret)
 		goto error;
 
-	data->delayedCtrls_->reset();
-
 	/*
 	 * Start the ImgU video devices, buffers will be queued to the
 	 * ImgU output and viewfinder when requests will be queued.
@@ -1136,9 +1132,6 @@ int PipelineHandlerIPU3::registerCameras()
 			{ V4L2_CID_EXPOSURE, { 2, false } },
 		};
 
-		data->delayedCtrls_ =
-			std::make_unique<DelayedControls>(cio2->sensor()->device(),
-							  params);
 		data->cio2_.frameStart().connect(data.get(),
 						 &IPU3CameraData::frameStart);
 
@@ -1258,9 +1251,11 @@ void IPU3CameraData::setSensorControls([[maybe_unused]] unsigned int id,
 				       const ControlList &sensorControls,
 				       const ControlList &lensControls)
 {
-	delayedCtrls_->push(sensorControls);
+	CameraSensor *sensor = cio2_.sensor();
+
+	sensor->pushControls(sensorControls);
 
-	CameraLens *focusLens = cio2_.sensor()->focusLens();
+	CameraLens *focusLens = sensor->focusLens();
 	if (!focusLens)
 		return;
 
@@ -1375,7 +1370,7 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer)
 	request->metadata().set(controls::SensorTimestamp,
 				buffer->metadata().timestamp);
 
-	info->effectiveSensorControls = delayedCtrls_->get(buffer->metadata().sequence);
+	info->effectiveSensorControls = cio2_.sensor()->getControls(buffer->metadata().sequence);
 
 	if (request->findBuffer(&rawStream_))
 		pipe()->completeBuffer(request, buffer);
@@ -1441,7 +1436,7 @@ void IPU3CameraData::statBufferReady(FrameBuffer *buffer)
  */
 void IPU3CameraData::frameStart(uint32_t sequence)
 {
-	delayedCtrls_->applyControls(sequence);
+	cio2_.sensor()->frameStart(sequence);
 
 	if (processingRequests_.empty())
 		return;
-- 
2.36.1



More information about the libcamera-devel mailing list