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: add mem2mem support.
Author:  Hans Verkuil <[email protected]>
Date:    Thu Jul 19 13:42:44 2012 +0200

Some tests needed to be modified for mem2mem devices: such devices have
per-filehandle state so certain tests that check how two open device nodes
interact with one another are not valid for this class of devices.

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

Signed-off-by: Gregor Jasny <[email protected]>

 utils/v4l2-compliance/v4l2-compliance.cpp   |   22 ++++++++++++++------
 utils/v4l2-compliance/v4l2-compliance.h     |    1 +
 utils/v4l2-compliance/v4l2-test-buffers.cpp |   28 ++++++++++++++++----------
 3 files changed, 33 insertions(+), 18 deletions(-)

---

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

diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp 
b/utils/v4l2-compliance/v4l2-compliance.cpp
index edb6a43..10b06f6 100644
--- a/utils/v4l2-compliance/v4l2-compliance.cpp
+++ b/utils/v4l2-compliance/v4l2-compliance.cpp
@@ -271,6 +271,8 @@ static int testCap(struct node *node)
        fail_on_test(check_0(vcap.reserved, sizeof(vcap.reserved)));
        caps = vcap.capabilities;
        dcaps = vcap.device_caps;
+       node->is_m2m = (dcaps & (V4L2_CAP_VIDEO_CAPTURE | 
V4L2_CAP_VIDEO_CAPTURE_MPLANE)) &&
+                      (dcaps & (V4L2_CAP_VIDEO_OUTPUT | 
V4L2_CAP_VIDEO_OUTPUT_MPLANE));
        fail_on_test(caps == 0);
        fail_on_test(!(caps & V4L2_CAP_DEVICE_CAPS));
        fail_on_test(dcaps & V4L2_CAP_DEVICE_CAPS);
@@ -287,10 +289,12 @@ static int testCap(struct node *node)
        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);
+       if (!node->is_m2m) {
+               if (dcaps & input_caps)
+                       fail_on_test(dcaps & output_caps);
+               if (dcaps & output_caps)
+                       fail_on_test(dcaps & input_caps);
+       }
        if (node->can_capture || node->can_output)
                fail_on_test(!(dcaps & io_caps));
        else
@@ -317,6 +321,10 @@ static int testPrio(struct node *node, struct node *node2)
        enum v4l2_priority prio;
        int err;
 
+       if (node->is_m2m) {
+               fail_on_test(doioctl(node, VIDIOC_G_PRIORITY, &prio) != ENOTTY);
+               return 0;
+       }
        err = check_prio(node, node2, V4L2_PRIORITY_DEFAULT);
        if (err)
                return err;
@@ -538,7 +546,7 @@ int main(int argc, char **argv)
                if (video_node2.fd >= 0) {
                        printf("\ttest VIDIOC_QUERYCAP: %s\n", 
ok(testCap(&video_node2)));
                        printf("\ttest VIDIOC_G/S_PRIORITY: %s\n",
-                                       ok(testPrio(&video_node, 
&video_node2)));
+                                       ok(testPrio(&node, &video_node2)));
                        node.node2 = &video_node2;
                }
        }
@@ -549,7 +557,7 @@ int main(int argc, char **argv)
                if (radio_node2.fd >= 0) {
                        printf("\ttest VIDIOC_QUERYCAP: %s\n", 
ok(testCap(&radio_node2)));
                        printf("\ttest VIDIOC_G/S_PRIORITY: %s\n",
-                                       ok(testPrio(&radio_node, 
&radio_node2)));
+                                       ok(testPrio(&node, &radio_node2)));
                        node.node2 = &video_node2;
                }
        }
@@ -560,7 +568,7 @@ int main(int argc, char **argv)
                if (vbi_node2.fd >= 0) {
                        printf("\ttest VIDIOC_QUERYCAP: %s\n", 
ok(testCap(&vbi_node2)));
                        printf("\ttest VIDIOC_G/S_PRIORITY: %s\n",
-                                       ok(testPrio(&vbi_node, &vbi_node2)));
+                                       ok(testPrio(&node, &vbi_node2)));
                        node.node2 = &video_node2;
                }
        }
diff --git a/utils/v4l2-compliance/v4l2-compliance.h 
b/utils/v4l2-compliance/v4l2-compliance.h
index e40f509..d1f37ac 100644
--- a/utils/v4l2-compliance/v4l2-compliance.h
+++ b/utils/v4l2-compliance/v4l2-compliance.h
@@ -47,6 +47,7 @@ struct node {
        bool is_video;
        bool is_radio;
        bool is_vbi;
+       bool is_m2m;
        bool can_capture;
        bool can_output;
        const char *device;
diff --git a/utils/v4l2-compliance/v4l2-test-buffers.cpp 
b/utils/v4l2-compliance/v4l2-test-buffers.cpp
index 28b05ce..aab7621 100644
--- a/utils/v4l2-compliance/v4l2-test-buffers.cpp
+++ b/utils/v4l2-compliance/v4l2-test-buffers.cpp
@@ -56,6 +56,8 @@ int testReqBufs(struct node *node)
                if (node->buftype_pixfmts[i].empty())
                        continue;
                info("test buftype %d\n", i);
+               memset(&bufs, 0, sizeof(bufs));
+               memset(&cbufs, 0, sizeof(cbufs));
                if (node->valid_buftype == 0)
                        node->valid_buftype = i;
                fmt.type = i;
@@ -104,15 +106,17 @@ int testReqBufs(struct node *node)
                        fail_on_test(ret != -1);
                        fail_on_test(errno != EBUSY);
                }
-               bufs.count = 1;
-               fail_on_test(doioctl(node->node2, VIDIOC_REQBUFS, &bufs) != 
EBUSY);
-               bufs.count = 0;
-               fail_on_test(doioctl(node->node2, VIDIOC_REQBUFS, &bufs) != 
EBUSY);
-               fail_on_test(doioctl(node, VIDIOC_REQBUFS, &bufs));
-               bufs.count = 1;
-               fail_on_test(doioctl(node->node2, VIDIOC_REQBUFS, &bufs));
-               bufs.count = 0;
-               fail_on_test(doioctl(node->node2, VIDIOC_REQBUFS, &bufs));
+               if (!node->is_m2m) {
+                       bufs.count = 1;
+                       fail_on_test(doioctl(node->node2, VIDIOC_REQBUFS, 
&bufs) != EBUSY);
+                       bufs.count = 0;
+                       fail_on_test(doioctl(node->node2, VIDIOC_REQBUFS, 
&bufs) != EBUSY);
+                       fail_on_test(doioctl(node, VIDIOC_REQBUFS, &bufs));
+                       bufs.count = 1;
+                       fail_on_test(doioctl(node->node2, VIDIOC_REQBUFS, 
&bufs));
+                       bufs.count = 0;
+                       fail_on_test(doioctl(node->node2, VIDIOC_REQBUFS, 
&bufs));
+               }
                cbufs.format = fmt;
                cbufs.count = 1;
                cbufs.memory = bufs.memory;
@@ -126,8 +130,10 @@ int testReqBufs(struct node *node)
                fail_on_test(cbufs.format.type != i);
                cbufs.count = 1;
                fail_on_test(doioctl(node, VIDIOC_CREATE_BUFS, &cbufs));
-               bufs.count = 1;
-               fail_on_test(doioctl(node->node2, VIDIOC_REQBUFS, &bufs) != 
EBUSY);
+               if (!node->is_m2m) {
+                       bufs.count = 1;
+                       fail_on_test(doioctl(node->node2, VIDIOC_REQBUFS, 
&bufs) != EBUSY);
+               }
                bufs.count = 0;
                fail_on_test(doioctl(node, VIDIOC_REQBUFS, &bufs));
        }

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

Reply via email to