[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