[libcamera-devel] [PATCH v5 4/5] ipa: raspberrypi: Add Merge method to RPiController::Metadata
Naushir Patuck
naush at raspberrypi.com
Tue Apr 27 11:26:01 CEST 2021
Hi Laurent,
Thank you for your review feedback.
On Tue, 27 Apr 2021 at 08:18, Laurent Pinchart <
laurent.pinchart at ideasonboard.com> wrote:
> Hi Naush,
>
> Thank you for the patch.
>
> On Mon, Apr 19, 2021 at 02:34:50PM +0100, Naushir Patuck wrote:
> > Add a new Merge method to the Metadata class. This will move all
> > key/value pairs between a source and destination metadata object. Once
> > complete, the source Metadata object will be empty.
> >
> > Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> > ---
> > src/ipa/raspberrypi/controller/metadata.hpp | 12 ++++++++++++
> > 1 file changed, 12 insertions(+)
> >
> > diff --git a/src/ipa/raspberrypi/controller/metadata.hpp
> b/src/ipa/raspberrypi/controller/metadata.hpp
> > index 319f2320fc70..1d3e941b3e52 100644
> > --- a/src/ipa/raspberrypi/controller/metadata.hpp
> > +++ b/src/ipa/raspberrypi/controller/metadata.hpp
> > @@ -75,6 +75,18 @@ public:
> > return *this;
> > }
> >
> > + void Merge(Metadata &other)
> > + {
> > + std::lock_guard<std::mutex> lock(mutex_);
> > + std::lock_guard<std::mutex> other_lock(other.mutex_);
> > +
> > + for (auto const &kv: other.data_)
> > + data_[kv.first] = std::move(kv.second);
>
> Can't you use
>
> data_.merge(other.data_);
>
Sadly not. std::map::merge() will not overwrite elements that are present
in the destination, which is what I want. None of the insert type methods
do actually. I toyed with doing something like:
other.data_.merge(data_);
std::swap(other.data_, data_);
which would achieve what I want, but thought it might look a bit cryptic.
Not sure about any performance benefits from using this construct vs
the explicit loop.
Perhaps I should be a bit clearer with the method name, and call it
Overwrite()? Thoughts?
Regards,
Naush
>
> N
>
> > +
> > + /* Render the other object as empty now! */
> > + other.data_.clear();
> > + }
> > +
> > template<typename T>
> > T *GetLocked(std::string const &tag)
> > {
>
> --
> Regards,
>
> Laurent Pinchart
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20210427/db01184c/attachment.htm>
More information about the libcamera-devel
mailing list