[PATCH] v4l2-compliance: Basic support for array controls

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.ribalda@xxxxxxxxx>
---
 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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux