[PATCH v3 16/23] libcamera: software_isp: Call Algorithm::prepare

Dan Scally dan.scally at ideasonboard.com
Tue Aug 13 11:25:40 CEST 2024


Hi Milan

On 17/07/2024 09:54, Milan Zamazal wrote:
> This patch adds Algorithm::prepare call for the defined algorithms.
> This is preparation only since there are currently no Algorithm based
> algorithms defined.
>
> Signed-off-by: Milan Zamazal <mzamazal at redhat.com>
> Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
> ---
>   include/libcamera/ipa/soft.mojom            | 1 +
>   src/ipa/simple/soft_simple.cpp              | 8 ++++++++
>   src/libcamera/software_isp/software_isp.cpp | 1 +
>   3 files changed, 10 insertions(+)
>
> diff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/soft.mojom
> index 34b91657..85c61824 100644
> --- a/include/libcamera/ipa/soft.mojom
> +++ b/include/libcamera/ipa/soft.mojom
> @@ -24,6 +24,7 @@ interface IPASoftInterface {
>   		=> (int32 ret);
>   
>   	[async] queueRequest(uint32 frame, libcamera.ControlList sensorControls);
> +	prepare(uint32 frame);
This function needs to be [async] - any calls made whilst the camera is running are meant to be 
asynchronous.
>   	[async] processStats(uint32 frame, uint32 bufferId, libcamera.ControlList sensorControls);
>   };
>   
> diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp
> index bd0dea5f..f4a6bdf4 100644
> --- a/src/ipa/simple/soft_simple.cpp
> +++ b/src/ipa/simple/soft_simple.cpp
> @@ -78,6 +78,7 @@ public:
>   	void stop() override;
>   
>   	void queueRequest(const uint32_t frame, const ControlList &controls) override;
> +	void prepare(const uint32_t frame) override;
>   	void processStats(const uint32_t frame, const uint32_t bufferId,
>   			  const ControlList &sensorControls) override;
>   
> @@ -278,6 +279,13 @@ void IPASoftSimple::queueRequest(const uint32_t frame, const ControlList &contro
>   		algo->queueRequest(context_, frame, frameContext, controls);
>   }
>   
> +void IPASoftSimple::prepare(const uint32_t frame)
> +{
> +	IPAFrameContext &frameContext = context_.frameContexts.get(frame);
> +	for (auto const &algo : algorithms())
> +		algo->prepare(context_, frame, frameContext, params_);
> +}
> +
>   void IPASoftSimple::processStats(
>   	[[maybe_unused]] const uint32_t frame,
>   	[[maybe_unused]] const uint32_t bufferId,
> diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp
> index 0b9c5fdf..7e653e1a 100644
> --- a/src/libcamera/software_isp/software_isp.cpp
> +++ b/src/libcamera/software_isp/software_isp.cpp
> @@ -353,6 +353,7 @@ void SoftwareIsp::stop()
>    */
>   void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output)
>   {
> +	ipa_->prepare(frame);
>   	debayer_->invokeMethod(&DebayerCpu::process,
>   			       ConnectionTypeQueued, frame, input, output, debayerParams_);
>   }


More information about the libcamera-devel mailing list