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

Subject: v4l2-compliance: improve capability compliance tests.
Author:  Hans Verkuil <[email protected]>
Date:    Tue Jan 24 10:17:14 2012 +0100

Signed-off-by: Hans Verkuil <[email protected]>
(cherry picked from commit b344da631edc800a1b1ef06c61a95fe32f4d71e5)

 utils/v4l2-compliance/v4l2-compliance.cpp   |   48 +++++++++++++++++++++++----
 utils/v4l2-compliance/v4l2-test-formats.cpp |   18 +---------
 2 files changed, 43 insertions(+), 23 deletions(-)

---

http://git.linuxtv.org/v4l-utils.git?a=commitdiff;h=89f5d93f621b807da51c8d633cd4aac5938f1121

diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp 
b/utils/v4l2-compliance/v4l2-compliance.cpp
index 7704364..b7fe3e8 100644
--- a/utils/v4l2-compliance/v4l2-compliance.cpp
+++ b/utils/v4l2-compliance/v4l2-compliance.cpp
@@ -124,8 +124,12 @@ std::string cap2s(unsigned cap)
 
        if (cap & V4L2_CAP_VIDEO_CAPTURE)
                s += "\t\tVideo Capture\n";
+       if (cap & V4L2_CAP_VIDEO_CAPTURE_MPLANE)
+               s += "\t\tVideo Capture Multiplanar\n";
        if (cap & V4L2_CAP_VIDEO_OUTPUT)
                s += "\t\tVideo Output\n";
+       if (cap & V4L2_CAP_VIDEO_OUTPUT_MPLANE)
+               s += "\t\tVideo Output Multiplanar\n";
        if (cap & V4L2_CAP_VIDEO_OVERLAY)
                s += "\t\tVideo Overlay\n";
        if (cap & V4L2_CAP_VIDEO_OUTPUT_OVERLAY)
@@ -156,6 +160,8 @@ std::string cap2s(unsigned cap)
                s += "\t\tAsync I/O\n";
        if (cap & V4L2_CAP_STREAMING)
                s += "\t\tStreaming\n";
+       if (cap & V4L2_CAP_DEVICE_CAPS)
+               s += "\t\tDevice Capabilities\n";
        return s;
 }
 
@@ -238,7 +244,21 @@ int check_0(const void *p, int len)
 static int testCap(struct node *node)
 {
        struct v4l2_capability vcap;
-       __u32 caps;
+       __u32 caps, dcaps;
+       const __u32 video_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OUTPUT 
|
+                       V4L2_CAP_VIDEO_CAPTURE_MPLANE | 
V4L2_CAP_VIDEO_OUTPUT_MPLANE |
+                       V4L2_CAP_VIDEO_OVERLAY | V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
+       const __u32 vbi_caps = V4L2_CAP_VBI_CAPTURE | 
V4L2_CAP_SLICED_VBI_CAPTURE |
+                       V4L2_CAP_VBI_OUTPUT | V4L2_CAP_SLICED_VBI_OUTPUT;
+       const __u32 radio_caps = V4L2_CAP_RADIO | V4L2_CAP_MODULATOR;
+       const __u32 input_caps = V4L2_CAP_VIDEO_CAPTURE | 
V4L2_CAP_VIDEO_OVERLAY |
+                       V4L2_CAP_VBI_CAPTURE | V4L2_CAP_SLICED_VBI_CAPTURE |
+                       V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_HW_FREQ_SEEK |
+                       V4L2_CAP_RDS_CAPTURE | V4L2_CAP_TUNER;
+       const __u32 output_caps = V4L2_CAP_VIDEO_OUTPUT | 
V4L2_CAP_VIDEO_OUTPUT_MPLANE |
+                       V4L2_CAP_VIDEO_OUTPUT_OVERLAY | V4L2_CAP_VBI_OUTPUT |
+                       V4L2_CAP_SLICED_VBI_OUTPUT | V4L2_CAP_MODULATOR |
+                       V4L2_CAP_RDS_OUTPUT;
 
        // Must always be there
        fail_on_test(doioctl(node, VIDIOC_QUERYCAP, &vcap));
@@ -251,17 +271,27 @@ static int testCap(struct node *node)
        fail_on_test((vcap.version >> 16) < 3);
        fail_on_test(check_0(vcap.reserved, sizeof(vcap.reserved)));
        caps = vcap.capabilities;
-       fail_on_test(vcap.capabilities == 0);
-       fail_on_test(node->is_video && !(caps & (V4L2_CAP_VIDEO_CAPTURE | 
V4L2_CAP_VIDEO_OUTPUT |
-                                       V4L2_CAP_VIDEO_OVERLAY | 
V4L2_CAP_VIDEO_OUTPUT_OVERLAY)));
-       fail_on_test(node->is_radio && !(caps & (V4L2_CAP_RADIO | 
V4L2_CAP_MODULATOR)));
+       dcaps = vcap.device_caps;
+       fail_on_test(caps == 0);
+       fail_on_test(!(caps & V4L2_CAP_DEVICE_CAPS));
+       fail_on_test(dcaps & V4L2_CAP_DEVICE_CAPS);
+       fail_on_test(dcaps & ~caps);
+       fail_on_test(!(dcaps & caps));
+       fail_on_test(node->is_video && !(caps & video_caps));
+       fail_on_test(node->is_radio && !(caps & radio_caps));
        // V4L2_CAP_AUDIO is invalid for radio
        fail_on_test(node->is_radio && (caps & V4L2_CAP_AUDIO));
-       fail_on_test(node->is_vbi && !(caps & (V4L2_CAP_VBI_CAPTURE | 
V4L2_CAP_SLICED_VBI_CAPTURE |
-                                     V4L2_CAP_VBI_OUTPUT | 
V4L2_CAP_SLICED_VBI_OUTPUT)));
+       fail_on_test(node->is_vbi && !(caps & vbi_caps));
        // You can't have both set due to missing buffer type in VIDIOC_G/S_FBUF
        fail_on_test((caps & (V4L2_CAP_VIDEO_OVERLAY | 
V4L2_CAP_VIDEO_OUTPUT_OVERLAY)) ==
                        (V4L2_CAP_VIDEO_OVERLAY | 
V4L2_CAP_VIDEO_OUTPUT_OVERLAY));
+       fail_on_test(node->is_video && (dcaps & (vbi_caps | radio_caps)));
+       fail_on_test(node->is_radio && (dcaps & (vbi_caps | video_caps)));
+       fail_on_test(node->is_vbi && (dcaps & (video_caps | radio_caps)));
+       if (dcaps & input_caps)
+               fail_on_test(dcaps & output_caps);
+       if (dcaps & output_caps)
+               fail_on_test(dcaps & input_caps);
 
        return 0;
 }
@@ -471,6 +501,10 @@ int main(int argc, char **argv)
                        vcap.version & 0xff);
        printf("\tCapabilities  : 0x%08X\n", vcap.capabilities);
        printf("%s", cap2s(vcap.capabilities).c_str());
+       if (vcap.capabilities & V4L2_CAP_DEVICE_CAPS) {
+               printf("\tDevice Caps   : 0x%08X\n", vcap.device_caps);
+               printf("%s", cap2s(vcap.device_caps).c_str());
+       }
 
        printf("\nCompliance test for device %s (%susing libv4l2):\n\n",
                        device, wrapper ? "" : "not ");
diff --git a/utils/v4l2-compliance/v4l2-test-formats.cpp 
b/utils/v4l2-compliance/v4l2-test-formats.cpp
index 4ec19f7..c615450 100644
--- a/utils/v4l2-compliance/v4l2-test-formats.cpp
+++ b/utils/v4l2-compliance/v4l2-test-formats.cpp
@@ -42,9 +42,8 @@ static const __u32 buftype2cap[] = {
        V4L2_CAP_SLICED_VBI_CAPTURE,
        V4L2_CAP_SLICED_VBI_OUTPUT,
        V4L2_CAP_VIDEO_OUTPUT_OVERLAY,
-       // To be discussed
-       V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_VIDEO_CAPTURE,
-       V4L2_CAP_VIDEO_OUTPUT_MPLANE | V4L2_CAP_VIDEO_OUTPUT,
+       V4L2_CAP_VIDEO_CAPTURE_MPLANE,
+       V4L2_CAP_VIDEO_OUTPUT_MPLANE,
 };
 
 static int testEnumFrameIntervals(struct node *node, __u32 pixfmt, __u32 w, 
__u32 h, bool valid)
@@ -259,19 +258,6 @@ static int testEnumFormatsType(struct node *node, enum 
v4l2_buf_type type)
 
 int testEnumFormats(struct node *node)
 {
-       static const __u32 buftype2cap[] = {
-               0,
-               V4L2_CAP_VIDEO_CAPTURE,
-               V4L2_CAP_VIDEO_OUTPUT,
-               V4L2_CAP_VIDEO_OVERLAY,
-               V4L2_CAP_VBI_CAPTURE,
-               V4L2_CAP_VBI_OUTPUT,
-               V4L2_CAP_SLICED_VBI_CAPTURE,
-               V4L2_CAP_SLICED_VBI_OUTPUT,
-               V4L2_CAP_VIDEO_OUTPUT_OVERLAY,
-               V4L2_CAP_VIDEO_CAPTURE_MPLANE,
-               V4L2_CAP_VIDEO_OUTPUT_MPLANE,
-       };
        int type;
        int ret;
 

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to