1 /* 2 * v4l-test: Test environment for Video For Linux Two API 3 * 4 * 16 Jun 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 "dev_video.h" 26 #include "video_limits.h" 27 #include "v4l2_validator.h" 28 #include "v4l2_foreach.h" 29 #include "v4l2_show.h" 30 31 #include "test_VIDIOC_ENUM_FRAMESIZES.h" 32 33 static int valid_framesize_type(__u32 type) 34 { 35 int valid = 0; 36 37 if ((type == V4L2_FRMSIZE_TYPE_DISCRETE) || 38 (type == V4L2_FRMSIZE_TYPE_CONTINUOUS) || 39 (type == V4L2_FRMSIZE_TYPE_STEPWISE)) { 40 valid = 1; 41 } else { 42 valid = 0; 43 } 44 return valid; 45 } 46 47 static void do_test_VIDIOC_ENUM_FRAMESIZES(__u32 fmt) 48 { 49 struct v4l2_frmsizeenum framesize; 50 int ret_frame, errno_frame; 51 __u32 i; 52 __u32 first_type; 53 54 i = 0; 55 first_type = 0; 56 do { 57 memset(&framesize, 0xff, sizeof(framesize)); 58 framesize.index = i; 59 framesize.pixel_format = fmt; 60 ret_frame = 61 ioctl(get_video_fd(), VIDIOC_ENUM_FRAMESIZES, &framesize); 62 errno_frame = errno; 63 64 dprintf 65 ("\t%s:%u: VIDIOC_ENUM_FRAMESIZES, index=%u, pixel_format=0x%x, ret_frame=%i, errno_frame=%i\n", 66 __FILE__, __LINE__, i, fmt, ret_frame, errno_frame); 67 68 if (i != 0 && first_type != V4L2_FRMSIZE_TYPE_DISCRETE) { 69 CU_ASSERT_EQUAL(ret_frame, -1); 70 CU_ASSERT_EQUAL(errno_frame, EINVAL); 71 } 72 73 if (ret_frame == 0) { 74 CU_ASSERT_EQUAL(ret_frame, 0); 75 CU_ASSERT_EQUAL(framesize.index, i); 76 CU_ASSERT_EQUAL(framesize.pixel_format, fmt); 77 CU_ASSERT(valid_framesize_type(framesize.type)); 78 79 if (i == 0) { 80 first_type = framesize.type; 81 } else { 82 CU_ASSERT_EQUAL(framesize.type, first_type); 83 } 84 85 switch (framesize.type) { 86 case V4L2_FRMSIZE_TYPE_DISCRETE: 87 CU_ASSERT(0 < framesize.discrete.width); 88 CU_ASSERT(0 < framesize.discrete.height); 89 break; 90 91 case V4L2_FRMSIZE_TYPE_CONTINUOUS: 92 CU_ASSERT(0 < framesize.stepwise.min_width); 93 CU_ASSERT(0 < framesize.stepwise.max_width); 94 CU_ASSERT_EQUAL(framesize.stepwise.step_width, 95 1); 96 97 CU_ASSERT(framesize.stepwise.min_width < 98 framesize.stepwise.max_width); 99 100 CU_ASSERT(0 < framesize.stepwise.min_height); 101 CU_ASSERT(0 < framesize.stepwise.max_height); 102 CU_ASSERT_EQUAL(framesize.stepwise.step_height, 103 1); 104 105 CU_ASSERT(framesize.stepwise.min_height < 106 framesize.stepwise.max_height); 107 break; 108 109 case V4L2_FRMSIZE_TYPE_STEPWISE: 110 CU_ASSERT(0 < framesize.stepwise.min_width); 111 CU_ASSERT(0 < framesize.stepwise.max_width); 112 CU_ASSERT(0 < framesize.stepwise.step_width); 113 114 CU_ASSERT(framesize.stepwise.min_width < 115 framesize.stepwise.max_width); 116 117 /* check if the given step is unambigous: min + n * step = max */ 118 if (framesize.stepwise.step_width != 0) { 119 CU_ASSERT_EQUAL((framesize.stepwise. 120 max_width - 121 framesize.stepwise. 122 min_width) % 123 framesize.stepwise. 124 step_width, 0); 125 } 126 127 CU_ASSERT(0 < framesize.stepwise.min_height); 128 CU_ASSERT(0 < framesize.stepwise.max_height); 129 CU_ASSERT(0 < framesize.stepwise.step_height); 130 131 CU_ASSERT(framesize.stepwise.min_height < 132 framesize.stepwise.max_height); 133 134 /* check if the given step is unambigous: min + n * step = max */ 135 if (framesize.stepwise.step_height != 0) { 136 CU_ASSERT_EQUAL((framesize.stepwise. 137 max_height - 138 framesize.stepwise. 139 min_height) % 140 framesize.stepwise. 141 step_height, 0); 142 } 143 144 break; 145 } 146 147 CU_ASSERT_EQUAL(framesize.reserved[0], 0); 148 CU_ASSERT_EQUAL(framesize.reserved[1], 0); 149 150 show_v4l2_frmsizeenum(&framesize); 151 152 } else { 153 CU_ASSERT_EQUAL(ret_frame, -1); 154 CU_ASSERT_EQUAL(errno_frame, EINVAL); 155 } 156 i++; 157 } while (ret_frame == 0 && i != 0); 158 159 } 160 161 static void do_test_VIDIOC_ENUM_FRAMESIZES_type(enum v4l2_buf_type type) 162 { 163 int ret_enum, errno_enum; 164 struct v4l2_fmtdesc format; 165 __u32 i; 166 167 i = 0; 168 do { 169 memset(&format, 0xff, sizeof(format)); 170 format.index = i; 171 format.type = type; 172 173 ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format); 174 errno_enum = errno; 175 176 dprintf 177 ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n", 178 __FILE__, __LINE__, i, format.type, ret_enum, errno_enum); 179 180 /* Ensure that VIDIOC_ENUM_FRAMESIZES is called at least once 181 * even if VIDIOC_ENUM_FMT returns error 182 */ 183 do_test_VIDIOC_ENUM_FRAMESIZES(format.pixelformat); 184 185 i++; 186 } while (ret_enum == 0 && i != 0); 187 188 } 189 190 void test_VIDIOC_ENUM_FRAMESIZES() 191 { 192 do_test_VIDIOC_ENUM_FRAMESIZES_type(V4L2_BUF_TYPE_VIDEO_CAPTURE); 193 do_test_VIDIOC_ENUM_FRAMESIZES_type(V4L2_BUF_TYPE_VIDEO_OUTPUT); 194 do_test_VIDIOC_ENUM_FRAMESIZES_type(V4L2_BUF_TYPE_VIDEO_OVERLAY); 195 do_test_VIDIOC_ENUM_FRAMESIZES_type(V4L2_BUF_TYPE_PRIVATE); 196 } 197 198 static void do_test_VIDIOC_ENUM_FRAMESIZES_invalid_index(__u32 fmt) 199 { 200 struct v4l2_frmsizeenum framesize; 201 int ret_frame, errno_frame; 202 __u32 i; 203 __u32 max_index; 204 205 i = 0; 206 do { 207 memset(&framesize, 0xff, sizeof(framesize)); 208 framesize.index = i; 209 framesize.pixel_format = fmt; 210 ret_frame = 211 ioctl(get_video_fd(), VIDIOC_ENUM_FRAMESIZES, &framesize); 212 errno_frame = errno; 213 214 dprintf 215 ("\t%s:%u: VIDIOC_ENUM_FRAMESIZES, index=%u, pixel_format=0x%x, ret_frame=%i, errno_frame=%i\n", 216 __FILE__, __LINE__, i, fmt, ret_frame, errno_frame); 217 218 i++; 219 } while (ret_frame == 0 && i != 0); 220 221 max_index = i - 1; 222 223 i = max_index + 1; 224 memset(&framesize, 0xff, sizeof(framesize)); 225 framesize.index = i; 226 framesize.pixel_format = fmt; 227 ret_frame = ioctl(get_video_fd(), VIDIOC_ENUM_FRAMESIZES, &framesize); 228 errno_frame = errno; 229 230 dprintf 231 ("\t%s:%u: VIDIOC_ENUM_FRAMESIZES, index=%u, pixel_format=0x%x, ret_frame=%i, errno_frame=%i\n", 232 __FILE__, __LINE__, i, fmt, ret_frame, errno_frame); 233 234 CU_ASSERT_EQUAL(ret_frame, -1); 235 CU_ASSERT_EQUAL(errno_frame, EINVAL); 236 237 i = (__u32) S32_MIN; 238 if (max_index < i) { 239 memset(&framesize, 0xff, sizeof(framesize)); 240 framesize.index = i; 241 framesize.pixel_format = fmt; 242 ret_frame = 243 ioctl(get_video_fd(), VIDIOC_ENUM_FRAMESIZES, &framesize); 244 errno_frame = errno; 245 246 dprintf 247 ("\t%s:%u: VIDIOC_ENUM_FRAMESIZES, index=0x%x, pixel_format=0x%x, ret_frame=%i, errno_frame=%i\n", 248 __FILE__, __LINE__, i, fmt, ret_frame, errno_frame); 249 250 CU_ASSERT_EQUAL(ret_frame, -1); 251 CU_ASSERT_EQUAL(errno_frame, EINVAL); 252 } 253 254 i = (__u32) S32_MAX; 255 if (max_index < i) { 256 memset(&framesize, 0xff, sizeof(framesize)); 257 framesize.index = i; 258 framesize.pixel_format = fmt; 259 ret_frame = 260 ioctl(get_video_fd(), VIDIOC_ENUM_FRAMESIZES, &framesize); 261 errno_frame = errno; 262 263 dprintf 264 ("\t%s:%u: VIDIOC_ENUM_FRAMESIZES, index=0x%x, pixel_format=0x%x, ret_frame=%i, errno_frame=%i\n", 265 __FILE__, __LINE__, i, fmt, ret_frame, errno_frame); 266 267 CU_ASSERT_EQUAL(ret_frame, -1); 268 CU_ASSERT_EQUAL(errno_frame, EINVAL); 269 } 270 271 i = (__u32) U32_MAX; 272 if (max_index < i) { 273 memset(&framesize, 0xff, sizeof(framesize)); 274 framesize.index = i; 275 framesize.pixel_format = fmt; 276 ret_frame = 277 ioctl(get_video_fd(), VIDIOC_ENUM_FRAMESIZES, &framesize); 278 errno_frame = errno; 279 280 dprintf 281 ("\t%s:%u: VIDIOC_ENUM_FRAMESIZES, index=0x%x, pixel_format=0x%x, ret_frame=%i, errno_frame=%i\n", 282 __FILE__, __LINE__, i, fmt, ret_frame, errno_frame); 283 284 CU_ASSERT_EQUAL(ret_frame, -1); 285 CU_ASSERT_EQUAL(errno_frame, EINVAL); 286 } 287 288 } 289 290 static void do_test_VIDIOC_ENUM_FRAMESIZES_type_invalid_index(enum v4l2_buf_type 291 type) 292 { 293 int ret_enum, errno_enum; 294 struct v4l2_fmtdesc format; 295 __u32 i; 296 297 i = 0; 298 do { 299 memset(&format, 0xff, sizeof(format)); 300 format.index = i; 301 format.type = type; 302 303 ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format); 304 errno_enum = errno; 305 306 dprintf 307 ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n", 308 __FILE__, __LINE__, i, format.type, ret_enum, errno_enum); 309 310 /* Ensure that VIDIOC_ENUM_FRAMESIZES is called at least once 311 * even if VIDIOC_ENUM_FMT returns error 312 */ 313 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_index(format. 314 pixelformat); 315 316 i++; 317 } while (ret_enum == 0 && i != 0); 318 319 } 320 321 void test_VIDIOC_ENUM_FRAMESIZES_invalid_index() 322 { 323 do_test_VIDIOC_ENUM_FRAMESIZES_type_invalid_index 324 (V4L2_BUF_TYPE_VIDEO_CAPTURE); 325 do_test_VIDIOC_ENUM_FRAMESIZES_type_invalid_index 326 (V4L2_BUF_TYPE_VIDEO_OUTPUT); 327 do_test_VIDIOC_ENUM_FRAMESIZES_type_invalid_index 328 (V4L2_BUF_TYPE_VIDEO_OVERLAY); 329 do_test_VIDIOC_ENUM_FRAMESIZES_type_invalid_index 330 (V4L2_BUF_TYPE_PRIVATE); 331 } 332 333 static int supported_pixel_format_type(enum v4l2_buf_type type, 334 __u32 pixel_format) 335 { 336 int ret_enum, errno_enum; 337 struct v4l2_fmtdesc format; 338 __u32 i; 339 int supported = 0; 340 341 i = 0; 342 do { 343 memset(&format, 0xff, sizeof(format)); 344 format.index = i; 345 format.type = type; 346 347 ret_enum = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format); 348 errno_enum = errno; 349 350 dprintf 351 ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_enum=%i, errno_enum=%i\n", 352 __FILE__, __LINE__, i, format.type, ret_enum, errno_enum); 353 354 i++; 355 } while (ret_enum == 0 && i != 0 && format.pixelformat != pixel_format); 356 357 if (ret_enum == 0 && i != 0 && format.pixelformat == pixel_format) { 358 supported = 1; 359 } 360 361 return supported; 362 } 363 364 static int supported_pixel_format(__u32 pixel_format) 365 { 366 int supported = 0; 367 368 supported = 369 supported_pixel_format_type(V4L2_BUF_TYPE_VIDEO_CAPTURE, 370 pixel_format); 371 if (!supported) { 372 supported = 373 supported_pixel_format_type(V4L2_BUF_TYPE_VIDEO_OUTPUT, 374 pixel_format); 375 if (!supported) { 376 supported = 377 supported_pixel_format_type 378 (V4L2_BUF_TYPE_VIDEO_OVERLAY, pixel_format); 379 if (!supported) { 380 supported = 381 supported_pixel_format_type 382 (V4L2_BUF_TYPE_PRIVATE, pixel_format); 383 } 384 } 385 } 386 387 return supported; 388 } 389 390 static void do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(__u32 fmt) 391 { 392 struct v4l2_frmsizeenum framesize; 393 int ret_frame, errno_frame; 394 __u32 i; 395 396 if (!supported_pixel_format(fmt)) { 397 i = 0; 398 memset(&framesize, 0xff, sizeof(framesize)); 399 framesize.index = i; 400 framesize.pixel_format = fmt; 401 ret_frame = 402 ioctl(get_video_fd(), VIDIOC_ENUM_FRAMESIZES, &framesize); 403 errno_frame = errno; 404 405 dprintf 406 ("\t%s:%u: VIDIOC_ENUM_FRAMESIZES, index=%u, pixel_format=0x%x, ret_frame=%i, errno_frame=%i\n", 407 __FILE__, __LINE__, i, fmt, ret_frame, errno_frame); 408 409 CU_ASSERT_EQUAL(ret_frame, -1); 410 CU_ASSERT_EQUAL(errno_frame, EINVAL); 411 } 412 413 } 414 415 void test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format() 416 { 417 418 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(U32_MIN); 419 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format((__u32) S32_MIN); 420 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format((__u32) S32_MAX); 421 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(U32_MAX); 422 423 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 424 (V4L2_PIX_FMT_RGB332); 425 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 426 (V4L2_PIX_FMT_RGB444); 427 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 428 (V4L2_PIX_FMT_RGB555); 429 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 430 (V4L2_PIX_FMT_RGB565); 431 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 432 (V4L2_PIX_FMT_RGB555X); 433 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 434 (V4L2_PIX_FMT_RGB565X); 435 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_BGR24); 436 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_RGB24); 437 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_BGR32); 438 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_RGB32); 439 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_GREY); 440 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_Y16); 441 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_PAL8); 442 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 443 (V4L2_PIX_FMT_YVU410); 444 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 445 (V4L2_PIX_FMT_YVU420); 446 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_YUYV); 447 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_UYVY); 448 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 449 (V4L2_PIX_FMT_YUV422P); 450 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 451 (V4L2_PIX_FMT_YUV411P); 452 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_Y41P); 453 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 454 (V4L2_PIX_FMT_YUV444); 455 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 456 (V4L2_PIX_FMT_YUV555); 457 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 458 (V4L2_PIX_FMT_YUV565); 459 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_YUV32); 460 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_NV12); 461 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_NV21); 462 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 463 (V4L2_PIX_FMT_YUV410); 464 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 465 (V4L2_PIX_FMT_YUV420); 466 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_YYUV); 467 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_HI240); 468 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_HM12); 469 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 470 (V4L2_PIX_FMT_SBGGR8); 471 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 472 (V4L2_PIX_FMT_SBGGR16); 473 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_MJPEG); 474 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_JPEG); 475 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_DV); 476 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_MPEG); 477 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_WNVA); 478 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 479 (V4L2_PIX_FMT_SN9C10X); 480 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_PWC1); 481 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_PWC2); 482 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 483 (V4L2_PIX_FMT_ET61X251); 484 485 #ifdef V4L2_PIX_FMT_VYUY 486 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_VYUY); 487 #endif 488 489 #ifdef V4L2_PIX_FMT_NV16 490 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_NV16); 491 #endif 492 493 #ifdef V4L2_PIX_FMT_NV61 494 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_NV61); 495 #endif 496 497 #ifdef V4L2_PIX_FMT_SGBRG8 498 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 499 (V4L2_PIX_FMT_SGBRG8); 500 #endif 501 502 #ifdef V4L2_PIX_FMT_SGRBG8 503 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 504 (V4L2_PIX_FMT_SGRBG8); 505 #endif 506 507 #ifdef V4L2_PIX_FMT_SGRBG10 508 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 509 (V4L2_PIX_FMT_SGRBG10); 510 #endif 511 512 #ifdef V4L2_PIX_FMT_SGRBG10DPCM8 513 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 514 (V4L2_PIX_FMT_SGRBG10DPCM8); 515 #endif 516 517 #ifdef V4L2_PIX_FMT_SPCA501 518 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 519 (V4L2_PIX_FMT_SPCA501); 520 #endif 521 522 #ifdef V4L2_PIX_FMT_SPCA505 523 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 524 (V4L2_PIX_FMT_SPCA505); 525 #endif 526 527 #ifdef V4L2_PIX_FMT_SPCA508 528 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 529 (V4L2_PIX_FMT_SPCA508); 530 #endif 531 532 #ifdef V4L2_PIX_FMT_SPCA561 533 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 534 (V4L2_PIX_FMT_SPCA561); 535 #endif 536 537 #ifdef V4L2_PIX_FMT_PAC207 538 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 539 (V4L2_PIX_FMT_PAC207); 540 #endif 541 542 #ifdef V4L2_PIX_FMT_MR97310A 543 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 544 (V4L2_PIX_FMT_MR97310A); 545 #endif 546 547 #ifdef V4L2_PIX_FMT_SQ905C 548 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format 549 (V4L2_PIX_FMT_SQ905C); 550 #endif 551 552 #ifdef V4L2_PIX_FMT_PJPG 553 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_PJPG); 554 #endif 555 556 #ifdef V4L2_PIX_FMT_YVYU 557 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_YVYU); 558 #endif 559 560 #ifdef V4L2_PIX_FMT_OV511 561 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_OV511); 562 #endif 563 564 #ifdef V4L2_PIX_FMT_OV518 565 do_test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format(V4L2_PIX_FMT_OV518); 566 #endif 567 568 } 569 570 void test_VIDIOC_ENUM_FRAMESIZES_NULL() 571 { 572 struct v4l2_fmtdesc format_capture; 573 struct v4l2_fmtdesc format_output; 574 struct v4l2_fmtdesc format_overlay; 575 struct v4l2_fmtdesc format_private; 576 struct v4l2_frmsizeenum framesize; 577 int ret_fmt_capture, errno_fmt_capture; 578 int ret_fmt_output, errno_fmt_output; 579 int ret_fmt_overlay, errno_fmt_overlay; 580 int ret_fmt_private, errno_fmt_private; 581 int ret_size, errno_size; 582 int ret_null, errno_null; 583 __u32 fmt; 584 585 memset(&format_capture, 0xff, sizeof(format_capture)); 586 format_capture.index = 0; 587 format_capture.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 588 589 ret_fmt_capture = 590 ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format_capture); 591 errno_fmt_capture = errno; 592 593 dprintf 594 ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_fmt_capture=%i, errno_fmt_capture=%i\n", 595 __FILE__, __LINE__, format_capture.index, format_capture.type, 596 ret_fmt_capture, errno_fmt_capture); 597 598 memset(&format_output, 0xff, sizeof(format_output)); 599 format_output.index = 0; 600 format_output.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; 601 602 ret_fmt_output = ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format_output); 603 errno_fmt_output = errno; 604 605 dprintf 606 ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_fmt_output=%i, errno_fmt_output=%i\n", 607 __FILE__, __LINE__, format_output.index, format_output.type, 608 ret_fmt_output, errno_fmt_output); 609 610 memset(&format_overlay, 0xff, sizeof(format_overlay)); 611 format_overlay.index = 0; 612 format_overlay.type = V4L2_BUF_TYPE_VIDEO_OVERLAY; 613 614 ret_fmt_overlay = 615 ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format_overlay); 616 errno_fmt_overlay = errno; 617 618 dprintf 619 ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_fmt_overlay=%i, errno_fmt_overlay=%i\n", 620 __FILE__, __LINE__, format_overlay.index, format_overlay.type, 621 ret_fmt_overlay, errno_fmt_overlay); 622 623 memset(&format_private, 0xff, sizeof(format_private)); 624 format_private.index = 0; 625 format_private.type = V4L2_BUF_TYPE_PRIVATE; 626 627 ret_fmt_private = 628 ioctl(get_video_fd(), VIDIOC_ENUM_FMT, &format_private); 629 errno_fmt_private = errno; 630 631 dprintf 632 ("\t%s:%u: VIDIOC_ENUM_FMT, index=%u, type=%i, ret_fmt_private=%i, errno_fmt_private=%i\n", 633 __FILE__, __LINE__, format_private.index, format_private.type, 634 ret_fmt_private, errno_fmt_private); 635 636 if (ret_fmt_capture == 0) { 637 fmt = format_capture.pixelformat; 638 } else if (ret_fmt_output == 0) { 639 fmt = format_output.pixelformat; 640 } else if (ret_fmt_overlay == 0) { 641 fmt = format_overlay.pixelformat; 642 } else if (ret_fmt_private == 0) { 643 fmt = format_private.pixelformat; 644 } else { 645 fmt = 0; 646 } 647 648 memset(&framesize, 0xff, sizeof(framesize)); 649 framesize.index = 0; 650 framesize.pixel_format = fmt; 651 ret_size = ioctl(get_video_fd(), VIDIOC_ENUM_FRAMESIZES, &framesize); 652 errno_size = errno; 653 654 dprintf 655 ("\tVIDIOC_ENUM_FRAMESIZES, index=%u, pixel_format=0x%x, ret_size=%i, errno_size=%i\n", 656 framesize.index, framesize.pixel_format, ret_size, errno_size); 657 658 ret_null = ioctl(get_video_fd(), VIDIOC_ENUM_FRAMESIZES, NULL); 659 errno_null = errno; 660 661 dprintf("\tVIDIOC_ENUM_FRAMESIZES, ret_null=%i, errno_null=%i\n", 662 ret_null, errno_null); 663 664 if (ret_size == 0) { 665 CU_ASSERT_EQUAL(ret_size, 0); 666 CU_ASSERT_EQUAL(ret_null, -1); 667 CU_ASSERT_EQUAL(errno_null, EFAULT); 668 } else { 669 CU_ASSERT_EQUAL(ret_size, -1); 670 CU_ASSERT_EQUAL(errno_size, EINVAL); 671 CU_ASSERT_EQUAL(ret_null, -1); 672 CU_ASSERT_EQUAL(errno_null, EINVAL); 673 } 674 675 } 676