Home | History | Annotate | Download | only in user_space
      1 /*
      2  * v4l-test: Test environment for Video For Linux Two API
      3  *
      4  *  5 May 2009  0.1  First release
      5  *
      6  * Written by Mrton Nmeth <nm127 (at) freemail.hu>
      7  * Released under GPL
      8  */
      9 
     10 #include <stdio.h>
     11 #include <sys/types.h>
     12 #include <sys/stat.h>
     13 #include <fcntl.h>
     14 #include <unistd.h>
     15 #include <sys/ioctl.h>
     16 #include <errno.h>
     17 #include <string.h>
     18 
     19 #include <linux/videodev2.h>
     20 #include <linux/errno.h>
     21 
     22 #include <CUnit/CUnit.h>
     23 
     24 #include "v4l2_test.h"
     25 #include "v4l2_show.h"
     26 #include "dev_video.h"
     27 #include "video_limits.h"
     28 
     29 #include "test_VIDIOC_REQBUFS.h"
     30 
     31 static void do_VIDIOC_QUERYBUF(enum v4l2_memory memory,
     32 			       enum v4l2_buf_type type, __u32 count,
     33 			       int expected_ret_req)
     34 {
     35 	int ret_req, errno_req;
     36 	int ret_query, errno_query;
     37 	struct v4l2_requestbuffers reqbuf;
     38 	struct v4l2_buffer buf;
     39 	__u32 i;
     40 	unsigned int j;
     41 	const enum v4l2_buf_type buffer_types[] = {
     42 		0,
     43 		V4L2_BUF_TYPE_VIDEO_CAPTURE,
     44 		V4L2_BUF_TYPE_VIDEO_OUTPUT,
     45 		V4L2_BUF_TYPE_VIDEO_OVERLAY,
     46 		V4L2_BUF_TYPE_VBI_CAPTURE,
     47 		V4L2_BUF_TYPE_VBI_OUTPUT,
     48 		V4L2_BUF_TYPE_SLICED_VBI_CAPTURE,
     49 		V4L2_BUF_TYPE_SLICED_VBI_OUTPUT,
     50 		V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY,
     51 		V4L2_BUF_TYPE_PRIVATE - 1,
     52 		V4L2_BUF_TYPE_PRIVATE,
     53 		V4L2_BUF_TYPE_PRIVATE + 1,
     54 		S32_MAX,
     55 		(__s32) ((__u32) S32_MAX + 1),
     56 		U32_MAX - 1,
     57 		U32_MAX
     58 	};
     59 
     60 	memset(&reqbuf, 0, sizeof(reqbuf));
     61 	reqbuf.count = count;
     62 	reqbuf.type = type;
     63 	reqbuf.memory = memory;
     64 
     65 	ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
     66 	errno_req = errno;
     67 
     68 	if (expected_ret_req == 0) {
     69 		CU_ASSERT_EQUAL(ret_req, 0);
     70 	} else {
     71 		CU_ASSERT_EQUAL(ret_req, -1);
     72 		CU_ASSERT_EQUAL(errno_req, EINVAL);
     73 	}
     74 
     75 	dprintf
     76 	    ("\t%s:%u: VIDIOC_REQBUF, count=%u, type=%i, memory=%i, ret_req=%i, errno_req=%i\n",
     77 	     __FILE__, __LINE__, count, type, memory, ret_req, errno_req);
     78 
     79 	if (ret_req == 0) {
     80 		show_v4l2_requestbuffers(&reqbuf);
     81 	}
     82 
     83 	if (ret_req != 0) {
     84 		reqbuf.count = 0;
     85 	}
     86 
     87 	for (i = 0; i < reqbuf.count; i++) {
     88 		memset(&buf, 0xff, sizeof(buf));
     89 		buf.type = type;
     90 		buf.index = i;
     91 
     92 		ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
     93 		errno_query = errno;
     94 
     95 		CU_ASSERT_EQUAL(buf.index, i);
     96 		CU_ASSERT_EQUAL(buf.type, type);
     97 		//CU_ASSERT_EQUAL(buf.bytesused, ???);
     98 		CU_ASSERT_EQUAL(buf.
     99 				flags & ~(V4L2_BUF_FLAG_MAPPED |
    100 					  V4L2_BUF_FLAG_QUEUED |
    101 					  V4L2_BUF_FLAG_DONE), 0);
    102 		//CU_ASSERT_EQUAL(buf.field, ???);
    103 		//CU_ASSERT_EQUAL(buf.timestamp.tv_sec, ???);
    104 		//CU_ASSERT_EQUAL(buf.timestamp.tv_usec, ???);
    105 		//CU_ASSERT_EQUAL(buf.timecode.type, ???);
    106 		//CU_ASSERT_EQUAL(buf.timecode.flags, ???);
    107 		//CU_ASSERT_EQUAL(buf.timecode.frames, ???);
    108 		//CU_ASSERT_EQUAL(buf.timecode.seconds, ???);
    109 		//CU_ASSERT_EQUAL(buf.timecode.minutes, ???);
    110 		//CU_ASSERT_EQUAL(buf.timecode.hours, ???);
    111 		//CU_ASSERT_EQUAL(buf.timecode.userbits[0], ???);
    112 		//CU_ASSERT_EQUAL(buf.timecode.userbits[1], ???);
    113 		//CU_ASSERT_EQUAL(buf.timecode.userbits[2], ???);
    114 		//CU_ASSERT_EQUAL(buf.timecode.userbits[3], ???);
    115 		//CU_ASSERT_EQUAL(buf.sequence, ???);
    116 		CU_ASSERT_EQUAL(buf.memory, memory);
    117 		//CU_ASSERT_EQUAL(buf.m.userptr, ???);
    118 		//CU_ASSERT_EQUAL(buf.m.offset, ???);
    119 		CU_ASSERT(0 < buf.length);
    120 		//CU_ASSERT_EQUAL(buf.input, ???);
    121 		CU_ASSERT_EQUAL(buf.reserved, 0);
    122 
    123 		dprintf
    124 		    ("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
    125 		     __FILE__, __LINE__, buf.type, buf.index, ret_query,
    126 		     errno_query);
    127 		if (ret_query == 0)
    128 			show_v4l2_buffer(&buf);
    129 
    130 	}
    131 
    132 	/* Check for not buffer types which do not match the VIDIOC_REQBUF
    133 	 * buffer type
    134 	 */
    135 	for (i = 0; i < reqbuf.count; i++) {
    136 		for (j = 0; j < sizeof(buffer_types) / sizeof(*buffer_types);
    137 		     j++) {
    138 			if (buffer_types[j] != type) {
    139 				memset(&buf, 0xff, sizeof(buf));
    140 				buf.type = buffer_types[j];
    141 				buf.index = i;
    142 
    143 				ret_query =
    144 				    ioctl(get_video_fd(), VIDIOC_QUERYBUF,
    145 					  &buf);
    146 				errno_query = errno;
    147 
    148 				CU_ASSERT_EQUAL(ret_query, -1);
    149 				CU_ASSERT_EQUAL(errno_query, EINVAL);
    150 
    151 				dprintf
    152 				    ("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
    153 				     __FILE__, __LINE__, buf.type, buf.index,
    154 				     ret_query, errno_query);
    155 				if (ret_query == 0)
    156 					show_v4l2_buffer(&buf);
    157 			}
    158 		}
    159 	}
    160 
    161 	memset(&buf, 0xff, sizeof(buf));
    162 	buf.type = type;
    163 	buf.index = reqbuf.count;
    164 
    165 	ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
    166 	errno_query = errno;
    167 
    168 	dprintf
    169 	    ("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
    170 	     __FILE__, __LINE__, buf.type, buf.index, ret_query, errno_query);
    171 
    172 	CU_ASSERT_EQUAL(ret_query, -1);
    173 	CU_ASSERT_EQUAL(errno_query, EINVAL);
    174 
    175 	if (reqbuf.count < (__u32) S16_MIN) {
    176 		memset(&buf, 0xff, sizeof(buf));
    177 		buf.type = type;
    178 		buf.index = (__u32) S16_MIN;
    179 
    180 		ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
    181 		errno_query = errno;
    182 
    183 		dprintf
    184 		    ("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
    185 		     __FILE__, __LINE__, buf.type, buf.index, ret_query,
    186 		     errno_query);
    187 
    188 		CU_ASSERT_EQUAL(ret_query, -1);
    189 		CU_ASSERT_EQUAL(errno_query, EINVAL);
    190 	}
    191 
    192 	if (reqbuf.count < (__u32) S16_MAX) {
    193 		memset(&buf, 0xff, sizeof(buf));
    194 		buf.type = type;
    195 		buf.index = (__u32) S16_MAX;
    196 
    197 		ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
    198 		errno_query = errno;
    199 
    200 		dprintf
    201 		    ("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
    202 		     __FILE__, __LINE__, buf.type, buf.index, ret_query,
    203 		     errno_query);
    204 
    205 		CU_ASSERT_EQUAL(ret_query, -1);
    206 		CU_ASSERT_EQUAL(errno_query, EINVAL);
    207 	}
    208 
    209 	if (reqbuf.count < U32_MAX) {
    210 		memset(&buf, 0xff, sizeof(buf));
    211 		buf.type = type;
    212 		buf.index = U32_MAX;
    213 
    214 		ret_query = ioctl(get_video_fd(), VIDIOC_QUERYBUF, &buf);
    215 		errno_query = errno;
    216 
    217 		dprintf
    218 		    ("\t%s:%u: VIDIOC_QUERYBUF, type=%i, index=%u, ret_query=%i, errno_query=%i\n",
    219 		     __FILE__, __LINE__, buf.type, buf.index, ret_query,
    220 		     errno_query);
    221 
    222 		CU_ASSERT_EQUAL(ret_query, -1);
    223 		CU_ASSERT_EQUAL(errno_query, EINVAL);
    224 	}
    225 
    226 	memset(&reqbuf, 0, sizeof(reqbuf));
    227 	reqbuf.count = 0;
    228 	reqbuf.type = type;
    229 	reqbuf.memory = V4L2_MEMORY_MMAP;
    230 
    231 	ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
    232 	errno_req = errno;
    233 
    234 	dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, ret_req=%i, errno_req=%i\n",
    235 		__FILE__, __LINE__, count, ret_req, errno_req);
    236 
    237 	if (expected_ret_req == 0) {
    238 		CU_ASSERT_EQUAL(ret_req, 0);
    239 	} else {
    240 		CU_ASSERT_EQUAL(ret_req, -1);
    241 		CU_ASSERT_EQUAL(errno_req, EINVAL);
    242 	}
    243 	if (ret_req == 0) {
    244 		show_v4l2_requestbuffers(&reqbuf);
    245 	}
    246 }
    247 
    248 void test_VIDIOC_QUERYBUF_capture_mmap()
    249 {
    250 	int ret_cap, errno_cap;
    251 	struct v4l2_capability cap;
    252 	int expected_ret_req;
    253 
    254 	memset(&cap, 0, sizeof(cap));
    255 
    256 	ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
    257 	errno_cap = errno;
    258 
    259 	if (ret_cap == 0 &&
    260 	    (cap.capabilities & V4L2_CAP_STREAMING) &&
    261 	    (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
    262 		expected_ret_req = 0;
    263 	} else {
    264 		expected_ret_req = -1;
    265 	}
    266 
    267 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, 0,
    268 			   expected_ret_req);
    269 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, 1,
    270 			   expected_ret_req);
    271 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2,
    272 			   expected_ret_req);
    273 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, 3,
    274 			   expected_ret_req);
    275 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE, 4,
    276 			   expected_ret_req);
    277 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE,
    278 			   (__u32) S16_MIN, expected_ret_req);
    279 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE,
    280 			   (__u32) S16_MAX, expected_ret_req);
    281 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_CAPTURE,
    282 			   U32_MAX, expected_ret_req);
    283 }
    284 
    285 void test_VIDIOC_QUERYBUF_capture_userptr()
    286 {
    287 	int ret_cap, errno_cap;
    288 	int ret_req, errno_req;
    289 	struct v4l2_capability cap;
    290 	struct v4l2_requestbuffers reqbuf;
    291 	int expected_ret_req;
    292 
    293 	memset(&cap, 0, sizeof(cap));
    294 
    295 	ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
    296 	errno_cap = errno;
    297 
    298 	memset(&reqbuf, 0, sizeof(reqbuf));
    299 	reqbuf.count = 2;
    300 	reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    301 	reqbuf.memory = V4L2_MEMORY_USERPTR;
    302 
    303 	ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
    304 	errno_req = errno;
    305 
    306 	dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, ret_req=%i, errno_req=%i\n",
    307 		__FILE__, __LINE__, reqbuf.count, ret_req, errno_req);
    308 
    309 	if (ret_cap == 0 &&
    310 	    (cap.capabilities & V4L2_CAP_STREAMING) &&
    311 	    (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) && ret_req == 0) {
    312 		expected_ret_req = 0;
    313 	} else {
    314 		expected_ret_req = -1;
    315 	}
    316 
    317 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 0,
    318 			   expected_ret_req);
    319 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 1,
    320 			   expected_ret_req);
    321 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2,
    322 			   expected_ret_req);
    323 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 3,
    324 			   expected_ret_req);
    325 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 4,
    326 			   expected_ret_req);
    327 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE,
    328 			   (__u32) S16_MIN, expected_ret_req);
    329 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE,
    330 			   (__u32) S16_MAX, expected_ret_req);
    331 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE,
    332 			   U32_MAX, expected_ret_req);
    333 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_CAPTURE, 0,
    334 			   expected_ret_req);
    335 }
    336 
    337 void test_VIDIOC_QUERYBUF_output_mmap()
    338 {
    339 	int ret_cap, errno_cap;
    340 	struct v4l2_capability cap;
    341 	int expected_ret_req;
    342 
    343 	memset(&cap, 0, sizeof(cap));
    344 
    345 	ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
    346 	errno_cap = errno;
    347 
    348 	if (ret_cap == 0 &&
    349 	    (cap.capabilities & V4L2_CAP_STREAMING) &&
    350 	    (cap.capabilities & V4L2_CAP_VIDEO_OUTPUT)) {
    351 		expected_ret_req = 0;
    352 	} else {
    353 		expected_ret_req = -1;
    354 	}
    355 
    356 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 0,
    357 			   expected_ret_req);
    358 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 1,
    359 			   expected_ret_req);
    360 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2,
    361 			   expected_ret_req);
    362 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 3,
    363 			   expected_ret_req);
    364 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 4,
    365 			   expected_ret_req);
    366 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT,
    367 			   (__u32) S16_MIN, expected_ret_req);
    368 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT,
    369 			   (__u32) S16_MAX, expected_ret_req);
    370 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT,
    371 			   U32_MAX, expected_ret_req);
    372 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT, 0,
    373 			   expected_ret_req);
    374 }
    375 
    376 void test_VIDIOC_QUERYBUF_output_userptr()
    377 {
    378 	int ret_cap, errno_cap;
    379 	int ret_req, errno_req;
    380 	struct v4l2_capability cap;
    381 	struct v4l2_requestbuffers reqbuf;
    382 	int expected_ret_req;
    383 
    384 	memset(&cap, 0, sizeof(cap));
    385 
    386 	ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
    387 	errno_cap = errno;
    388 
    389 	memset(&reqbuf, 0, sizeof(reqbuf));
    390 	reqbuf.count = 2;
    391 	reqbuf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
    392 	reqbuf.memory = V4L2_MEMORY_USERPTR;
    393 
    394 	ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
    395 	errno_req = errno;
    396 
    397 	dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, ret_req=%i, errno_req=%i\n",
    398 		__FILE__, __LINE__, reqbuf.count, ret_req, errno_req);
    399 
    400 	if (ret_cap == 0 &&
    401 	    (cap.capabilities & V4L2_CAP_STREAMING) &&
    402 	    (cap.capabilities & V4L2_CAP_VIDEO_OUTPUT) && ret_req == 0) {
    403 		expected_ret_req = 0;
    404 	} else {
    405 		expected_ret_req = -1;
    406 	}
    407 
    408 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 0,
    409 			   expected_ret_req);
    410 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 1,
    411 			   expected_ret_req);
    412 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2,
    413 			   expected_ret_req);
    414 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 3,
    415 			   expected_ret_req);
    416 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 4,
    417 			   expected_ret_req);
    418 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT,
    419 			   (__u32) S16_MIN, expected_ret_req);
    420 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT,
    421 			   (__u32) S16_MAX, expected_ret_req);
    422 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT,
    423 			   U32_MAX, expected_ret_req);
    424 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT, 0,
    425 			   expected_ret_req);
    426 }
    427 
    428 void test_VIDIOC_QUERYBUF_overlay_capture()
    429 {
    430 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_OVERLAY, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2,
    431 			   -1);
    432 }
    433 
    434 void test_VIDIOC_QUERYBUF_overlay_output()
    435 {
    436 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_OVERLAY, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2,
    437 			   -1);
    438 }
    439 
    440 void test_VIDIOC_QUERYBUF_invalid_memory_capture()
    441 {
    442 	do_VIDIOC_QUERYBUF(SINT_MIN, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2, -1);
    443 	do_VIDIOC_QUERYBUF(0, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2, -1);
    444 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_OVERLAY + 1, V4L2_BUF_TYPE_VIDEO_CAPTURE,
    445 			   2, -1);
    446 	do_VIDIOC_QUERYBUF(SINT_MAX, V4L2_BUF_TYPE_VIDEO_CAPTURE, 2, -1);
    447 }
    448 
    449 void test_VIDIOC_QUERYBUF_invalid_memory_output()
    450 {
    451 	do_VIDIOC_QUERYBUF(SINT_MIN, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2, -1);
    452 	do_VIDIOC_QUERYBUF(0, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2, -1);
    453 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_OVERLAY + 1, V4L2_BUF_TYPE_VIDEO_OUTPUT,
    454 			   2, -1);
    455 	do_VIDIOC_QUERYBUF(SINT_MAX, V4L2_BUF_TYPE_VIDEO_OUTPUT, 2, -1);
    456 }
    457 
    458 void test_VIDIOC_QUERYBUF_invalid_type_mmap()
    459 {
    460 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, 0, 2, -1);
    461 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OVERLAY, 2,
    462 			   -1);
    463 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VBI_CAPTURE, 2, -1);
    464 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VBI_OUTPUT, 2, -1);
    465 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_SLICED_VBI_CAPTURE,
    466 			   2, -1);
    467 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_SLICED_VBI_OUTPUT, 2,
    468 			   -1);
    469 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY,
    470 			   2, -1);
    471 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_PRIVATE - 1, 2, -1);
    472 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_PRIVATE, 2, -1);
    473 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_PRIVATE + 1, 2, -1);
    474 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, S32_MAX, 2, -1);
    475 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, (__s32) ((__u32) S32_MAX + 1), 2,
    476 			   -1);
    477 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, U32_MAX - 1, 2, -1);
    478 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_MMAP, U32_MAX, 2, -1);
    479 }
    480 
    481 void test_VIDIOC_QUERYBUF_invalid_type_userptr()
    482 {
    483 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, 0, 2, -1);
    484 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OVERLAY, 2,
    485 			   -1);
    486 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VBI_CAPTURE, 2,
    487 			   -1);
    488 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VBI_OUTPUT, 2,
    489 			   -1);
    490 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR,
    491 			   V4L2_BUF_TYPE_SLICED_VBI_CAPTURE, 2, -1);
    492 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_SLICED_VBI_OUTPUT,
    493 			   2, -1);
    494 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR,
    495 			   V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY, 2, -1);
    496 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_PRIVATE - 1, 2,
    497 			   -1);
    498 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_PRIVATE, 2, -1);
    499 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_PRIVATE + 1, 2,
    500 			   -1);
    501 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, S32_MAX, 2, -1);
    502 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, (__s32) ((__u32) S32_MAX + 1),
    503 			   2, -1);
    504 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, U32_MAX - 1, 2, -1);
    505 	do_VIDIOC_QUERYBUF(V4L2_MEMORY_USERPTR, U32_MAX, 2, -1);
    506 }
    507