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

Dan Scally dan.scally at ideasonboard.com
Fri Jul 12 17:07:55 CEST 2024


Hi Stefan


On 12/07/2024 15:32, 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>
> ---


Makes sense to me: Reviewed-by: Daniel Scally <dan.scally 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;


More information about the libcamera-devel mailing list