v4l2-compliance: improve reporting of results.
authorHans Verkuil <hverkuil@xs4all.nl>
Sun, 16 Jan 2011 10:15:35 +0000 (11:15 +0100)
committerHans Verkuil <hverkuil@xs4all.nl>
Sun, 16 Jan 2011 10:15:35 +0000 (11:15 +0100)
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
utils/v4l2-compliance/v4l2-compliance.cpp
utils/v4l2-compliance/v4l2-compliance.h
utils/v4l2-compliance/v4l2-test-controls.cpp
utils/v4l2-compliance/v4l2-test-input-output.cpp

index ba27e62..c79fa3a 100644 (file)
@@ -453,6 +453,7 @@ int main(int argc, char **argv)
                        printf("\ttest VIDIOC_QUERYCAP for radio: %s\n", ok(testCap(&radio_node)));
                if (vbi_device)
                        printf("\ttest VIDIOC_QUERYCAP for vbi: %s\n", ok(testCap(&vbi_node)));
+               printf("\n");
        }
 
        if (test[TestMultipleOpen]) {
@@ -487,6 +488,7 @@ int main(int argc, char **argv)
                                close(vbi_node2.fd);
                        }
                }
+               printf("\n");
        }
 
        if (test[TestDebug]) {
@@ -494,6 +496,7 @@ int main(int argc, char **argv)
                printf("\ttest VIDIOC_DBG_G_CHIP_IDENT: %s\n", ok(testChipIdent(&node)));
                printf("\ttest VIDIOC_DBG_G/S_REGISTER: %s\n", ok(testRegister(&node)));
                printf("\ttest VIDIOC_LOG_STATUS: %s\n", ok(testLogStatus(&node)));
+               printf("\n");
        }
 
        if (test[TestInput]) {
@@ -501,6 +504,9 @@ int main(int argc, char **argv)
                printf("\ttest VIDIOC_S/G_TUNER: %s\n", ok(testTuner(&node)));
                printf("\ttest VIDIOC_S/G/ENUMAUDIO: %s\n", ok(testInputAudio(&node)));
                printf("\ttest VIDIOC_G/S/ENUMINPUT: %s\n", ok(testInput(&node)));
+               printf("\tInputs: %d Audio Inputs: %d Tuners: %d\n",
+                               node.inputs, node.audio_inputs, node.tuners);
+               printf("\n");
        }
 
        if (test[TestOutput]) {
@@ -508,11 +514,17 @@ int main(int argc, char **argv)
                printf("\ttest VIDIOC_S/G_MODULATOR: %s\n", ok(testModulator(&node)));
                printf("\ttest VIDIOC_S/G/ENUMAUDOUT: %s\n", ok(testOutputAudio(&node)));
                printf("\ttest VIDIOC_G/S/ENUMOUTPUT: %s\n", ok(testOutput(&node)));
+               printf("\tOutputs: %d Audio Outputs: %d Modulators: %d\n",
+                               node.outputs, node.audio_outputs, node.modulators);
+               printf("\n");
        }
 
        if (test[TestControls]) {
                printf("Control ioctls:\n");
                printf("\ttest VIDIOC_QUERYCTRL/MENU: %s\n", ok(testQueryControls(&node)));
+               printf("\tStandard Controls: %d Private Controls: %d\n",
+                               node.std_controls, node.priv_controls);
+               printf("\n");
        }
 
        close(node.fd);
index 10fdce6..b0ce126 100644 (file)
@@ -34,12 +34,12 @@ struct node {
        unsigned caps;
        unsigned tuners;
        unsigned modulators;
+       unsigned inputs;
        unsigned audio_inputs;
+       unsigned outputs;
        unsigned audio_outputs;
-       unsigned user_controls;
-       unsigned priv_user_controls;
-       unsigned user_controls_check;
-       unsigned priv_user_controls_check;
+       unsigned std_controls;
+       unsigned priv_controls;
 };
 
 #define info(fmt, args...)                                     \
index ddb1484..0dad1d4 100644 (file)
@@ -156,6 +156,10 @@ int testQueryControls(struct node *node)
        int ret;
        __u32 ctrl_class = 0;
        bool found_ctrl_class = false;
+       unsigned user_controls = 0;
+       unsigned priv_user_controls = 0;
+       unsigned user_controls_check = 0;
+       unsigned priv_user_controls_check = 0;
        unsigned class_count = 0;
 
        for (;;) {
@@ -184,20 +188,27 @@ int testQueryControls(struct node *node)
                        found_ctrl_class = false;
                        class_count = 0;
                }
-               if (qctrl.type == V4L2_CTRL_TYPE_CTRL_CLASS)
+               if (qctrl.type == V4L2_CTRL_TYPE_CTRL_CLASS) {
                        found_ctrl_class = true;
-               else
+               } else {
                        class_count++;
+                       if (V4L2_CTRL_DRIVER_PRIV(id))
+                               node->priv_controls++;
+               }
 
                if (ctrl_class == V4L2_CTRL_CLASS_USER &&
                    qctrl.type != V4L2_CTRL_TYPE_INTEGER64 &&
                    qctrl.type != V4L2_CTRL_TYPE_STRING &&
                    qctrl.type != V4L2_CTRL_TYPE_CTRL_CLASS) {
                        if (V4L2_CTRL_DRIVER_PRIV(id))
-                               node->priv_user_controls_check++;
+                               priv_user_controls_check++;
                        else if (id < V4L2_CID_LASTP1)
-                               node->user_controls_check++;
+                               user_controls_check++;
                }
+               if (V4L2_CTRL_DRIVER_PRIV(id))
+                       node->priv_controls++;
+               else
+                       node->std_controls++;
        }
        if (ctrl_class && !found_ctrl_class)
                return fail("missing control class for class %08x\n", ctrl_class);
@@ -216,7 +227,7 @@ int testQueryControls(struct node *node)
                        return fail("qctrl.id != id\n");
                if (validQCtrl(node, qctrl))
                        return fail("invalid control %08x\n", qctrl.id);
-               node->user_controls++;
+               user_controls++;
        }
 
        for (id = V4L2_CID_PRIVATE_BASE; ; id++) {
@@ -231,14 +242,14 @@ int testQueryControls(struct node *node)
                        return fail("qctrl.id != id\n");
                if (validQCtrl(node, qctrl))
                        return fail("invalid control %08x\n", qctrl.id);
-               node->priv_user_controls++;
+               priv_user_controls++;
        }
 
-       if (node->user_controls != node->user_controls_check)
+       if (user_controls != user_controls_check)
                return fail("expected %d user controls, got %d\n",
-                       node->user_controls_check, node->user_controls);
-       if (node->priv_user_controls != node->priv_user_controls_check)
+                       user_controls_check, user_controls);
+       if (priv_user_controls != priv_user_controls_check)
                return fail("expected %d private controls, got %d\n",
-                       node->priv_user_controls_check, node->priv_user_controls);
+                       priv_user_controls_check, priv_user_controls);
        return 0;
 }
index 1cdd435..8056bfd 100644 (file)
@@ -209,6 +209,7 @@ int testInput(struct node *node)
                        if (ret != EINVAL && !(descr.audioset & (1 << a)))
                                return fail("could set invalid audio input %d for video input %d\n", a, i);
                }
+               node->inputs++;
                i++;
        }
        input = i;
@@ -410,6 +411,7 @@ int testOutput(struct node *node)
                        if (ret != EINVAL && !(descr.audioset & (1 << a)))
                                return fail("could set invalid audio output %d for video output %d\n", a, o);
                }
+               node->outputs++;
                o++;
        }
        output = o;