[PATCH v2 3/4] ipa: rkisp1: Fix algorithm controls vanish after configure

Kieran Bingham kieran.bingham at ideasonboard.com
Thu May 23 01:01:51 CEST 2024


Quoting Stefan Klug (2024-05-22 15:54:37)
> std::map::merge(source) has the side effect of actually moving items from
> source to target. In this case the controls where removed from the source maps

s/where/were/

> on the first call to updateControls() and on the second call to
> updateControls() they where missing in the source maps and therefore also

s/where/were/

> removed from the camera. Fix this by using insert() instead of merge(). This is
> most likely cheaper than copy-contructing the source map.

Hrm, https://libcamera.org/api-html/classlibcamera_1_1ControlList.html#afb929046d68faa5dea1b43ce4028721f
states that merge is a copy when working on a ControlList - but I see here
we're working on a ControlInfoMap ...
https://en.cppreference.com/w/cpp/container/map/merge and the behaviour
is different :-(

 
> Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> ---
>  src/ipa/rkisp1/rkisp1.cpp | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
> index 6687c91e..17474408 100644
> --- a/src/ipa/rkisp1/rkisp1.cpp
> +++ b/src/ipa/rkisp1/rkisp1.cpp
> @@ -427,7 +427,7 @@ void IPARkISP1::updateControls(const IPACameraSensorInfo &sensorInfo,
>                                                               frameDurations[1],
>                                                               frameDurations[2]);
>  
> -       ctrlMap.merge(context_.ctrlMap);
> +       ctrlMap.insert(context_.ctrlMap.begin(), context_.ctrlMap.end());

I was going to suggest a comment above the .insert() due to the
confusion that took place, but it's hard to think of something suitable
so maybe it's not helfpul.

If this fixes a bug/issue - please add a fixes tag so I can highlight it
in the next release notes.

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>


>         *ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);
>  }
>  
> -- 
> 2.40.1
>


More information about the libcamera-devel mailing list