[libcamera-devel] [PATCH v3 0/6] Add support for V4L2 Controls
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu Jun 13 13:24:49 CEST 2019
Hi Jacopo,
On 13/06/2019 12:20, Jacopo Mondi wrote:
> Hello,
> new V4L2 controls support iteration.
>
> The patches are based on the in-review:
> [PATCH v4 0/2] libcamera: Introduce V4L2Device base class
>
> This new version changes quite a few things, and is the result of the combined
> review effort from everyone! Thanks a lot.
>
> Most notable changes:
> - Drop the support for compound and string controls
> - As a consequence drop template control values: everything is now stored
> in a long int
> - Decouple the control value from its information as Kieran has done for the
> libcamera control
> - Cache all controls info at V4L2 device open time to avoid extra calls to
> VIDIOC_QUERY_EXT_CTRL
> - Support creation on controls without value to be provided to getControls
> - Change V4L2Device::getControls() to accept a V4L2Controls as setControls()
> does.
>
Ohh - excellent lots to look at.
I've run out of time to rebase my work on top of this for this week, but
I'll certainly do that next week.
> The new interface is demonstrated by the last patch, and I report it here
> a snippet:
>
> /* --- Get control values --- */
> V4L2Controls controls;
> controls.add(V4L2_CID_EXPOSURE);
> controls.add(V4L2_CID_ANALOGUE_GAIN);
> cio2->sensor_->getControls(&controls);
>
> for (const V4L2Control &ctrl : controls) {
> unsigned int id = ctrl.id();
> V4L2ControlInfo *info = cio2->sensor_->getControlInfo(id);
> if (!info)
> continue;
>
> int val = controls.get(id);
> LOG(Error) << "Control : " << id << " - name : " << info->name()
> << " - value: " << val;
> }
>
> /* --- Set control values --- */
> controls.set(V4L2_CID_EXPOSURE, 2046);
> controls.set(V4L2_CID_ANALOGUE_GAIN, 1024);
> cio2->sensor_->setControls(&controls);
>
> /* --- Get control values back again and verify they have changed --- */
> cio2->sensor_->getControls(&controls);
> for (const V4L2Control &ctrl : controls) {
> unsigned int id = ctrl.id();
> V4L2ControlInfo *info = cio2->sensor_->getControlInfo(id);
> if (!info)
> continue;
>
> int val = controls.get(id);
> LOG(Error) << "Control : " << id << " - name : " << info->name()
> << " - value: " << val;
> }
>
That could looks a lot more friendly now :D
> Thanks
> j
>
> Jacopo Mondi (6):
> libcamera: Add V4L2Controls
> libcamera: v4l2_device: List controls at device open
> libcamera: v4l2_device: Implement get and set controls
> libcamera: camera_sensor: Add V4L2 control operations
> libcamera: ipu3: Set pipe_mode based on stream configuration
> [HACK] ipu3: Set and get a few sensor controls
>
> src/libcamera/camera_sensor.cpp | 58 +++++
> src/libcamera/include/camera_sensor.h | 6 +
> src/libcamera/include/v4l2_controls.h | 96 ++++++++
> src/libcamera/include/v4l2_device.h | 14 +-
> src/libcamera/meson.build | 1 +
> src/libcamera/pipeline/ipu3/ipu3.cpp | 78 ++++++
> src/libcamera/v4l2_controls.cpp | 337 ++++++++++++++++++++++++++
> src/libcamera/v4l2_device.cpp | 219 +++++++++++++++++
> 8 files changed, 808 insertions(+), 1 deletion(-)
> create mode 100644 src/libcamera/include/v4l2_controls.h
> create mode 100644 src/libcamera/v4l2_controls.cpp
>
> --
> 2.21.0
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list