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: bypass libv4l2 for expbuf handling.
Author:  Hans Verkuil <hans.verk...@cisco.com>
Date:    Sun Feb 23 10:58:27 2014 +0100

You don't want to go through libv4l2 for calling VIDIOC_EXPBUF, just use the
low-level ioctl call for this.

Also add a missing close() for the expbuf node.

Signed-off-by: Hans Verkuil <hans.verk...@cisco.com>

 utils/v4l2-compliance/v4l2-compliance.cpp   |   10 ++++++++--
 utils/v4l2-compliance/v4l2-compliance.h     |    4 +++-
 utils/v4l2-compliance/v4l2-test-buffers.cpp |    8 ++++----
 3 files changed, 15 insertions(+), 7 deletions(-)

---

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

diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp 
b/utils/v4l2-compliance/v4l2-compliance.cpp
index f317138..a0fbd89 100644
--- a/utils/v4l2-compliance/v4l2-compliance.cpp
+++ b/utils/v4l2-compliance/v4l2-compliance.cpp
@@ -121,13 +121,17 @@ static void usage(void)
        exit(0);
 }
 
-int doioctl_name(struct node *node, unsigned long int request, void *parm, 
const char *name)
+int doioctl_name(struct node *node, unsigned long int request, void *parm,
+                const char *name, bool no_wrapper)
 {
        int retval;
        int e;
 
        errno = 0;
-       retval = test_ioctl(node->fd, request, parm);
+       if (no_wrapper)
+               retval = ioctl(node->fd, request, parm);
+       else
+               retval = test_ioctl(node->fd, request, parm);
        e = errno;
        if (options[OptTrace])
                printf("\t\t%s returned %d (%s)\n", name, retval, strerror(e));
@@ -834,6 +838,8 @@ int main(int argc, char **argv)
        test_close(node.fd);
        if (node.node2)
                test_close(node.node2->fd);
+       if (expbuf_device)
+               close(expbuf_node.fd);
        printf("Total: %d, Succeeded: %d, Failed: %d, Warnings: %d\n",
                        tests_total, tests_ok, tests_total - tests_ok, 
warnings);
        exit(app_result);
diff --git a/utils/v4l2-compliance/v4l2-compliance.h 
b/utils/v4l2-compliance/v4l2-compliance.h
index 2f78ec6..75635a3 100644
--- a/utils/v4l2-compliance/v4l2-compliance.h
+++ b/utils/v4l2-compliance/v4l2-compliance.h
@@ -138,8 +138,10 @@ static inline double fract2f(const struct v4l2_fract *f)
        return (double)f->numerator / (double)f->denominator;
 }
 
-int doioctl_name(struct node *node, unsigned long int request, void *parm, 
const char *name);
+int doioctl_name(struct node *node, unsigned long int request, void *parm,
+                const char *name, bool no_wrapper = false);
 #define doioctl(n, r, p) doioctl_name(n, r, p, #r)
+#define doioctl_no_wrap(n, r, p) doioctl_name(n, r, p, #r, true)
 
 std::string cap2s(unsigned cap);
 std::string buftype2s(int type);
diff --git a/utils/v4l2-compliance/v4l2-test-buffers.cpp 
b/utils/v4l2-compliance/v4l2-test-buffers.cpp
index 4d74db3..c1ee33d 100644
--- a/utils/v4l2-compliance/v4l2-test-buffers.cpp
+++ b/utils/v4l2-compliance/v4l2-test-buffers.cpp
@@ -1116,7 +1116,7 @@ static int setupDmaBuf(struct node *expbuf_node, struct 
node *node,
        expbuf_bufs.count = bufs.count;
        expbuf_bufs.memory = V4L2_MEMORY_MMAP;
        expbuf_bufs.type = expbuf_type;
-       fail_on_test(doioctl(expbuf_node, VIDIOC_REQBUFS, &expbuf_bufs));
+       fail_on_test(doioctl_no_wrap(expbuf_node, VIDIOC_REQBUFS, 
&expbuf_bufs));
        fail_on_test(expbuf_bufs.count < bufs.count);
 
        memset(&expbuf_buf, 0, sizeof(expbuf_buf));
@@ -1126,7 +1126,7 @@ static int setupDmaBuf(struct node *expbuf_node, struct 
node *node,
                expbuf_buf.m.planes = expbuf_planes;
                expbuf_buf.length = VIDEO_MAX_PLANES;
        }
-       fail_on_test(doioctl(expbuf_node, VIDIOC_QUERYBUF, &expbuf_buf));
+       fail_on_test(doioctl_no_wrap(expbuf_node, VIDIOC_QUERYBUF, 
&expbuf_buf));
 
        for (unsigned i = 0; i < bufs.count; i++) {
                struct v4l2_plane planes[VIDEO_MAX_PLANES];
@@ -1166,7 +1166,7 @@ static int setupDmaBuf(struct node *expbuf_node, struct 
node *node,
                        expbuf.index = i;
                        expbuf.plane = p;
                        expbuf.flags = O_RDWR;
-                       fail_on_test(doioctl(expbuf_node, VIDIOC_EXPBUF, 
&expbuf));
+                       fail_on_test(doioctl_no_wrap(expbuf_node, 
VIDIOC_EXPBUF, &expbuf));
 
                        dmabufs[i][p] = expbuf.fd;
 
@@ -1316,7 +1316,7 @@ int testDmaBuf(struct node *expbuf_node, struct node 
*node, unsigned frame_count
                memset(&expbuf_bufs, 0, sizeof(expbuf_bufs));
                expbuf_bufs.memory = V4L2_MEMORY_MMAP;
                expbuf_bufs.type = expbuf_type;
-               fail_on_test(doioctl(expbuf_node, VIDIOC_REQBUFS, 
&expbuf_bufs));
+               fail_on_test(doioctl_no_wrap(expbuf_node, VIDIOC_REQBUFS, 
&expbuf_bufs));
        }
        return 0;
 }

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to