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

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Jun 30 23:14:47 CEST 2022


Quoting Jacopo Mondi via libcamera-devel (2022-06-30 14:38:51)
> 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 } },
>                 };
>  

params can be removed above too.


> -               data->delayedCtrls_ =
> -                       std::make_unique<DelayedControls>(cio2->sensor()->device(),
> -                                                         params);
>                 data->cio2_.frameStart().connect(data.get(),
>                                                  &IPU3CameraData::frameStart);

Does the FrameStart event only come from the cio2_ video device?
It seems like something that should/could already be handled directly
by the CameraSensor class? (But maybe the sensor subdevs don't expose it
as it's an event determined by the CSI2 recievers?)

> @@ -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);

I wonder if this could be tied into the CameraSensor class directly
somehow ... but this is fine I think for now.


>  
>         if (processingRequests_.empty())
>                 return;
> -- 
> 2.36.1
>


More information about the libcamera-devel mailing list