[libcamera-devel] [PATCH v2 09/14] libcamera: v4l2_device: Avoid copy of V4L2ControlInfo
Jacopo Mondi
jacopo at jmondi.org
Sun Oct 13 16:01:31 CEST 2019
Hi Laurent,
On Sat, Oct 12, 2019 at 09:44:02PM +0300, Laurent Pinchart wrote:
> The V4L2Device::listControls() method creates an instance of
> V4L2ControlInfo and then inserts it in the device's list of controls.
> The insertion uses std::map::emplace(), but passes the V4L2ControlInfo,
> resulting in a copy being performed (using the copy constructor of
> V4L2ControlInfo).
>
> Optimise this by really constructing the V4L2ControlInfo in-place. The
> use of std::piecewise_construct is required for gcc-5 that seems to have
> trouble with std::map::emplace() on non-copyable values in this case.
Thanks for fixing this, even if it will go away in next patches I
think
Acked-by: Jacopo Mondi <jacopo at jmondi.org>
Thanks
j
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/libcamera/v4l2_device.cpp | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
> index fd4b9c6d5c62..3bd82ff23212 100644
> --- a/src/libcamera/v4l2_device.cpp
> +++ b/src/libcamera/v4l2_device.cpp
> @@ -352,8 +352,7 @@ void V4L2Device::listControls()
> ctrl.flags & V4L2_CTRL_FLAG_DISABLED)
> continue;
>
> - V4L2ControlInfo info(ctrl);
> - switch (info.type()) {
> + switch (ctrl.type) {
> case V4L2_CTRL_TYPE_INTEGER:
> case V4L2_CTRL_TYPE_BOOLEAN:
> case V4L2_CTRL_TYPE_MENU:
> @@ -364,12 +363,14 @@ void V4L2Device::listControls()
> break;
> /* \todo Support compound controls. */
> default:
> - LOG(V4L2, Debug) << "Control type '" << info.type()
> + LOG(V4L2, Debug) << "Control type '" << ctrl.type
> << "' not supported";
> continue;
> }
>
> - controls_.emplace(ctrl.id, info);
> + controls_.emplace(std::piecewise_construct,
> + std::forward_as_tuple(ctrl.id),
> + std::forward_as_tuple(ctrl));
> }
> }
>
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20191013/68e4e81d/attachment.sig>
More information about the libcamera-devel
mailing list