blob: 40745332a070f9cd8c912467a372319fec4f587c [file] [log] [blame]
/*
* v4l-test: Test environment for Video For Linux Two API
*
* 5 May 2009 0.1 First release
*
* Written by Márton Németh <nm127@freemail.hu>
* Released under GPL
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <string.h>
#include <linux/videodev2.h>
#include <linux/errno.h>
#include <CUnit/CUnit.h>
#include "v4l2_test.h"
#include "v4l2_show.h"
#include "dev_video.h"
#include "video_limits.h"
#include "test_VIDIOC_REQBUFS.h"
static void do_VIDIOC_QUERYBUF(enum v4l2_memory memory,
enum v4l2_buf_type type, __u32 count, int expected_ret_req) {
int ret_req, errno_req;
int ret_query, errno_query;
struct v4l2_requestbuffers reqbuf;
struct v4l2_buffer buf;
__u32 i;
unsigned int j;
const enum v4l2_buf_type buffer_types[] = {
0,
V4L2_BUF_TYPE_VIDEO_CAPTURE,
V4L2_BUF_TYPE_VIDEO_OUTPUT,
V4L2_BUF_TYPE_VIDEO_OVERLAY,
V4L2_BUF_TYPE_VBI_CAPTURE,
V4L2_BUF_TYPE_VBI_OUTPUT,
V4L2_BUF_TYPE_SLICED_VBI_CAPTURE,
V4L2_BUF_TYPE_SLICED_VBI_OUTPUT,
V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY,
V4L2_BUF_TYPE_PRIVATE-1,
V4L2_BUF_TYPE_PRIVATE,
V4L2_BUF_TYPE_PRIVATE+1,
S32_MAX,
(__s32)((__u32)S32_MAX+1),
U32_MAX-1,
U32_MAX
};
memset(&reqbuf, 0, sizeof(reqbuf));
reqbuf.count = count;
reqbuf.type = type;
reqbuf.memory = memory;
ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
errno_req = errno;
if (expected_ret_req == 0) {
CU_ASSERT_EQUAL(ret_req, 0);
} else {
CU_ASSERT_EQUAL(ret_req, -1);
CU_ASSERT_EQUAL(errno_req, EINVAL);
}
dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, type=%i, memory=%i, ret_req=%i, errno_req=%i\n",
__FILE__, __LINE__, count, type, memory, ret_req, errno_req);
if (ret_req == 0) {
show_v4l2_requestbuffers(&reqbuf);
}
if (ret_req != 0) {
reqbuf.count = 0;
}
for (i = 0; i < reqbuf.count; i++) {
memset(&buf, 0xff, sizeof(buf));
buf.type = type;
buf.index = i;
ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
errno_query = errno;
CU_ASSERT_EQUAL(buf.index, i);
CU_ASSERT_EQUAL(buf.type, type);
//CU_ASSERT_EQUAL(buf.bytesused, ???);
CU_ASSERT_EQUAL(buf.flags & ~(V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_QUEUED | V4L2_BUF_FLAG_DONE), 0);
//CU_ASSERT_EQUAL(buf.field, ???);
//CU_ASSERT_EQUAL(buf.timestamp.tv_sec, ???);
//CU_ASSERT_EQUAL(buf.timestamp.tv_usec, ???);
//CU_ASSERT_EQUAL(buf.timecode.type, ???);
//CU_ASSERT_EQUAL(buf.timecode.flags, ???);
//CU_ASSERT_EQUAL(buf.timecode.frames, ???);
//CU_ASSERT_EQUAL(buf.timecode.seconds, ???);
//CU_ASSERT_EQUAL(buf.timecode.minutes, ???);
//CU_ASSERT_EQUAL(buf.timecode.hours, ???);
//CU_ASSERT_EQUAL(buf.timecode.userbits[0], ???);
//CU_ASSERT_EQUAL(buf.timecode.userbits[1], ???);
//CU_ASSERT_EQUAL(buf.timecode.userbits[2], ???);
//CU_ASSERT_EQUAL(buf.timecode.userbits[3], ???);
//CU_ASSERT_EQUAL(buf.sequence, ???);
CU_ASSERT_EQUAL(buf.memory, memory);
//CU_ASSERT_EQUAL(buf.m.userptr, ???);
//CU_ASSERT_EQUAL(buf.m.offset, ???);
CU_ASSERT(0 < buf.length);
//CU_ASSERT_EQUAL(buf.input, ???);
CU_ASSERT_EQUAL(buf.reserved, 0);
dprintf("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
__FILE__, __LINE__, buf.type, buf.index, ret_query, errno_query);
if (ret_query == 0)
show_v4l2_buffer(&buf);
}
/* Check for not buffer types which do not match the VIDIOC_REQBUF
* buffer type
*/
for (i = 0; i < reqbuf.count; i++) {
for (j = 0; j < sizeof(buffer_types)/sizeof(*buffer_types); j++) {
if (buffer_types[j] != type) {
memset(&buf, 0xff, sizeof(buf));
buf.type = buffer_types[j];
buf.index = i;
ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
errno_query = errno;
CU_ASSERT_EQUAL(ret_query, -1);
CU_ASSERT_EQUAL(errno_query, EINVAL);
dprintf("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
__FILE__, __LINE__, buf.type, buf.index, ret_query, errno_query);
if (ret_query == 0)
show_v4l2_buffer(&buf);
}
}
}
memset(&buf, 0xff, sizeof(buf));
buf.type = type;
buf.index = reqbuf.count;
ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
errno_query = errno;
dprintf("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
__FILE__, __LINE__, buf.type, buf.index, ret_query, errno_query);
CU_ASSERT_EQUAL(ret_query, -1);
CU_ASSERT_EQUAL(errno_query, EINVAL);
if (reqbuf.count < (__u32)S16_MIN) {
memset(&buf, 0xff, sizeof(buf));
buf.type = type;
buf.index = (__u32)S16_MIN;
ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
errno_query = errno;
dprintf("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
__FILE__, __LINE__, buf.type, buf.index, ret_query, errno_query);
CU_ASSERT_EQUAL(ret_query, -1);
CU_ASSERT_EQUAL(errno_query, EINVAL);
}
if (reqbuf.count < (__u32)S16_MAX) {
memset(&buf, 0xff, sizeof(buf));
buf.type = type;
buf.index = (__u32)S16_MAX;
ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
errno_query = errno;
dprintf("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
__FILE__, __LINE__, buf.type, buf.index, ret_query, errno_query);
CU_ASSERT_EQUAL(ret_query, -1);
CU_ASSERT_EQUAL(errno_query, EINVAL);
}
if (reqbuf.count < U32_MAX) {
memset(&buf, 0xff, sizeof(buf));
buf.type = type;
buf.index = U32_MAX;
ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
errno_query = errno;
dprintf("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
__FILE__, __LINE__, buf.type, buf.index, ret_query, errno_query);
CU_ASSERT_EQUAL(ret_query, -1);
CU_ASSERT_EQUAL(errno_query, EINVAL);
}
memset(&reqbuf, 0, sizeof(reqbuf));
reqbuf.count = 0;
reqbuf.type = type;
reqbuf.memory = V4L2_MEMORY_MMAP;
ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
errno_req = errno;
dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, ret_req=%i, errno_req=%i\n",
__FILE__, __LINE__, count, ret_req, errno_req);
if (expected_ret_req == 0) {
CU_ASSERT_EQUAL(ret_req, 0);
} else {
CU_ASSERT_EQUAL(ret_req, -1);
CU_ASSERT_EQUAL(errno_req, EINVAL);
}
if (ret_req == 0) {
show_v4l2_requestbuffers(&reqbuf);
}
}
void test_VIDIOC_QUERYBUF_capture_mmap() {
int ret_cap, errno_cap;
struct v4l2_capability cap;
int expected_ret_req;
memset(&cap, 0, sizeof(cap));
ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
errno_cap = errno;
if (ret_cap == 0 &&
(cap.capabilities & V4L2_CAP_STREAMING) &&
(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
expected_ret_req = 0;
} else {
expected_ret_req = -1;
}
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, 0, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, 1, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, 3, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, 4, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, (__u32)S16_MIN, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, (__u32)S16_MAX, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, U32_MAX, expected_ret_req);
}
void test_VIDIOC_QUERYBUF_capture_userptr() {
int ret_cap, errno_cap;
int ret_req, errno_req;
struct v4l2_capability cap;
struct v4l2_requestbuffers reqbuf;
int expected_ret_req;
memset(&cap, 0, sizeof(cap));
ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
errno_cap = errno;
memset(&reqbuf, 0, sizeof(reqbuf));
reqbuf.count = 2;
reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
reqbuf.memory = V4L2_MEMORY_USERPTR;
ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
errno_req = errno;
dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, ret_req=%i, errno_req=%i\n",
__FILE__, __LINE__, reqbuf.count, ret_req, errno_req);
if (ret_cap == 0 &&
(cap.capabilities & V4L2_CAP_STREAMING) &&
(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) &&
ret_req == 0) {
expected_ret_req = 0;
} else {
expected_ret_req = -1;
}
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 0, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 1, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 3, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 4, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, (__u32)S16_MIN, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, (__u32)S16_MAX, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, U32_MAX, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 0, expected_ret_req);
}
void test_VIDIOC_QUERYBUF_output_mmap() {
int ret_cap, errno_cap;
struct v4l2_capability cap;
int expected_ret_req;
memset(&cap, 0, sizeof(cap));
ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
errno_cap = errno;
if (ret_cap == 0 &&
(cap.capabilities & V4L2_CAP_STREAMING) &&
(cap.capabilities & V4L2_CAP_VIDEO_OUTPUT)) {
expected_ret_req = 0;
} else {
expected_ret_req = -1;
}
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 0, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 1, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 3, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 4, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, (__u32)S16_MIN, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, (__u32)S16_MAX, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, U32_MAX, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 0, expected_ret_req);
}
void test_VIDIOC_QUERYBUF_output_userptr() {
int ret_cap, errno_cap;
int ret_req, errno_req;
struct v4l2_capability cap;
struct v4l2_requestbuffers reqbuf;
int expected_ret_req;
memset(&cap, 0, sizeof(cap));
ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
errno_cap = errno;
memset(&reqbuf, 0, sizeof(reqbuf));
reqbuf.count = 2;
reqbuf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
reqbuf.memory = V4L2_MEMORY_USERPTR;
ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
errno_req = errno;
dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, ret_req=%i, errno_req=%i\n",
__FILE__, __LINE__, reqbuf.count, ret_req, errno_req);
if (ret_cap == 0 &&
(cap.capabilities & V4L2_CAP_STREAMING) &&
(cap.capabilities & V4L2_CAP_VIDEO_OUTPUT) &&
ret_req == 0) {
expected_ret_req = 0;
} else {
expected_ret_req = -1;
}
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 0, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 1, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 3, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 4, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, (__u32)S16_MIN, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, (__u32)S16_MAX, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, U32_MAX, expected_ret_req);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 0, expected_ret_req);
}
void test_VIDIOC_QUERYBUF_overlay_capture() {
do_VIDIOC_QUERYBUF(V4L2_MEMORY_OVERLAY, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2, -1);
}
void test_VIDIOC_QUERYBUF_overlay_output() {
do_VIDIOC_QUERYBUF(V4L2_MEMORY_OVERLAY, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2, -1);
}
void test_VIDIOC_QUERYBUF_invalid_memory_capture() {
do_VIDIOC_QUERYBUF(SINT_MIN, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2, -1);
do_VIDIOC_QUERYBUF(0, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_OVERLAY+1, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2, -1);
do_VIDIOC_QUERYBUF(SINT_MAX, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2, -1);
}
void test_VIDIOC_QUERYBUF_invalid_memory_output() {
do_VIDIOC_QUERYBUF(SINT_MIN, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2, -1);
do_VIDIOC_QUERYBUF(0, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_OVERLAY+1, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2, -1);
do_VIDIOC_QUERYBUF(SINT_MAX, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2, -1);
}
void test_VIDIOC_QUERYBUF_invalid_type_mmap() {
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, 0, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OVERLAY, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VBI_CAPTURE, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VBI_OUTPUT, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_SLICED_VBI_CAPTURE, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_SLICED_VBI_OUTPUT, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_PRIVATE-1, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_PRIVATE, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_PRIVATE+1, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, S32_MAX, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, (__s32)((__u32)S32_MAX+1), 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, U32_MAX-1, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, U32_MAX, 2, -1);
}
void test_VIDIOC_QUERYBUF_invalid_type_userptr() {
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, 0, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OVERLAY, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VBI_CAPTURE, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VBI_OUTPUT, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_SLICED_VBI_CAPTURE, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_SLICED_VBI_OUTPUT, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_PRIVATE-1, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_PRIVATE, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_PRIVATE+1, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, S32_MAX, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, (__s32)((__u32)S32_MAX+1), 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, U32_MAX-1, 2, -1);
do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, U32_MAX, 2, -1);
}