Without this patch:

Control ioctls:
        test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
        test VIDIOC_QUERYCTRL: OK
        fail: v4l2-test-controls.cpp(411): g_ctrl returned an error (22)
        test VIDIOC_G/S_CTRL: FAIL
        fail: v4l2-test-controls.cpp(637): g_ext_ctrls returned an error (28)
        test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL
        test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
        test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
        Standard Controls: 55 Private Controls: 0

Signed-off-by: Ricardo Ribalda Delgado <ricardo.riba...@gmail.com>
---
 utils/v4l2-compliance/v4l2-test-controls.cpp | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/utils/v4l2-compliance/v4l2-test-controls.cpp 
b/utils/v4l2-compliance/v4l2-test-controls.cpp
index 526905eef183..eba32a9f7855 100644
--- a/utils/v4l2-compliance/v4l2-test-controls.cpp
+++ b/utils/v4l2-compliance/v4l2-test-controls.cpp
@@ -377,6 +377,9 @@ int testSimpleControls(struct node *node)
        for (iter = node->controls.begin(); iter != node->controls.end(); 
++iter) {
                test_query_ext_ctrl &qctrl = iter->second;
 
+               if (qctrl.elems > 1)
+                       continue;
+
                info("checking control '%s' (0x%08x)\n", qctrl.name, qctrl.id);
                ctrl.id = qctrl.id;
                if (qctrl.type == V4L2_CTRL_TYPE_INTEGER64 ||
@@ -518,6 +521,10 @@ static int checkExtendedCtrl(struct v4l2_ext_control 
&ctrl, struct test_query_ex
 
        if (ctrl.id != qctrl.id)
                return fail("control id mismatch\n");
+
+       if (qctrl.elems > 1)
+               return 0;
+
        switch (qctrl.type) {
        case V4L2_CTRL_TYPE_INTEGER:
        case V4L2_CTRL_TYPE_INTEGER64:
@@ -620,7 +627,8 @@ int testExtendedControls(struct node *node)
                        ctrl.id = qctrl.id;
                        ctrl.value = qctrl.default_value;
                } else {
-                       if (ret != ENOSPC && qctrl.type == 
V4L2_CTRL_TYPE_STRING)
+                       if (ret != ENOSPC &&
+                               (qctrl.type == V4L2_CTRL_TYPE_STRING || 
qctrl.elems > 1 ))
                                return fail("did not check against size\n");
                        if (ret == ENOSPC && qctrl.type == 
V4L2_CTRL_TYPE_STRING) {
                                if (ctrls.error_idx != 0)
@@ -629,6 +637,10 @@ int testExtendedControls(struct node *node)
                                ctrl.size = qctrl.maximum + 1;
                                ret = doioctl(node, VIDIOC_G_EXT_CTRLS, &ctrls);
                        }
+                       if (ret == ENOSPC && qctrl.elems > 1){
+                               ctrl.ptr = new char[ctrl.size];
+                               ret = doioctl(node, VIDIOC_G_EXT_CTRLS, &ctrls);
+                       }
                        if (ret == EIO) {
                                warn("g_ext_ctrls returned EIO\n");
                                ret = 0;
@@ -668,7 +680,7 @@ int testExtendedControls(struct node *node)
                        if (checkExtendedCtrl(ctrl, qctrl))
                                return fail("s_ext_ctrls returned invalid 
control contents (%08x)\n", qctrl.id);
                }
-               if (qctrl.type == V4L2_CTRL_TYPE_STRING)
+               if (qctrl.type == V4L2_CTRL_TYPE_STRING || qctrl.elems > 1)
                        delete [] ctrl.string;
                ctrl.string = NULL;
        }
@@ -708,6 +720,10 @@ int testExtendedControls(struct node *node)
                        ctrl.size = qctrl.maximum + 1;
                        ctrl.string = new char[ctrl.size];
                }
+               if (qctrl.elems > 1){
+                       ctrl.size = qctrl.elem_size * qctrl.elems;
+                       ctrl.ptr = new char[ctrl.size];
+               }
                ctrl.reserved2[0] = 0;
                if (!ctrl_class)
                        ctrl_class = V4L2_CTRL_ID2CLASS(ctrl.id);
-- 
2.5.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to