[libcamera-devel] [PATCH v2 1/1] pipeline: raspberrypi: Create empty control lists correctly

Naushir Patuck naush at raspberrypi.com
Tue Oct 5 11:53:36 CEST 2021


Hi David,

Thank you for this fix.

On Tue, 5 Oct 2021 at 09:57, David Plowman <david.plowman at raspberrypi.com>
wrote:

> When the pipeline handler start() method is supplied with a NULL list
> of controls, we send an empty control list to the IPA. When the IPA is
> running in isolated mode the control list goes through the data
> serializer, for which it must be marked correctly as a list of
> "controls::controls", otherwise the IPA process will abort.
>
> The IPA has a similar problem returning a control list in its
> configure() method. We must be careful to initialise it properly even
> when empty.
>
> Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>

Reviewed-by: Naushir Patuck <naush at raspberrypi.com>


> ---
>  src/ipa/raspberrypi/raspberrypi.cpp                | 13 +++++++++----
>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp |  3 ++-
>  2 files changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp
> b/src/ipa/raspberrypi/raspberrypi.cpp
> index 047123ab..fed82e22 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> @@ -389,21 +389,26 @@ int IPARPi::configure(const IPACameraSensorInfo
> &sensorInfo,
>         /* Pass the camera mode to the CamHelper to setup algorithms. */
>         helper_->SetCameraMode(mode_);
>
> +       /*
> +        * Initialise this ControlList correctly, even if empty, in case
> the IPA is
> +        * running is isolation mode (passing the ControlList through the
> IPC layer).
> +        */
> +       ControlList ctrls(sensorCtrls_);
> +
>         if (firstStart_) {
>                 /* Supply initial values for frame durations. */
>                 applyFrameDurations(defaultMinFrameDuration,
> defaultMaxFrameDuration);
>
>                 /* Supply initial values for gain and exposure. */
> -               ControlList ctrls(sensorCtrls_);
>                 AgcStatus agcStatus;
>                 agcStatus.shutter_time = defaultExposureTime;
>                 agcStatus.analogue_gain = defaultAnalogueGain;
>                 applyAGC(&agcStatus, ctrls);
> -
> -               ASSERT(controls);
> -               *controls = std::move(ctrls);
>         }
>
> +       ASSERT(controls);
> +       *controls = std::move(ctrls);
> +
>         return 0;
>  }
>
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 0bdfa727..1634ca98 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -825,7 +825,8 @@ int PipelineHandlerRPi::start(Camera *camera, const
> ControlList *controls)
>
>         /* Start the IPA. */
>         ipa::RPi::StartConfig startConfig;
> -       data->ipa_->start(controls ? *controls : ControlList{},
> &startConfig);
> +       data->ipa_->start(controls ? *controls : ControlList{
> controls::controls },
> +                         &startConfig);
>
>         /* Apply any gain/exposure settings that the IPA may have passed
> back. */
>         if (!startConfig.controls.empty())
> --
> 2.20.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20211005/433f71d0/attachment.htm>


More information about the libcamera-devel mailing list