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
