[PATCH v1 5/5] ipa: rkisp1: ccm: Ensure metadata contains valid ccm

Paul Elder paul.elder at ideasonboard.com
Fri Jul 19 10:03:36 CEST 2024


On Fri, Jul 12, 2024 at 04:32:06PM +0200, Stefan Klug wrote:
> When the colour temperature does not change between frames, the ccm
> inside the frame context is not updated and the metadata contains
> invalid data. Fix that by caching the ccm inside the active state.
> 
> Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>

> ---
>  src/ipa/rkisp1/algorithms/ccm.cpp | 7 +++++--
>  src/ipa/rkisp1/ipa_context.h      | 4 ++++
>  2 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/src/ipa/rkisp1/algorithms/ccm.cpp b/src/ipa/rkisp1/algorithms/ccm.cpp
> index 4c4e3f5029a4..e9b1e78b7ec1 100644
> --- a/src/ipa/rkisp1/algorithms/ccm.cpp
> +++ b/src/ipa/rkisp1/algorithms/ccm.cpp
> @@ -101,7 +101,7 @@ void Ccm::setParameters(rkisp1_params_cfg *params,
>  /**
>   * \copydoc libcamera::ipa::Algorithm::prepare
>   */
> -void Ccm::prepare(IPAContext &context, const uint32_t frame,
> +void Ccm::prepare([[maybe_unused]] IPAContext &context, const uint32_t frame,
>  		  IPAFrameContext &frameContext,
>  		  rkisp1_params_cfg *params)
>  {
> @@ -111,13 +111,16 @@ void Ccm::prepare(IPAContext &context, const uint32_t frame,
>  	 * \todo The colour temperature will likely be noisy, add filtering to
>  	 * avoid updating the CCM matrix all the time.
>  	 */
> -	if (frame > 0 && ct == ct_)
> +	if (frame > 0 && ct == ct_) {
> +		frameContext.ccm.ccm = context.activeState.ccm.ccm;
>  		return;
> +	}
>  
>  	ct_ = ct;
>  	Matrix<float, 3, 3> ccm = ccm_.get(ct);
>  	Matrix<int16_t, 3, 1> offsets = offsets_.get(ct);
>  
> +	context.activeState.ccm.ccm = ccm;
>  	frameContext.ccm.ccm = ccm;
>  
>  	setParameters(params, ccm, offsets);
> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h
> index 27a9bf62fc16..061efc0c578e 100644
> --- a/src/ipa/rkisp1/ipa_context.h
> +++ b/src/ipa/rkisp1/ipa_context.h
> @@ -97,6 +97,10 @@ struct IPAActiveState {
>  		bool autoEnabled;
>  	} awb;
>  
> +	struct {
> +		Matrix<float, 3, 3> ccm;
> +	} ccm;
> +
>  	struct {
>  		int8_t brightness;
>  		uint8_t contrast;
> -- 
> 2.43.0
> 


More information about the libcamera-devel mailing list