This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/cgit.cgi/v4l-utils.git tree:

Subject: v4l2-utils: Support V4L2_CTRL_WHICH_MIN/MAX_VAL
Author:  Yunke Cao <yun...@google.com>
Date:    Wed Nov 6 15:15:37 2024 +0900

Add string name for V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX.

Test that V4L2_CTRL_WHICH_MIN/MAX_VAL behaves as expected.
1. Calling G_EXT_CTRLS successes when V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX is set
   and returns -EINVAL if the flag is not set.
2. S_EXT_CTRLS and TRY_EXT_CTRLS always return fail.

Tested with VIVID:

./v4l2-ctl -l -d 0
...
                     area 0x0098f90b (area)   : value=1000x2000 
flags=has-payload
read_only_integer_32_bits 0x0098f90c (int)    : min=0 max=255 step=1 default=0 
value=0 flags=read-only, has-min-max
        u32_dynamic_array 0x0098f90d (u32)    : min=10 max=90 step=1 default=50 
elems=1 dims=[100] flags=has-payload, dynamic-array
           u8_pixel_array 0x0098f90e (u8)     : min=0 max=255 step=1 
default=128 dims=[640][368] flags=has-payload
      s32_2_element_array 0x0098f90f (int)    : min=-10 max=10 step=1 default=2 
dims=[2] flags=has-payload, has-min-max
      s64_5_element_array 0x0098f910 (int64)  : min=-10 max=10 step=1 default=4 
dims=[5] flags=has-payload, has-min-max
                     rect 0x0098f911 (rect)   : value=(200,100)/300x400 
flags=has-payload, has-min-max
...
./v4l2-compliance -d 0
...
Total for vivid device /dev/video0: 125, Succeeded: 125, Failed: 0, Warnings: 0

Signed-off-by: Yunke Cao <yun...@google.com>
Signed-off-by: Ming Qian <ming.q...@oss.nxp.com>
Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>

 utils/common/v4l2-info.cpp                   |  1 +
 utils/v4l2-compliance/v4l2-test-controls.cpp | 24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+)

---

http://git.linuxtv.org/cgit.cgi/v4l-utils.git/commit/?id=055581a9ea6ceb6fcda788ddcea67ede9f1651cc
diff --git a/utils/common/v4l2-info.cpp b/utils/common/v4l2-info.cpp
index 7dd7e708eb5e..02dfd6da0248 100644
--- a/utils/common/v4l2-info.cpp
+++ b/utils/common/v4l2-info.cpp
@@ -538,6 +538,7 @@ std::string ctrlflags2s(__u32 flags)
                { V4L2_CTRL_FLAG_EXECUTE_ON_WRITE, "execute-on-write" },
                { V4L2_CTRL_FLAG_MODIFY_LAYOUT, "modify-layout" },
                { V4L2_CTRL_FLAG_DYNAMIC_ARRAY, "dynamic-array" },
+               { V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX, "has-min-max" },
                { 0, nullptr }
        };
        return flags2s(flags, def);
diff --git a/utils/v4l2-compliance/v4l2-test-controls.cpp 
b/utils/v4l2-compliance/v4l2-test-controls.cpp
index 4cddd73f524e..1ed2636d8f59 100644
--- a/utils/v4l2-compliance/v4l2-test-controls.cpp
+++ b/utils/v4l2-compliance/v4l2-test-controls.cpp
@@ -971,6 +971,21 @@ int testExtendedControls(struct node *node)
                if (is_vivid && ctrl.id == VIVID_CID_U32_DYN_ARRAY &&
                    checkVividDynArray(node, ctrl, qctrl))
                        return fail("dynamic array tests failed\n");
+
+               ctrls.which = V4L2_CTRL_WHICH_MIN_VAL;
+               ret = doioctl(node, VIDIOC_G_EXT_CTRLS, &ctrls);
+               if (qctrl.flags & V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX)
+                       fail_on_test_val(ret, ret);
+               else
+                       fail_on_test_val(ret != EINVAL, ret);
+
+               ctrls.which = V4L2_CTRL_WHICH_MAX_VAL;
+               ret = doioctl(node, VIDIOC_G_EXT_CTRLS, &ctrls);
+               if (qctrl.flags & V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX)
+                       fail_on_test_val(ret, ret);
+               else
+                       fail_on_test_val(ret != EINVAL, ret);
+
                if (qctrl.flags & V4L2_CTRL_FLAG_HAS_PAYLOAD)
                        delete [] ctrl.string;
                ctrl.string = nullptr;
@@ -1082,6 +1097,15 @@ int testExtendedControls(struct node *node)
        fail_on_test(!doioctl(node, VIDIOC_S_EXT_CTRLS, &ctrls));
        fail_on_test(!doioctl(node, VIDIOC_TRY_EXT_CTRLS, &ctrls));
        fail_on_test(doioctl(node, VIDIOC_G_EXT_CTRLS, &ctrls));
+
+       ctrls.which = V4L2_CTRL_WHICH_MIN_VAL;
+       fail_on_test(!doioctl(node, VIDIOC_S_EXT_CTRLS, &ctrls));
+       fail_on_test(!doioctl(node, VIDIOC_TRY_EXT_CTRLS, &ctrls));
+
+       ctrls.which = V4L2_CTRL_WHICH_MAX_VAL;
+       fail_on_test(!doioctl(node, VIDIOC_S_EXT_CTRLS, &ctrls));
+       fail_on_test(!doioctl(node, VIDIOC_TRY_EXT_CTRLS, &ctrls));
+
        return 0;
 }
 

Reply via email to