[libcamera-devel] [PATCH v3 02/14] libcamera: v4l2_controls: Add min and max to V4L2ControlInfo

Jacopo Mondi jacopo at jmondi.org
Mon Jul 1 16:56:26 CEST 2019


Hi Laurent,

On Mon, Jul 01, 2019 at 02:38:05AM +0300, Laurent Pinchart wrote:
> Add min() and max() methods to V4L2ControlInfo to report the control's
> minimum and maximum value respectively.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
>  src/libcamera/include/v4l2_controls.h |  6 ++++++
>  src/libcamera/v4l2_controls.cpp       | 14 ++++++++++++++
>  2 files changed, 20 insertions(+)
>
> diff --git a/src/libcamera/include/v4l2_controls.h b/src/libcamera/include/v4l2_controls.h
> index 2c8cb9003f25..0047efab11fa 100644
> --- a/src/libcamera/include/v4l2_controls.h
> +++ b/src/libcamera/include/v4l2_controls.h
> @@ -28,11 +28,17 @@ public:
>  	size_t size() const { return size_; }
>  	const std::string &name() const { return name_; }
>
> +	int64_t min() const { return min_; }
> +	int64_t max() const { return max_; }
> +
>  private:
>  	unsigned int id_;
>  	unsigned int type_;
>  	size_t size_;
>  	std::string name_;
> +
> +	int64_t min_;
> +	int64_t max_;
>  };
>
>  class V4L2Control
> diff --git a/src/libcamera/v4l2_controls.cpp b/src/libcamera/v4l2_controls.cpp
> index 78888de29642..af017bce48ba 100644
> --- a/src/libcamera/v4l2_controls.cpp
> +++ b/src/libcamera/v4l2_controls.cpp
> @@ -74,6 +74,8 @@ V4L2ControlInfo::V4L2ControlInfo(const struct v4l2_query_ext_ctrl &ctrl)
>  	type_ = ctrl.type;
>  	name_ = static_cast<const char *>(ctrl.name);
>  	size_ = ctrl.elem_size * ctrl.elems;
> +	min_ = ctrl.minimum;
> +	max_ = ctrl.maximum;

Please note that ctrl.minimum and ctrl.maximum are meaningful only for
some of the types the v4l2_device supports at enumeration time

		V4L2ControlInfo info(ctrl);
		switch (info.type()) {
		case V4L2_CTRL_TYPE_INTEGER:
		case V4L2_CTRL_TYPE_BOOLEAN:
		case V4L2_CTRL_TYPE_MENU:
		case V4L2_CTRL_TYPE_BUTTON:
		case V4L2_CTRL_TYPE_INTEGER64:
		case V4L2_CTRL_TYPE_BITMASK:
		case V4L2_CTRL_TYPE_INTEGER_MENU:
			break;
		/* \todo Support compound controls. */
		default:
			LOG(V4L2, Debug) << "Control type '" << info.type()
					 << "' not supported";
			continue;
		}

		controls_.emplace(ctrl.id, info);

https://www.kernel.org/doc/html/v5.0/media/uapi/v4l/vidioc-queryctrl.html#c.v4l2_ctrl_type

The most problematic one seems to be the BITMASK type, but also for
others, the driver might report nothing.

That said, if that' fine in your opinion, please have my
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>

Thanks
   j

>  }
>
>  /**
> @@ -100,6 +102,18 @@ V4L2ControlInfo::V4L2ControlInfo(const struct v4l2_query_ext_ctrl &ctrl)
>   * \return The V4L2 control user readable name
>   */
>
> +/**
> + * \fn V4L2ControlInfo::min()
> + * \brief Retrieve the control minimum value
> + * \return The V4L2 control minimum value
> + */
> +
> +/**
> + * \fn V4L2ControlInfo::max()
> + * \brief Retrieve the control maximum value
> + * \return The V4L2 control maximum value
> + */
> +
>  /**
>   * \class V4L2Control
>   * \brief A V4L2 control value
> --
> 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/20190701/3c98da00/attachment.sig>


More information about the libcamera-devel mailing list