1 /* 2 * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org> 3 * Copyright (c) 2016-2017 The strace developers. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include "tests.h" 30 #include <stdio.h> 31 #include <string.h> 32 #include <sys/ioctl.h> 33 #include <linux/types.h> 34 #include <linux/videodev2.h> 35 36 #if WORDS_BIGENDIAN 37 # define cc0(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 24)) 38 # define cc1(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 16)) 39 # define cc2(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 8)) 40 # define cc3(arg) ((unsigned int) (unsigned char) (arg)) 41 # define fourcc(a0, a1, a2, a3) \ 42 ((unsigned int)(a3) | \ 43 ((unsigned int)(a2) << 8) | \ 44 ((unsigned int)(a1) << 16) | \ 45 ((unsigned int)(a0) << 24)) 46 #else 47 # define cc0(arg) ((unsigned int) (unsigned char) (arg)) 48 # define cc1(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 8)) 49 # define cc2(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 16)) 50 # define cc3(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 24)) 51 # define fourcc(a0, a1, a2, a3) \ 52 ((unsigned int)(a0) | \ 53 ((unsigned int)(a1) << 8) | \ 54 ((unsigned int)(a2) << 16) | \ 55 ((unsigned int)(a3) << 24)) 56 #endif 57 58 static const unsigned int magic = 0xdeadbeef; 59 60 static void 61 init_v4l2_format(struct v4l2_format *const f, 62 const unsigned int buf_type) 63 { 64 memset(f, -1, sizeof(*f)); 65 f->type = buf_type; 66 switch (buf_type) { 67 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 68 case V4L2_BUF_TYPE_VIDEO_OUTPUT: 69 f->fmt.pix.width = 0x657b8160; 70 f->fmt.pix.height = 0x951c0047; 71 f->fmt.pix.pixelformat = magic; 72 f->fmt.pix.field = V4L2_FIELD_NONE; 73 f->fmt.pix.bytesperline = 0xdf20d185; 74 f->fmt.pix.sizeimage = 0x0cf7be41; 75 f->fmt.pix.colorspace = V4L2_COLORSPACE_JPEG; 76 break; 77 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE 78 case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: 79 case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: { 80 unsigned int i; 81 82 f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; 83 f->fmt.pix_mp.width = 0x1f3b774b; 84 f->fmt.pix_mp.height = 0xab96a8d6; 85 f->fmt.pix_mp.pixelformat = magic; 86 f->fmt.pix_mp.field = V4L2_FIELD_NONE; 87 f->fmt.pix_mp.colorspace = V4L2_COLORSPACE_JPEG; 88 struct v4l2_plane_pix_format *cur_pix = 89 f->fmt.pix_mp.plane_fmt; 90 for (i = 0; 91 i < ARRAY_SIZE(f->fmt.pix_mp.plane_fmt); 92 i++) { 93 cur_pix[i].sizeimage = 0x1e3c531c | i; 94 cur_pix[i].bytesperline = 0xa983d721 | i; 95 } 96 break; 97 } 98 #endif 99 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY 100 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: 101 #endif 102 case V4L2_BUF_TYPE_VIDEO_OVERLAY: 103 f->fmt.win.w.left = 0xe8373662; 104 f->fmt.win.w.top = 0x0336d283; 105 f->fmt.win.w.width = 0x9235fe72; 106 f->fmt.win.w.height = 0xbbd886c8; 107 f->fmt.win.field = V4L2_FIELD_ANY; 108 f->fmt.win.chromakey = 0xdb1f991f; 109 f->fmt.win.clipcount = 2; 110 f->fmt.win.clips = 111 tail_alloc(sizeof(*f->fmt.win.clips) * 112 f->fmt.win.clipcount); 113 f->fmt.win.clips[0].c.left = 0x3313d36e; 114 f->fmt.win.clips[0].c.top = 0xcdffe510; 115 f->fmt.win.clips[0].c.width = 0x2064f3a8; 116 f->fmt.win.clips[0].c.height = 0xd06d314a; 117 f->fmt.win.clips[1].c.left = 0xd8c8a83f; 118 f->fmt.win.clips[1].c.top = 0x336e87ba; 119 f->fmt.win.clips[1].c.width = 0x9e3a6fb3; 120 f->fmt.win.clips[1].c.height = 0x05617b76; 121 122 f->fmt.win.bitmap = (void *) -2UL; 123 #ifdef HAVE_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA 124 f->fmt.win.global_alpha = 0xce; 125 #endif 126 break; 127 case V4L2_BUF_TYPE_VBI_CAPTURE: 128 case V4L2_BUF_TYPE_VBI_OUTPUT: 129 f->fmt.vbi.sampling_rate = 0x3d9b5b79; 130 f->fmt.vbi.offset = 0x055b3a09; 131 f->fmt.vbi.samples_per_line = 0xf176d436; 132 f->fmt.vbi.sample_format = magic; 133 f->fmt.vbi.start[0] = 0x9858e2eb; 134 f->fmt.vbi.start[1] = 0x8a4dc8c1; 135 f->fmt.vbi.count[0] = 0x4bcf36a3; 136 f->fmt.vbi.count[1] = 0x97dff65f; 137 f->fmt.vbi.flags = V4L2_VBI_INTERLACED; 138 break; 139 #if HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE 140 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: 141 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: { 142 unsigned int i; 143 144 f->fmt.sliced.service_set = V4L2_SLICED_VPS; 145 f->fmt.sliced.io_size = 0xd897925a; 146 for (i = 0; 147 i < ARRAY_SIZE(f->fmt.sliced.service_lines[0]); 148 i++) { 149 f->fmt.sliced.service_lines[0][i] = 0xc38e | i; 150 f->fmt.sliced.service_lines[1][i] = 0x3abb | i; 151 } 152 break; 153 } 154 #endif 155 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT 156 case V4L2_BUF_TYPE_SDR_OUTPUT: 157 #endif 158 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE 159 case V4L2_BUF_TYPE_SDR_CAPTURE: 160 f->fmt.sdr.pixelformat = magic; 161 #ifdef HAVE_STRUCT_V4L2_SDR_FORMAT_BUFFERSIZE 162 f->fmt.sdr.buffersize = 0x25afabfb; 163 #endif 164 break; 165 #endif 166 } 167 } 168 169 static void 170 dprint_ioctl_v4l2(struct v4l2_format *const f, 171 const char *request, const unsigned int buf_type, 172 const char *buf_type_string) 173 { 174 switch (buf_type) { 175 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 176 case V4L2_BUF_TYPE_VIDEO_OUTPUT: 177 printf("ioctl(-1, %s, {type=%s" 178 ", fmt.pix={width=%u, height=%u, pixelformat=" 179 "v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')" 180 ", field=V4L2_FIELD_NONE, bytesperline=%u, sizeimage=%u" 181 ", colorspace=V4L2_COLORSPACE_JPEG}}) = -1 EBADF (%m)\n", 182 request, 183 buf_type_string, 184 f->fmt.pix.width, f->fmt.pix.height, 185 cc0(magic), cc1(magic), cc2(magic), cc3(magic), 186 f->fmt.pix.bytesperline, 187 f->fmt.pix.sizeimage); 188 break; 189 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE 190 case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: 191 case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: { 192 unsigned int i; 193 194 printf("ioctl(-1, %s" 195 ", {type=%s" 196 ", fmt.pix_mp={width=%u, height=%u, pixelformat=" 197 "v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')" 198 ", field=V4L2_FIELD_NONE, colorspace=" 199 "V4L2_COLORSPACE_JPEG, plane_fmt=[", 200 request, 201 buf_type_string, 202 f->fmt.pix_mp.width, f->fmt.pix_mp.height, 203 cc0(magic), cc1(magic), cc2(magic), cc3(magic)); 204 for (i = 0; 205 i < ARRAY_SIZE(f->fmt.pix_mp.plane_fmt); 206 ++i) { 207 if (i) 208 printf(", "); 209 printf("{sizeimage=%u, bytesperline=%u}", 210 f->fmt.pix_mp.plane_fmt[i].sizeimage, 211 f->fmt.pix_mp.plane_fmt[i].bytesperline); 212 } 213 printf("], num_planes=%u}}) = -1 EBADF (%m)\n", 214 f->fmt.pix_mp.num_planes); 215 break; 216 } 217 #endif 218 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY 219 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: 220 #endif 221 case V4L2_BUF_TYPE_VIDEO_OVERLAY: 222 printf("ioctl(-1, %s, {type=%s" 223 ", fmt.win={left=%d, top=%d, width=%u, height=%u" 224 ", field=V4L2_FIELD_ANY, chromakey=%#x, clips=" 225 "[{left=%d, top=%d, width=%u, height=%u}, " 226 "{left=%d, top=%d, width=%u, height=%u}]" 227 ", clipcount=%u, bitmap=%p" 228 #ifdef HAVE_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA 229 ", global_alpha=%#x" 230 #endif 231 "}}) = -1 EBADF (%m)\n", 232 request, 233 buf_type_string, 234 f->fmt.win.w.left, f->fmt.win.w.top, 235 f->fmt.win.w.width, f->fmt.win.w.height, 236 f->fmt.win.chromakey, 237 f->fmt.win.clips[0].c.left, 238 f->fmt.win.clips[0].c.top, 239 f->fmt.win.clips[0].c.width, 240 f->fmt.win.clips[0].c.height, 241 f->fmt.win.clips[1].c.left, 242 f->fmt.win.clips[1].c.top, 243 f->fmt.win.clips[1].c.width, 244 f->fmt.win.clips[1].c.height, 245 f->fmt.win.clipcount, f->fmt.win.bitmap 246 #ifdef HAVE_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA 247 , f->fmt.win.global_alpha 248 #endif 249 ); 250 break; 251 case V4L2_BUF_TYPE_VBI_CAPTURE: 252 case V4L2_BUF_TYPE_VBI_OUTPUT: 253 printf("ioctl(-1, %s, {type=%s" 254 ", fmt.vbi={sampling_rate=%u, offset=%u" 255 ", samples_per_line=%u, sample_format=" 256 "v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')" 257 ", start=[%u, %u], count=[%u, %u]" 258 ", flags=V4L2_VBI_INTERLACED}})" 259 " = -1 EBADF (%m)\n", 260 request, 261 buf_type_string, 262 f->fmt.vbi.sampling_rate, f->fmt.vbi.offset, 263 f->fmt.vbi.samples_per_line, 264 cc0(magic), cc1(magic), cc2(magic), cc3(magic), 265 f->fmt.vbi.start[0], f->fmt.vbi.start[1], 266 f->fmt.vbi.count[0], f->fmt.vbi.count[1]); 267 break; 268 #if HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE 269 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: 270 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: { 271 unsigned int i, j; 272 273 printf("ioctl(-1, %s, {type=%s" 274 ", fmt.sliced={service_set=V4L2_SLICED_VPS" 275 ", io_size=%u, service_lines=[", 276 request, 277 buf_type_string, 278 f->fmt.sliced.io_size); 279 for (i = 0; 280 i < ARRAY_SIZE(f->fmt.sliced.service_lines); 281 i++) { 282 if (i > 0) 283 printf(", "); 284 printf("["); 285 for (j = 0; 286 j < ARRAY_SIZE(f->fmt.sliced.service_lines[0]); 287 j++) { 288 if (j > 0) 289 printf(", "); 290 printf("%#x", 291 f->fmt.sliced.service_lines[i][j]); 292 } 293 printf("]"); 294 } 295 printf("]}}) = -1 EBADF (%m)\n"); 296 break; 297 } 298 #endif 299 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT 300 case V4L2_BUF_TYPE_SDR_OUTPUT: 301 #endif 302 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE 303 case V4L2_BUF_TYPE_SDR_CAPTURE: 304 printf("ioctl(-1, %s, {type=%s" 305 ", fmt.sdr={pixelformat=v4l2_fourcc('\\x%x', '\\x%x'," 306 " '\\x%x', '\\x%x')" 307 #ifdef HAVE_STRUCT_V4L2_SDR_FORMAT_BUFFERSIZE 308 ", buffersize=%u" 309 #endif 310 "}}) = -1 EBADF (%m)\n", 311 request, 312 buf_type_string, 313 cc0(magic), cc1(magic), cc2(magic), cc3(magic) 314 #ifdef HAVE_STRUCT_V4L2_SDR_FORMAT_BUFFERSIZE 315 , f->fmt.sdr.buffersize 316 #endif 317 ); 318 break; 319 #endif 320 } 321 } 322 #define print_ioctl_v4l2(v4l2_format, request, buf_type) \ 323 dprint_ioctl_v4l2((v4l2_format), (request), (buf_type), #buf_type) 324 325 int 326 main(void) 327 { 328 const unsigned int size = get_page_size(); 329 void *const page = tail_alloc(size); 330 fill_memory(page, size); 331 332 unsigned char cc[sizeof(int)] = { 'A', '\'', '\\', '\xfa' }; 333 334 /* VIDIOC_QUERYCAP */ 335 ioctl(-1, VIDIOC_QUERYCAP, 0); 336 printf("ioctl(-1, VIDIOC_QUERYCAP, NULL) = -1 EBADF (%m)\n"); 337 338 ioctl(-1, VIDIOC_QUERYCAP, page); 339 printf("ioctl(-1, VIDIOC_QUERYCAP, %p) = -1 EBADF (%m)\n", page); 340 341 /* VIDIOC_ENUM_FMT */ 342 ioctl(-1, VIDIOC_ENUM_FMT, 0); 343 printf("ioctl(-1, VIDIOC_ENUM_FMT, NULL) = -1 EBADF (%m)\n"); 344 345 TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_fmtdesc, p_fmtdesc); 346 p_fmtdesc->index = magic; 347 p_fmtdesc->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 348 ioctl(-1, VIDIOC_ENUM_FMT, p_fmtdesc); 349 printf("ioctl(-1, VIDIOC_ENUM_FMT, {index=%u" 350 ", type=V4L2_BUF_TYPE_VIDEO_CAPTURE}) = -1 EBADF (%m)\n", 351 p_fmtdesc->index); 352 353 /* VIDIOC_G_FMT */ 354 ioctl(-1, VIDIOC_G_FMT, 0); 355 printf("ioctl(-1, VIDIOC_G_FMT, NULL) = -1 EBADF (%m)\n"); 356 357 TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_format, p_format); 358 359 p_format->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 360 ioctl(-1, VIDIOC_G_FMT, p_format); 361 printf("ioctl(-1, VIDIOC_G_FMT" 362 ", {type=V4L2_BUF_TYPE_VIDEO_CAPTURE}) = -1 EBADF (%m)\n"); 363 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE 364 p_format->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; 365 ioctl(-1, VIDIOC_G_FMT, p_format); 366 printf("ioctl(-1, VIDIOC_G_FMT" 367 ", {type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE}) =" 368 " -1 EBADF (%m)\n"); 369 #endif 370 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY 371 p_format->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY; 372 ioctl(-1, VIDIOC_G_FMT, p_format); 373 printf("ioctl(-1, VIDIOC_G_FMT" 374 ", {type=V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY}) =" 375 " -1 EBADF (%m)\n"); 376 #endif 377 p_format->type = V4L2_BUF_TYPE_VIDEO_OVERLAY; 378 ioctl(-1, VIDIOC_G_FMT, p_format); 379 printf("ioctl(-1, VIDIOC_G_FMT" 380 ", {type=V4L2_BUF_TYPE_VIDEO_OVERLAY}) =" 381 " -1 EBADF (%m)\n"); 382 383 p_format->type = V4L2_BUF_TYPE_VBI_CAPTURE; 384 ioctl(-1, VIDIOC_G_FMT, p_format); 385 printf("ioctl(-1, VIDIOC_G_FMT" 386 ", {type=V4L2_BUF_TYPE_VBI_CAPTURE}) = -1 EBADF (%m)\n"); 387 #if HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE 388 p_format->type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE; 389 ioctl(-1, VIDIOC_G_FMT, p_format); 390 printf("ioctl(-1, VIDIOC_G_FMT" 391 ", {type=V4L2_BUF_TYPE_SLICED_VBI_CAPTURE}) = -1 EBADF (%m)\n"); 392 #endif 393 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE 394 p_format->type = V4L2_BUF_TYPE_SDR_CAPTURE; 395 ioctl(-1, VIDIOC_G_FMT, p_format); 396 printf("ioctl(-1, VIDIOC_G_FMT" 397 ", {type=V4L2_BUF_TYPE_SDR_CAPTURE}) = -1 EBADF (%m)\n"); 398 #endif 399 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT 400 p_format->type = V4L2_BUF_TYPE_SDR_OUTPUT; 401 ioctl(-1, VIDIOC_G_FMT, p_format); 402 printf("ioctl(-1, VIDIOC_G_FMT" 403 ", {type=V4L2_BUF_TYPE_SDR_OUTPUT}) = -1 EBADF (%m)\n"); 404 #endif 405 /* VIDIOC_S_FMT */ 406 ioctl(-1, VIDIOC_S_FMT, 0); 407 printf("ioctl(-1, VIDIOC_S_FMT, NULL) = -1 EBADF (%m)\n"); 408 409 init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OUTPUT); 410 ioctl(-1, VIDIOC_S_FMT, p_format); 411 print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", V4L2_BUF_TYPE_VIDEO_OUTPUT); 412 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE 413 init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); 414 ioctl(-1, VIDIOC_S_FMT, p_format); 415 print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", 416 V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); 417 #endif 418 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY 419 init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY); 420 ioctl(-1, VIDIOC_S_FMT, p_format); 421 print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", 422 V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY); 423 #endif 424 init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OVERLAY); 425 ioctl(-1, VIDIOC_S_FMT, p_format); 426 print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", 427 V4L2_BUF_TYPE_VIDEO_OVERLAY); 428 429 init_v4l2_format(p_format, V4L2_BUF_TYPE_VBI_CAPTURE); 430 ioctl(-1, VIDIOC_S_FMT, p_format); 431 print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", V4L2_BUF_TYPE_VBI_CAPTURE); 432 #if HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE 433 init_v4l2_format(p_format, V4L2_BUF_TYPE_SLICED_VBI_CAPTURE); 434 ioctl(-1, VIDIOC_S_FMT, p_format); 435 print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", 436 V4L2_BUF_TYPE_SLICED_VBI_CAPTURE); 437 #endif 438 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE 439 init_v4l2_format(p_format, V4L2_BUF_TYPE_SDR_CAPTURE); 440 ioctl(-1, VIDIOC_S_FMT, p_format); 441 print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", V4L2_BUF_TYPE_SDR_CAPTURE); 442 #endif 443 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT 444 init_v4l2_format(p_format, V4L2_BUF_TYPE_SDR_OUTPUT); 445 ioctl(-1, VIDIOC_S_FMT, p_format); 446 print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", V4L2_BUF_TYPE_SDR_OUTPUT); 447 #endif 448 /* VIDIOC_TRY_FMT */ 449 ioctl(-1, VIDIOC_TRY_FMT, 0); 450 printf("ioctl(-1, VIDIOC_TRY_FMT, NULL) = -1 EBADF (%m)\n"); 451 452 init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OUTPUT); 453 ioctl(-1, VIDIOC_TRY_FMT, p_format); 454 print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", 455 V4L2_BUF_TYPE_VIDEO_OUTPUT); 456 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE 457 init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); 458 ioctl(-1, VIDIOC_TRY_FMT, p_format); 459 print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", 460 V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); 461 #endif 462 #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY 463 init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY); 464 ioctl(-1, VIDIOC_TRY_FMT, p_format); 465 print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", 466 V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY); 467 #endif 468 init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OVERLAY); 469 ioctl(-1, VIDIOC_TRY_FMT, p_format); 470 print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", 471 V4L2_BUF_TYPE_VIDEO_OVERLAY); 472 473 init_v4l2_format(p_format, V4L2_BUF_TYPE_VBI_CAPTURE); 474 ioctl(-1, VIDIOC_TRY_FMT, p_format); 475 print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", V4L2_BUF_TYPE_VBI_CAPTURE); 476 #if HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE 477 init_v4l2_format(p_format, V4L2_BUF_TYPE_SLICED_VBI_CAPTURE); 478 ioctl(-1, VIDIOC_TRY_FMT, p_format); 479 print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", 480 V4L2_BUF_TYPE_SLICED_VBI_CAPTURE); 481 #endif 482 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE 483 init_v4l2_format(p_format, V4L2_BUF_TYPE_SDR_CAPTURE); 484 ioctl(-1, VIDIOC_TRY_FMT, p_format); 485 print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", V4L2_BUF_TYPE_SDR_CAPTURE); 486 #endif 487 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT 488 init_v4l2_format(p_format, V4L2_BUF_TYPE_SDR_OUTPUT); 489 ioctl(-1, VIDIOC_TRY_FMT, p_format); 490 print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", V4L2_BUF_TYPE_SDR_OUTPUT); 491 #endif 492 struct v4l2_format *const p_v4l2_format = 493 page + size - sizeof(*p_v4l2_format); 494 ioctl(-1, VIDIOC_TRY_FMT, p_v4l2_format); 495 printf("ioctl(-1, VIDIOC_TRY_FMT, {type=%#x /* V4L2_BUF_TYPE_??? */})" 496 " = -1 EBADF (%m)\n", p_v4l2_format->type); 497 498 /* VIDIOC_REQBUFS */ 499 ioctl(-1, VIDIOC_REQBUFS, 0); 500 printf("ioctl(-1, VIDIOC_REQBUFS, NULL) = -1 EBADF (%m)\n"); 501 502 struct v4l2_requestbuffers *const p_v4l2_requestbuffers = 503 page + size - sizeof(*p_v4l2_requestbuffers); 504 ioctl(-1, VIDIOC_REQBUFS, p_v4l2_requestbuffers); 505 printf("ioctl(-1, VIDIOC_REQBUFS, {type=%#x /* V4L2_BUF_TYPE_??? */, " 506 "memory=%#x /* V4L2_MEMORY_??? */, count=%u})" 507 " = -1 EBADF (%m)\n", 508 p_v4l2_requestbuffers->type, 509 p_v4l2_requestbuffers->memory, 510 p_v4l2_requestbuffers->count); 511 512 /* VIDIOC_QUERYBUF */ 513 ioctl(-1, VIDIOC_QUERYBUF, 0); 514 printf("ioctl(-1, VIDIOC_QUERYBUF, NULL) = -1 EBADF (%m)\n"); 515 516 struct v4l2_buffer *const p_v4l2_buffer = 517 page + size - sizeof(*p_v4l2_buffer); 518 ioctl(-1, VIDIOC_QUERYBUF, p_v4l2_buffer); 519 printf("ioctl(-1, VIDIOC_QUERYBUF, {type=%#x /* V4L2_BUF_TYPE_??? */" 520 ", index=%u}) = -1 EBADF (%m)\n", 521 p_v4l2_buffer->type, p_v4l2_buffer->index); 522 523 /* VIDIOC_QBUF */ 524 ioctl(-1, VIDIOC_QBUF, 0); 525 printf("ioctl(-1, VIDIOC_QBUF, NULL) = -1 EBADF (%m)\n"); 526 527 ioctl(-1, VIDIOC_QBUF, p_v4l2_buffer); 528 printf("ioctl(-1, VIDIOC_QBUF, {type=%#x /* V4L2_BUF_TYPE_??? */" 529 ", index=%u}) = -1 EBADF (%m)\n", 530 p_v4l2_buffer->type, p_v4l2_buffer->index); 531 532 /* VIDIOC_DQBUF */ 533 ioctl(-1, VIDIOC_DQBUF, 0); 534 printf("ioctl(-1, VIDIOC_DQBUF, NULL) = -1 EBADF (%m)\n"); 535 536 ioctl(-1, VIDIOC_DQBUF, p_v4l2_buffer); 537 printf("ioctl(-1, VIDIOC_DQBUF, {type=%#x" 538 " /* V4L2_BUF_TYPE_??? */}) = -1 EBADF (%m)\n", 539 p_v4l2_buffer->type); 540 541 /* VIDIOC_G_FBUF */ 542 ioctl(-1, VIDIOC_G_FBUF, 0); 543 printf("ioctl(-1, VIDIOC_G_FBUF, NULL) = -1 EBADF (%m)\n"); 544 545 ioctl(-1, VIDIOC_G_FBUF, page); 546 printf("ioctl(-1, VIDIOC_G_FBUF, %p) = -1 EBADF (%m)\n", page); 547 548 /* VIDIOC_S_FBUF */ 549 ioctl(-1, VIDIOC_S_FBUF, 0); 550 printf("ioctl(-1, VIDIOC_S_FBUF, NULL) = -1 EBADF (%m)\n"); 551 552 struct v4l2_framebuffer *const p_v4l2_framebuffer = 553 page + size - sizeof(*p_v4l2_framebuffer); 554 ioctl(-1, VIDIOC_S_FBUF, p_v4l2_framebuffer); 555 printf("ioctl(-1, VIDIOC_S_FBUF, {capability=%#x" 556 ", flags=%#x, base=%p}) = -1 EBADF (%m)\n", 557 p_v4l2_framebuffer->capability, 558 p_v4l2_framebuffer->flags, 559 p_v4l2_framebuffer->base); 560 561 /* VIDIOC_STREAMON */ 562 ioctl(-1, VIDIOC_STREAMON, 0); 563 printf("ioctl(-1, VIDIOC_STREAMON, NULL) = -1 EBADF (%m)\n"); 564 565 int *const p_int = page + size - sizeof(int); 566 ioctl(-1, VIDIOC_STREAMON, p_int); 567 printf("ioctl(-1, VIDIOC_STREAMON, [%#x /* V4L2_BUF_TYPE_??? */])" 568 " = -1 EBADF (%m)\n", *p_int); 569 570 /* VIDIOC_STREAMOFF */ 571 ioctl(-1, VIDIOC_STREAMOFF, 0); 572 printf("ioctl(-1, VIDIOC_STREAMOFF, NULL) = -1 EBADF (%m)\n"); 573 574 ioctl(-1, VIDIOC_STREAMOFF, p_int); 575 printf("ioctl(-1, VIDIOC_STREAMOFF, [%#x /* V4L2_BUF_TYPE_??? */])" 576 " = -1 EBADF (%m)\n", *p_int); 577 578 /* VIDIOC_G_PARM */ 579 ioctl(-1, VIDIOC_G_PARM, 0); 580 printf("ioctl(-1, VIDIOC_G_PARM, NULL) = -1 EBADF (%m)\n"); 581 582 struct v4l2_streamparm *const p_v4l2_streamparm = 583 page + size - sizeof(*p_v4l2_streamparm); 584 ioctl(-1, VIDIOC_G_PARM, p_v4l2_streamparm); 585 printf("ioctl(-1, VIDIOC_G_PARM, {type=%#x /* V4L2_BUF_TYPE_??? */})" 586 " = -1 EBADF (%m)\n", p_v4l2_streamparm->type); 587 588 /* VIDIOC_S_PARM */ 589 ioctl(-1, VIDIOC_S_PARM, 0); 590 printf("ioctl(-1, VIDIOC_S_PARM, NULL) = -1 EBADF (%m)\n"); 591 592 ioctl(-1, VIDIOC_S_PARM, p_v4l2_streamparm); 593 printf("ioctl(-1, VIDIOC_S_PARM, {type=%#x /* V4L2_BUF_TYPE_??? */})" 594 " = -1 EBADF (%m)\n", p_v4l2_streamparm->type); 595 596 TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_streamparm, p_streamparm); 597 p_streamparm->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 598 p_streamparm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; 599 p_streamparm->parm.capture.capturemode = V4L2_MODE_HIGHQUALITY; 600 p_streamparm->parm.capture.timeperframe.numerator = 0xdeadbeef; 601 p_streamparm->parm.capture.timeperframe.denominator = 0xbadc0ded; 602 ioctl(-1, VIDIOC_S_PARM, p_streamparm); 603 printf("ioctl(-1, VIDIOC_S_PARM, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE" 604 ", parm.capture={capability=V4L2_CAP_TIMEPERFRAME" 605 ", capturemode=V4L2_MODE_HIGHQUALITY, timeperframe=%u/%u" 606 ", extendedmode=%u, readbuffers=%u}}) = -1 EBADF (%m)\n", 607 p_streamparm->parm.capture.timeperframe.numerator, 608 p_streamparm->parm.capture.timeperframe.denominator, -1U, -1U); 609 610 p_streamparm->type = V4L2_BUF_TYPE_VIDEO_OUTPUT; 611 p_streamparm->parm.output.outputmode = 0; 612 ioctl(-1, VIDIOC_S_PARM, p_streamparm); 613 printf("ioctl(-1, VIDIOC_S_PARM, {type=V4L2_BUF_TYPE_VIDEO_OUTPUT" 614 ", parm.output={capability=V4L2_CAP_TIMEPERFRAME" 615 ", outputmode=0, timeperframe=%u/%u" 616 ", extendedmode=%u, writebuffers=%u}}) = -1 EBADF (%m)\n", 617 p_streamparm->parm.output.timeperframe.numerator, 618 p_streamparm->parm.output.timeperframe.denominator, -1U, -1U); 619 620 /* VIDIOC_G_STD */ 621 ioctl(-1, VIDIOC_G_STD, 0); 622 printf("ioctl(-1, VIDIOC_G_STD, NULL) = -1 EBADF (%m)\n"); 623 624 ioctl(-1, VIDIOC_G_STD, page); 625 printf("ioctl(-1, VIDIOC_G_STD, %p) = -1 EBADF (%m)\n", page); 626 627 /* VIDIOC_S_STD */ 628 ioctl(-1, VIDIOC_S_STD, 0); 629 printf("ioctl(-1, VIDIOC_S_STD, NULL) = -1 EBADF (%m)\n"); 630 631 long long *const p_longlong = page + size - sizeof(*p_longlong); 632 ioctl(-1, VIDIOC_S_STD, p_longlong); 633 printf("ioctl(-1, VIDIOC_S_STD, [%#llx]) = -1 EBADF (%m)\n", 634 *p_longlong); 635 636 /* VIDIOC_ENUMSTD */ 637 ioctl(-1, VIDIOC_ENUMSTD, 0); 638 printf("ioctl(-1, VIDIOC_ENUMSTD, NULL) = -1 EBADF (%m)\n"); 639 640 struct v4l2_standard *const p_v4l2_standard = 641 page + size - sizeof(*p_v4l2_standard); 642 ioctl(-1, VIDIOC_ENUMSTD, p_v4l2_standard); 643 printf("ioctl(-1, VIDIOC_ENUMSTD, {index=%u}) = -1 EBADF (%m)\n", 644 p_v4l2_standard->index); 645 646 /* VIDIOC_ENUMINPUT */ 647 ioctl(-1, VIDIOC_ENUMINPUT, 0); 648 printf("ioctl(-1, VIDIOC_ENUMINPUT, NULL) = -1 EBADF (%m)\n"); 649 650 struct v4l2_input *const p_v4l2_input = 651 page + size - sizeof(*p_v4l2_input); 652 ioctl(-1, VIDIOC_ENUMINPUT, p_v4l2_input); 653 printf("ioctl(-1, VIDIOC_ENUMINPUT, {index=%u}) = -1 EBADF (%m)\n", 654 p_v4l2_input->index); 655 656 /* VIDIOC_G_CTRL */ 657 ioctl(-1, VIDIOC_G_CTRL, 0); 658 printf("ioctl(-1, VIDIOC_G_CTRL, NULL) = -1 EBADF (%m)\n"); 659 660 struct v4l2_control *const p_v4l2_control = 661 page + size - sizeof(*p_v4l2_control); 662 ioctl(-1, VIDIOC_G_CTRL, p_v4l2_control); 663 printf("ioctl(-1, VIDIOC_G_CTRL, {id=%#x /* V4L2_CID_??? */})" 664 " = -1 EBADF (%m)\n", p_v4l2_control->id); 665 666 /* VIDIOC_S_CTRL */ 667 ioctl(-1, VIDIOC_S_CTRL, 0); 668 printf("ioctl(-1, VIDIOC_S_CTRL, NULL) = -1 EBADF (%m)\n"); 669 670 ioctl(-1, VIDIOC_S_CTRL, p_v4l2_control); 671 printf("ioctl(-1, VIDIOC_S_CTRL, {id=%#x /* V4L2_CID_??? */" 672 ", value=%d}) = -1 EBADF (%m)\n", 673 p_v4l2_control->id, p_v4l2_control->value); 674 675 /* VIDIOC_G_TUNER */ 676 ioctl(-1, VIDIOC_G_TUNER, 0); 677 printf("ioctl(-1, VIDIOC_G_TUNER, NULL) = -1 EBADF (%m)\n"); 678 679 struct v4l2_tuner *const p_v4l2_tuner = 680 page + size - sizeof(*p_v4l2_tuner); 681 ioctl(-1, VIDIOC_G_TUNER, p_v4l2_tuner); 682 printf("ioctl(-1, VIDIOC_G_TUNER, {index=%u})" 683 " = -1 EBADF (%m)\n", p_v4l2_tuner->index); 684 685 /* VIDIOC_S_TUNER */ 686 ioctl(-1, VIDIOC_S_TUNER, 0); 687 printf("ioctl(-1, VIDIOC_S_TUNER, NULL) = -1 EBADF (%m)\n"); 688 689 TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_tuner, p_tuner); 690 p_tuner->index = 0x4fb6df39; 691 strcpy((char *) p_tuner->name, "cum tacent clamant"); 692 p_tuner->type = V4L2_TUNER_RADIO; 693 p_tuner->capability = V4L2_TUNER_CAP_LOW; 694 p_tuner->rangelow = 0xa673bc29; 695 p_tuner->rangehigh = 0xbaf16d12; 696 p_tuner->rxsubchans = V4L2_TUNER_SUB_MONO; 697 p_tuner->audmode = V4L2_TUNER_MODE_MONO; 698 p_tuner->signal = 0x10bf92c8; 699 p_tuner->afc = 0x3bf7e18b; 700 ioctl(-1, VIDIOC_S_TUNER, p_tuner); 701 printf("ioctl(-1, VIDIOC_S_TUNER, {index=%u" 702 ", name=\"cum tacent clamant\"" 703 ", type=V4L2_TUNER_RADIO, capability=V4L2_TUNER_CAP_LOW" 704 ", rangelow=%u, rangehigh=%u" 705 ", rxsubchans=V4L2_TUNER_SUB_MONO" 706 ", audmode=V4L2_TUNER_MODE_MONO, signal=%d, afc=%d" 707 "}) = -1 EBADF (%m)\n", 708 p_tuner->index, p_tuner->rangelow, 709 p_tuner->rangehigh, p_tuner->signal, p_tuner->afc); 710 711 /* VIDIOC_QUERYCTRL */ 712 ioctl(-1, VIDIOC_QUERYCTRL, 0); 713 printf("ioctl(-1, VIDIOC_QUERYCTRL, NULL) = -1 EBADF (%m)\n"); 714 715 struct v4l2_queryctrl *const p_v4l2_queryctrl = 716 page + size - sizeof(*p_v4l2_queryctrl); 717 ioctl(-1, VIDIOC_QUERYCTRL, p_v4l2_queryctrl); 718 # ifdef V4L2_CTRL_FLAG_NEXT_CTRL 719 printf("ioctl(-1, VIDIOC_QUERYCTRL, {id=V4L2_CTRL_FLAG_NEXT_CTRL" 720 "|%#x /* V4L2_CID_??? */}) = -1 EBADF (%m)\n", 721 p_v4l2_queryctrl->id & ~V4L2_CTRL_FLAG_NEXT_CTRL); 722 # else 723 printf("ioctl(-1, VIDIOC_QUERYCTRL, {id=%#x /* V4L2_CID_??? */})" 724 " = -1 EBADF (%m)\n", p_v4l2_queryctrl->id); 725 # endif 726 727 TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_queryctrl, p_queryctrl); 728 p_queryctrl->id = V4L2_CID_SATURATION; 729 ioctl(-1, VIDIOC_QUERYCTRL, p_queryctrl); 730 printf("ioctl(-1, VIDIOC_QUERYCTRL, {id=V4L2_CID_SATURATION})" 731 " = -1 EBADF (%m)\n"); 732 733 /* VIDIOC_G_INPUT */ 734 ioctl(-1, VIDIOC_G_INPUT, 0); 735 printf("ioctl(-1, VIDIOC_G_INPUT, NULL) = -1 EBADF (%m)\n"); 736 737 ioctl(-1, VIDIOC_G_INPUT, page); 738 printf("ioctl(-1, VIDIOC_G_INPUT, %p) = -1 EBADF (%m)\n", page); 739 740 /* VIDIOC_S_INPUT */ 741 ioctl(-1, VIDIOC_S_INPUT, 0); 742 printf("ioctl(-1, VIDIOC_S_INPUT, NULL) = -1 EBADF (%m)\n"); 743 744 ioctl(-1, VIDIOC_S_INPUT, p_int); 745 printf("ioctl(-1, VIDIOC_S_INPUT, [%u]) = -1 EBADF (%m)\n", *p_int); 746 747 /* VIDIOC_CROPCAP */ 748 ioctl(-1, VIDIOC_CROPCAP, 0); 749 printf("ioctl(-1, VIDIOC_CROPCAP, NULL) = -1 EBADF (%m)\n"); 750 751 struct v4l2_cropcap *const p_v4l2_cropcap = 752 page + size - sizeof(*p_v4l2_cropcap); 753 ioctl(-1, VIDIOC_CROPCAP, p_v4l2_cropcap); 754 printf("ioctl(-1, VIDIOC_CROPCAP, {type=%#x /* V4L2_BUF_TYPE_??? */})" 755 " = -1 EBADF (%m)\n", p_v4l2_cropcap->type); 756 757 /* VIDIOC_G_CROP */ 758 ioctl(-1, VIDIOC_G_CROP, 0); 759 printf("ioctl(-1, VIDIOC_G_CROP, NULL) = -1 EBADF (%m)\n"); 760 761 struct v4l2_crop *const p_v4l2_crop = 762 page + size - sizeof(*p_v4l2_crop); 763 ioctl(-1, VIDIOC_G_CROP, p_v4l2_crop); 764 printf("ioctl(-1, VIDIOC_G_CROP, {type=%#x /* V4L2_BUF_TYPE_??? */})" 765 " = -1 EBADF (%m)\n", p_v4l2_crop->type); 766 767 /* VIDIOC_S_CROP */ 768 ioctl(-1, VIDIOC_S_CROP, 0); 769 printf("ioctl(-1, VIDIOC_S_CROP, NULL) = -1 EBADF (%m)\n"); 770 771 ioctl(-1, VIDIOC_S_CROP, p_v4l2_crop); 772 printf("ioctl(-1, VIDIOC_S_CROP, {type=%#x /* V4L2_BUF_TYPE_??? */" 773 ", c={left=%d, top=%d, width=%u, height=%u}}) = -1 EBADF (%m)\n", 774 p_v4l2_crop->type, 775 p_v4l2_crop->c.left, 776 p_v4l2_crop->c.top, 777 p_v4l2_crop->c.width, 778 p_v4l2_crop->c.height); 779 780 #ifdef VIDIOC_S_EXT_CTRLS 781 /* VIDIOC_S_EXT_CTRLS */ 782 ioctl(-1, VIDIOC_S_EXT_CTRLS, 0); 783 printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, NULL) = -1 EBADF (%m)\n"); 784 785 TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_ext_controls, p_ext_controls); 786 p_ext_controls->ctrl_class = V4L2_CTRL_CLASS_USER; 787 p_ext_controls->count = 0; 788 p_ext_controls->controls = (void *) -2UL; 789 ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls); 790 printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, {ctrl_class=V4L2_CTRL_CLASS_USER" 791 ", count=%u}) = -1 EBADF (%m)\n", p_ext_controls->count); 792 793 p_ext_controls->ctrl_class = V4L2_CTRL_CLASS_MPEG; 794 p_ext_controls->count = magic; 795 ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls); 796 printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, {ctrl_class=V4L2_CTRL_CLASS_MPEG" 797 ", count=%u, controls=%p}) = -1 EBADF (%m)\n", 798 p_ext_controls->count, p_ext_controls->controls); 799 800 # if HAVE_DECL_V4L2_CTRL_TYPE_STRING 801 p_ext_controls->count = 2; 802 p_ext_controls->controls = 803 tail_alloc(sizeof(*p_ext_controls->controls) * p_ext_controls->count); 804 p_ext_controls->controls[0].id = V4L2_CID_BRIGHTNESS; 805 p_ext_controls->controls[0].size = 0; 806 p_ext_controls->controls[0].value64 = 0xfacefeeddeadbeefULL; 807 p_ext_controls->controls[1].id = V4L2_CID_CONTRAST; 808 p_ext_controls->controls[1].size = 2; 809 p_ext_controls->controls[1].string = 810 tail_alloc(p_ext_controls->controls[1].size); 811 812 ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls); 813 printf("ioctl(-1, VIDIOC_S_EXT_CTRLS" 814 ", {ctrl_class=V4L2_CTRL_CLASS_MPEG, count=%u, controls=" 815 "[{id=V4L2_CID_BRIGHTNESS, size=0, value=%d, value64=%lld}" 816 ", {id=V4L2_CID_CONTRAST, size=2, string=\"\\377\\377\"}" 817 "] => controls=" 818 "[{id=V4L2_CID_BRIGHTNESS, size=0, value=%d, value64=%lld}" 819 ", {id=V4L2_CID_CONTRAST, size=2, string=\"\\377\\377\"}" 820 "], error_idx=%u}) = -1 EBADF (%m)\n", 821 p_ext_controls->count, 822 p_ext_controls->controls[0].value, 823 (long long) p_ext_controls->controls[0].value64, 824 p_ext_controls->controls[0].value, 825 (long long) p_ext_controls->controls[0].value64, 826 p_ext_controls->error_idx); 827 828 ++p_ext_controls->count; 829 ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls); 830 printf("ioctl(-1, VIDIOC_S_EXT_CTRLS" 831 ", {ctrl_class=V4L2_CTRL_CLASS_MPEG, count=%u, controls=" 832 "[{id=V4L2_CID_BRIGHTNESS, size=0, value=%d, value64=%lld}" 833 ", {id=V4L2_CID_CONTRAST, size=2, string=\"\\377\\377\"}" 834 ", %p]}) = -1 EBADF (%m)\n", 835 p_ext_controls->count, 836 p_ext_controls->controls[0].value, 837 (long long) p_ext_controls->controls[0].value64, 838 p_ext_controls->controls + 2); 839 # endif /* HAVE_DECL_V4L2_CTRL_TYPE_STRING */ 840 841 /* VIDIOC_TRY_EXT_CTRLS */ 842 ioctl(-1, VIDIOC_TRY_EXT_CTRLS, 0); 843 printf("ioctl(-1, VIDIOC_TRY_EXT_CTRLS, NULL) = -1 EBADF (%m)\n"); 844 845 p_ext_controls->ctrl_class = V4L2_CTRL_CLASS_USER; 846 p_ext_controls->count = magic; 847 p_ext_controls->controls = (void *) -2UL; 848 ioctl(-1, VIDIOC_TRY_EXT_CTRLS, p_ext_controls); 849 printf("ioctl(-1, VIDIOC_TRY_EXT_CTRLS" 850 ", {ctrl_class=V4L2_CTRL_CLASS_USER, count=%u, controls=%p})" 851 " = -1 EBADF (%m)\n", 852 p_ext_controls->count, p_ext_controls->controls); 853 854 /* VIDIOC_G_EXT_CTRLS */ 855 ioctl(-1, VIDIOC_G_EXT_CTRLS, 0); 856 printf("ioctl(-1, VIDIOC_G_EXT_CTRLS, NULL) = -1 EBADF (%m)\n"); 857 858 ioctl(-1, VIDIOC_G_EXT_CTRLS, p_ext_controls); 859 printf("ioctl(-1, VIDIOC_G_EXT_CTRLS" 860 ", {ctrl_class=V4L2_CTRL_CLASS_USER, count=%u, controls=%p" 861 ", error_idx=%u}) = -1 EBADF (%m)\n", 862 p_ext_controls->count, p_ext_controls->controls, 863 p_ext_controls->error_idx); 864 #endif /* VIDIOC_S_EXT_CTRLS */ 865 866 #ifdef VIDIOC_ENUM_FRAMESIZES 867 ioctl(-1, VIDIOC_ENUM_FRAMESIZES, 0); 868 printf("ioctl(-1, VIDIOC_ENUM_FRAMESIZES, NULL) = -1 EBADF (%m)\n"); 869 870 TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_frmsizeenum, p_frmsizeenum); 871 p_frmsizeenum->index = magic; 872 p_frmsizeenum->pixel_format = fourcc(cc[0], cc[1], cc[2], cc[3]); 873 874 ioctl(-1, VIDIOC_ENUM_FRAMESIZES, p_frmsizeenum); 875 printf("ioctl(-1, VIDIOC_ENUM_FRAMESIZES, {index=%u" 876 ", pixel_format=v4l2_fourcc('%c', '\\%c', '\\%c', '\\x%x')})" 877 " = -1 EBADF (%m)\n", p_frmsizeenum->index, 878 cc[0], cc[1], cc[2], cc[3]); 879 #endif /* VIDIOC_ENUM_FRAMESIZES */ 880 881 #ifdef VIDIOC_ENUM_FRAMEINTERVALS 882 ioctl(-1, VIDIOC_ENUM_FRAMEINTERVALS, 0); 883 printf("ioctl(-1, VIDIOC_ENUM_FRAMEINTERVALS, NULL) = -1 EBADF (%m)\n"); 884 885 struct v4l2_frmivalenum *const p_v4l2_frmivalenum = 886 page + size - sizeof(*p_v4l2_frmivalenum); 887 ioctl(-1, VIDIOC_ENUM_FRAMEINTERVALS, p_v4l2_frmivalenum); 888 printf("ioctl(-1, VIDIOC_ENUM_FRAMEINTERVALS, {index=%u" 889 ", pixel_format=v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')" 890 ", width=%u, height=%u}) = -1 EBADF (%m)\n", 891 p_v4l2_frmivalenum->index, 892 cc0(p_v4l2_frmivalenum->pixel_format), 893 cc1(p_v4l2_frmivalenum->pixel_format), 894 cc2(p_v4l2_frmivalenum->pixel_format), 895 cc3(p_v4l2_frmivalenum->pixel_format), 896 p_v4l2_frmivalenum->width, 897 p_v4l2_frmivalenum->height); 898 #endif /* VIDIOC_ENUM_FRAMEINTERVALS */ 899 900 #ifdef VIDIOC_CREATE_BUFS 901 ioctl(-1, VIDIOC_CREATE_BUFS, 0); 902 printf("ioctl(-1, VIDIOC_CREATE_BUFS, NULL) = -1 EBADF (%m)\n"); 903 904 struct v4l2_create_buffers *const p_v4l2_create_buffers = 905 page + size - sizeof(*p_v4l2_create_buffers); 906 ioctl(-1, VIDIOC_CREATE_BUFS, p_v4l2_create_buffers); 907 printf("ioctl(-1, VIDIOC_CREATE_BUFS, {count=%u, memory=%#x" 908 " /* V4L2_MEMORY_??? */, format={type=%#x" 909 " /* V4L2_BUF_TYPE_??? */}}) = -1 EBADF (%m)\n", 910 p_v4l2_create_buffers->count, 911 p_v4l2_create_buffers->memory, 912 p_v4l2_create_buffers->format.type); 913 #endif /* VIDIOC_CREATE_BUFS */ 914 915 puts("+++ exited with 0 +++"); 916 return 0; 917 } 918