[libcamera-devel] [RFC PATCH 07/12] ipa: rkisp1: Convert to use the FCQueue

Umang Jain umang.jain at ideasonboard.com
Fri Jul 22 23:06:39 CEST 2022


Hi Kieran,

On 7/21/22 17:43, Kieran Bingham via libcamera-devel wrote:
> Establish a queue of FrameContexts using the new FCQueue and use it to
> supply the FrameContext to the algorithms.
>
> The algorithms on the RKISP1 do not use this yet themselves, but are
> able to do so after the introduction of this patch.
>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
>   src/ipa/rkisp1/ipa_context.h | 2 ++
>   src/ipa/rkisp1/rkisp1.cpp    | 9 +++++----
>   2 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h
> index a64dbc75fdd2..dc4fa5d1ddba 100644
> --- a/src/ipa/rkisp1/ipa_context.h
> +++ b/src/ipa/rkisp1/ipa_context.h
> @@ -72,6 +72,8 @@ struct RKISP1FrameContext : public IPAFrameContext {
>   struct IPAContext {
>   	IPASessionConfiguration configuration;
>   	IPAActiveState activeState;
> +
> +	FCQueue<RKISP1FrameContext> frameContexts;
>   };
>   
>   } /* namespace ipa::rkisp1 */
> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
> index 7481e67e70f6..a2b7b25a53e5 100644
> --- a/src/ipa/rkisp1/rkisp1.cpp
> +++ b/src/ipa/rkisp1/rkisp1.cpp
> @@ -205,7 +205,9 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info,
>   		<< " Gain: " << minGain << "-" << maxGain;
>   
>   	/* Clean context at configuration */
> -	context_ = {};
> +	context_.configuration = {};
> +	context_.activeState = {};
> +	context_.frameContexts.clear();


  stop() too needs this

>   
>   	/* Set the hardware revision for the algorithms. */
>   	context_.configuration.hw.revision = hwRevision_;
> @@ -290,6 +292,8 @@ void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)
>   void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId,
>   				   const ControlList &sensorControls)
>   {
> +	RKISP1FrameContext &frameContext = context_.frameContexts.get(frame);
> +
>   	const rkisp1_stat_buffer *stats =
>   		reinterpret_cast<rkisp1_stat_buffer *>(
>   			mappedBuffers_.at(bufferId).planes()[0].data());
> @@ -301,9 +305,6 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId
>   
>   	unsigned int aeState = 0;
>   
> -	/* \todo Obtain the frame context to pass to process from the FCQueue */
> -	RKISP1FrameContext frameContext;
> -
>   	for (auto const &algo : algorithms())
>   		algo->process(context_, frameContext, stats);
>   


More information about the libcamera-devel mailing list