libcamera: v4l2_device: Avoid copy of V4L2ControlInfo
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. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Jacopo Mondi <jacopo@jmondi.org> Tested-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
parent
abe2c1b55c
commit
764ff6fdf3
1 changed files with 5 additions and 4 deletions
|
@ -352,8 +352,7 @@ void V4L2Device::listControls()
|
||||||
ctrl.flags & V4L2_CTRL_FLAG_DISABLED)
|
ctrl.flags & V4L2_CTRL_FLAG_DISABLED)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
V4L2ControlInfo info(ctrl);
|
switch (ctrl.type) {
|
||||||
switch (info.type()) {
|
|
||||||
case V4L2_CTRL_TYPE_INTEGER:
|
case V4L2_CTRL_TYPE_INTEGER:
|
||||||
case V4L2_CTRL_TYPE_BOOLEAN:
|
case V4L2_CTRL_TYPE_BOOLEAN:
|
||||||
case V4L2_CTRL_TYPE_MENU:
|
case V4L2_CTRL_TYPE_MENU:
|
||||||
|
@ -364,12 +363,14 @@ void V4L2Device::listControls()
|
||||||
break;
|
break;
|
||||||
/* \todo Support compound controls. */
|
/* \todo Support compound controls. */
|
||||||
default:
|
default:
|
||||||
LOG(V4L2, Debug) << "Control type '" << info.type()
|
LOG(V4L2, Debug) << "Control type '" << ctrl.type
|
||||||
<< "' not supported";
|
<< "' not supported";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
controls_.emplace(ctrl.id, info);
|
controls_.emplace(std::piecewise_construct,
|
||||||
|
std::forward_as_tuple(ctrl.id),
|
||||||
|
std::forward_as_tuple(ctrl));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue