[libcamera-devel,10/11] libcamera: v4l2_device: Enable enumeration of U8 controls

Message ID 20200309162414.720306-11-jacopo@jmondi.org
State Accepted
Headers show
Series
  • Adda support for V4L2 array control and strings
Related show

Commit Message

Jacopo Mondi March 9, 2020, 4:24 p.m. UTC
Enable the enumeration of V4L2 array controls with V4L2_CTRL_TYPE_U8
type.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
---
 src/libcamera/v4l2_device.cpp | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

Comments

Laurent Pinchart March 20, 2020, 9:56 p.m. UTC | #1
Hi Jacopo,

Thank you for the patch.

On Mon, Mar 09, 2020 at 05:24:13PM +0100, Jacopo Mondi wrote:
> Enable the enumeration of V4L2 array controls with V4L2_CTRL_TYPE_U8
> type.
> 
> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
> ---
>  src/libcamera/v4l2_device.cpp | 13 ++++---------
>  1 file changed, 4 insertions(+), 9 deletions(-)
> 
> diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
> index 464df6a1fe18..a36c121aa62a 100644
> --- a/src/libcamera/v4l2_device.cpp
> +++ b/src/libcamera/v4l2_device.cpp
> @@ -388,7 +388,8 @@ void V4L2Device::listControls()
>  
>  	/* \todo Add support for menu and compound controls. */
>  	while (1) {
> -		ctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
> +		ctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL |
> +			   V4L2_CTRL_FLAG_NEXT_COMPOUND;
>  		if (ioctl(VIDIOC_QUERY_EXT_CTRL, &ctrl))
>  			break;
>  
> @@ -396,13 +397,6 @@ void V4L2Device::listControls()
>  		    ctrl.flags & V4L2_CTRL_FLAG_DISABLED)
>  			continue;
>  
> -		if (ctrl.elems != 1 || ctrl.nr_of_dims) {
> -			LOG(V4L2, Debug)
> -				<< "Array control " << utils::hex(ctrl.id)
> -				<< " not supported";
> -			continue;
> -		}

We were guarding against something that could never happen as
V4L2_CTRL_FLAG_NEXT_COMPOUND wasn't set, right ? This change seems fine
to me, but I wonder if we should have a ctrl.elems check in
setControls(). In any case, for this patch,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> -
>  		switch (ctrl.type) {
>  		case V4L2_CTRL_TYPE_INTEGER:
>  		case V4L2_CTRL_TYPE_BOOLEAN:
> @@ -411,8 +405,9 @@ void V4L2Device::listControls()
>  		case V4L2_CTRL_TYPE_INTEGER64:
>  		case V4L2_CTRL_TYPE_BITMASK:
>  		case V4L2_CTRL_TYPE_INTEGER_MENU:
> +		case V4L2_CTRL_TYPE_U8:
>  			break;
> -		/* \todo Support compound controls. */
> +		/* \todo Support other control types. */
>  		default:
>  			LOG(V4L2, Debug)
>  				<< "Control " << utils::hex(ctrl.id)

Patch

diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 464df6a1fe18..a36c121aa62a 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -388,7 +388,8 @@  void V4L2Device::listControls()
 
 	/* \todo Add support for menu and compound controls. */
 	while (1) {
-		ctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
+		ctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL |
+			   V4L2_CTRL_FLAG_NEXT_COMPOUND;
 		if (ioctl(VIDIOC_QUERY_EXT_CTRL, &ctrl))
 			break;
 
@@ -396,13 +397,6 @@  void V4L2Device::listControls()
 		    ctrl.flags & V4L2_CTRL_FLAG_DISABLED)
 			continue;
 
-		if (ctrl.elems != 1 || ctrl.nr_of_dims) {
-			LOG(V4L2, Debug)
-				<< "Array control " << utils::hex(ctrl.id)
-				<< " not supported";
-			continue;
-		}
-
 		switch (ctrl.type) {
 		case V4L2_CTRL_TYPE_INTEGER:
 		case V4L2_CTRL_TYPE_BOOLEAN:
@@ -411,8 +405,9 @@  void V4L2Device::listControls()
 		case V4L2_CTRL_TYPE_INTEGER64:
 		case V4L2_CTRL_TYPE_BITMASK:
 		case V4L2_CTRL_TYPE_INTEGER_MENU:
+		case V4L2_CTRL_TYPE_U8:
 			break;
-		/* \todo Support compound controls. */
+		/* \todo Support other control types. */
 		default:
 			LOG(V4L2, Debug)
 				<< "Control " << utils::hex(ctrl.id)