[libcamera-devel] [PATCH v3 0/6] Add support for V4L2 Controls

Jacopo Mondi jacopo at jmondi.org
Thu Jun 13 13:20:40 CEST 2019


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.

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;
	}

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



More information about the libcamera-devel mailing list