| /* |
| * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org> |
| * Copyright (c) 2016-2017 The strace developers. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 3. The name of the author may not be used to endorse or promote products |
| * derived from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
| * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
| * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #include "tests.h" |
| #include <stdio.h> |
| #include <string.h> |
| #include <sys/ioctl.h> |
| #include <linux/types.h> |
| #include <linux/videodev2.h> |
| |
| #if WORDS_BIGENDIAN |
| # define cc0(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 24)) |
| # define cc1(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 16)) |
| # define cc2(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 8)) |
| # define cc3(arg) ((unsigned int) (unsigned char) (arg)) |
| # define fourcc(a0, a1, a2, a3) \ |
| ((unsigned int)(a3) | \ |
| ((unsigned int)(a2) << 8) | \ |
| ((unsigned int)(a1) << 16) | \ |
| ((unsigned int)(a0) << 24)) |
| #else |
| # define cc0(arg) ((unsigned int) (unsigned char) (arg)) |
| # define cc1(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 8)) |
| # define cc2(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 16)) |
| # define cc3(arg) ((unsigned int) (unsigned char) ((unsigned int) (arg) >> 24)) |
| # define fourcc(a0, a1, a2, a3) \ |
| ((unsigned int)(a0) | \ |
| ((unsigned int)(a1) << 8) | \ |
| ((unsigned int)(a2) << 16) | \ |
| ((unsigned int)(a3) << 24)) |
| #endif |
| |
| static const unsigned int magic = 0xdeadbeef; |
| |
| static void |
| init_v4l2_format(struct v4l2_format *const f, |
| const unsigned int buf_type) |
| { |
| memset(f, -1, sizeof(*f)); |
| f->type = buf_type; |
| switch (buf_type) { |
| case V4L2_BUF_TYPE_VIDEO_CAPTURE: |
| case V4L2_BUF_TYPE_VIDEO_OUTPUT: |
| f->fmt.pix.width = 0x657b8160; |
| f->fmt.pix.height = 0x951c0047; |
| f->fmt.pix.pixelformat = magic; |
| f->fmt.pix.field = V4L2_FIELD_NONE; |
| f->fmt.pix.bytesperline = 0xdf20d185; |
| f->fmt.pix.sizeimage = 0x0cf7be41; |
| f->fmt.pix.colorspace = V4L2_COLORSPACE_JPEG; |
| break; |
| #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE |
| case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: |
| case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: { |
| unsigned int i; |
| |
| f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; |
| f->fmt.pix_mp.width = 0x1f3b774b; |
| f->fmt.pix_mp.height = 0xab96a8d6; |
| f->fmt.pix_mp.pixelformat = magic; |
| f->fmt.pix_mp.field = V4L2_FIELD_NONE; |
| f->fmt.pix_mp.colorspace = V4L2_COLORSPACE_JPEG; |
| struct v4l2_plane_pix_format *cur_pix = |
| f->fmt.pix_mp.plane_fmt; |
| for (i = 0; |
| i < ARRAY_SIZE(f->fmt.pix_mp.plane_fmt); |
| i++) { |
| cur_pix[i].sizeimage = 0x1e3c531c | i; |
| cur_pix[i].bytesperline = 0xa983d721 | i; |
| } |
| break; |
| } |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY |
| case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: |
| #endif |
| case V4L2_BUF_TYPE_VIDEO_OVERLAY: |
| f->fmt.win.w.left = 0xe8373662; |
| f->fmt.win.w.top = 0x0336d283; |
| f->fmt.win.w.width = 0x9235fe72; |
| f->fmt.win.w.height = 0xbbd886c8; |
| f->fmt.win.field = V4L2_FIELD_ANY; |
| f->fmt.win.chromakey = 0xdb1f991f; |
| f->fmt.win.clipcount = 2; |
| f->fmt.win.clips = |
| tail_alloc(sizeof(*f->fmt.win.clips) * |
| f->fmt.win.clipcount); |
| f->fmt.win.clips[0].c.left = 0x3313d36e; |
| f->fmt.win.clips[0].c.top = 0xcdffe510; |
| f->fmt.win.clips[0].c.width = 0x2064f3a8; |
| f->fmt.win.clips[0].c.height = 0xd06d314a; |
| f->fmt.win.clips[1].c.left = 0xd8c8a83f; |
| f->fmt.win.clips[1].c.top = 0x336e87ba; |
| f->fmt.win.clips[1].c.width = 0x9e3a6fb3; |
| f->fmt.win.clips[1].c.height = 0x05617b76; |
| |
| f->fmt.win.bitmap = (void *) -2UL; |
| #ifdef HAVE_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA |
| f->fmt.win.global_alpha = 0xce; |
| #endif |
| break; |
| case V4L2_BUF_TYPE_VBI_CAPTURE: |
| case V4L2_BUF_TYPE_VBI_OUTPUT: |
| f->fmt.vbi.sampling_rate = 0x3d9b5b79; |
| f->fmt.vbi.offset = 0x055b3a09; |
| f->fmt.vbi.samples_per_line = 0xf176d436; |
| f->fmt.vbi.sample_format = magic; |
| f->fmt.vbi.start[0] = 0x9858e2eb; |
| f->fmt.vbi.start[1] = 0x8a4dc8c1; |
| f->fmt.vbi.count[0] = 0x4bcf36a3; |
| f->fmt.vbi.count[1] = 0x97dff65f; |
| f->fmt.vbi.flags = V4L2_VBI_INTERLACED; |
| break; |
| #if HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE |
| case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: |
| case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: { |
| unsigned int i; |
| |
| f->fmt.sliced.service_set = V4L2_SLICED_VPS; |
| f->fmt.sliced.io_size = 0xd897925a; |
| for (i = 0; |
| i < ARRAY_SIZE(f->fmt.sliced.service_lines[0]); |
| i++) { |
| f->fmt.sliced.service_lines[0][i] = 0xc38e | i; |
| f->fmt.sliced.service_lines[1][i] = 0x3abb | i; |
| } |
| break; |
| } |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT |
| case V4L2_BUF_TYPE_SDR_OUTPUT: |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE |
| case V4L2_BUF_TYPE_SDR_CAPTURE: |
| f->fmt.sdr.pixelformat = magic; |
| #ifdef HAVE_STRUCT_V4L2_SDR_FORMAT_BUFFERSIZE |
| f->fmt.sdr.buffersize = 0x25afabfb; |
| #endif |
| break; |
| #endif |
| } |
| } |
| |
| static void |
| dprint_ioctl_v4l2(struct v4l2_format *const f, |
| const char *request, const unsigned int buf_type, |
| const char *buf_type_string) |
| { |
| switch (buf_type) { |
| case V4L2_BUF_TYPE_VIDEO_CAPTURE: |
| case V4L2_BUF_TYPE_VIDEO_OUTPUT: |
| printf("ioctl(-1, %s, {type=%s" |
| ", fmt.pix={width=%u, height=%u, pixelformat=" |
| "v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')" |
| ", field=V4L2_FIELD_NONE, bytesperline=%u, sizeimage=%u" |
| ", colorspace=V4L2_COLORSPACE_JPEG}}) = -1 EBADF (%m)\n", |
| request, |
| buf_type_string, |
| f->fmt.pix.width, f->fmt.pix.height, |
| cc0(magic), cc1(magic), cc2(magic), cc3(magic), |
| f->fmt.pix.bytesperline, |
| f->fmt.pix.sizeimage); |
| break; |
| #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE |
| case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: |
| case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: { |
| unsigned int i; |
| |
| printf("ioctl(-1, %s" |
| ", {type=%s" |
| ", fmt.pix_mp={width=%u, height=%u, pixelformat=" |
| "v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')" |
| ", field=V4L2_FIELD_NONE, colorspace=" |
| "V4L2_COLORSPACE_JPEG, plane_fmt=[", |
| request, |
| buf_type_string, |
| f->fmt.pix_mp.width, f->fmt.pix_mp.height, |
| cc0(magic), cc1(magic), cc2(magic), cc3(magic)); |
| for (i = 0; |
| i < ARRAY_SIZE(f->fmt.pix_mp.plane_fmt); |
| ++i) { |
| if (i) |
| printf(", "); |
| printf("{sizeimage=%u, bytesperline=%u}", |
| f->fmt.pix_mp.plane_fmt[i].sizeimage, |
| f->fmt.pix_mp.plane_fmt[i].bytesperline); |
| } |
| printf("], num_planes=%u}}) = -1 EBADF (%m)\n", |
| f->fmt.pix_mp.num_planes); |
| break; |
| } |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY |
| case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: |
| #endif |
| case V4L2_BUF_TYPE_VIDEO_OVERLAY: |
| printf("ioctl(-1, %s, {type=%s" |
| ", fmt.win={left=%d, top=%d, width=%u, height=%u" |
| ", field=V4L2_FIELD_ANY, chromakey=%#x, clips=" |
| "[{left=%d, top=%d, width=%u, height=%u}, " |
| "{left=%d, top=%d, width=%u, height=%u}]" |
| ", clipcount=%u, bitmap=%p" |
| #ifdef HAVE_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA |
| ", global_alpha=%#x" |
| #endif |
| "}}) = -1 EBADF (%m)\n", |
| request, |
| buf_type_string, |
| f->fmt.win.w.left, f->fmt.win.w.top, |
| f->fmt.win.w.width, f->fmt.win.w.height, |
| f->fmt.win.chromakey, |
| f->fmt.win.clips[0].c.left, |
| f->fmt.win.clips[0].c.top, |
| f->fmt.win.clips[0].c.width, |
| f->fmt.win.clips[0].c.height, |
| f->fmt.win.clips[1].c.left, |
| f->fmt.win.clips[1].c.top, |
| f->fmt.win.clips[1].c.width, |
| f->fmt.win.clips[1].c.height, |
| f->fmt.win.clipcount, f->fmt.win.bitmap |
| #ifdef HAVE_STRUCT_V4L2_WINDOW_GLOBAL_ALPHA |
| , f->fmt.win.global_alpha |
| #endif |
| ); |
| break; |
| case V4L2_BUF_TYPE_VBI_CAPTURE: |
| case V4L2_BUF_TYPE_VBI_OUTPUT: |
| printf("ioctl(-1, %s, {type=%s" |
| ", fmt.vbi={sampling_rate=%u, offset=%u" |
| ", samples_per_line=%u, sample_format=" |
| "v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')" |
| ", start=[%u, %u], count=[%u, %u]" |
| ", flags=V4L2_VBI_INTERLACED}})" |
| " = -1 EBADF (%m)\n", |
| request, |
| buf_type_string, |
| f->fmt.vbi.sampling_rate, f->fmt.vbi.offset, |
| f->fmt.vbi.samples_per_line, |
| cc0(magic), cc1(magic), cc2(magic), cc3(magic), |
| f->fmt.vbi.start[0], f->fmt.vbi.start[1], |
| f->fmt.vbi.count[0], f->fmt.vbi.count[1]); |
| break; |
| #if HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE |
| case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: |
| case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: { |
| unsigned int i, j; |
| |
| printf("ioctl(-1, %s, {type=%s" |
| ", fmt.sliced={service_set=V4L2_SLICED_VPS" |
| ", io_size=%u, service_lines=[", |
| request, |
| buf_type_string, |
| f->fmt.sliced.io_size); |
| for (i = 0; |
| i < ARRAY_SIZE(f->fmt.sliced.service_lines); |
| i++) { |
| if (i > 0) |
| printf(", "); |
| printf("["); |
| for (j = 0; |
| j < ARRAY_SIZE(f->fmt.sliced.service_lines[0]); |
| j++) { |
| if (j > 0) |
| printf(", "); |
| printf("%#x", |
| f->fmt.sliced.service_lines[i][j]); |
| } |
| printf("]"); |
| } |
| printf("]}}) = -1 EBADF (%m)\n"); |
| break; |
| } |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT |
| case V4L2_BUF_TYPE_SDR_OUTPUT: |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE |
| case V4L2_BUF_TYPE_SDR_CAPTURE: |
| printf("ioctl(-1, %s, {type=%s" |
| ", fmt.sdr={pixelformat=v4l2_fourcc('\\x%x', '\\x%x'," |
| " '\\x%x', '\\x%x')" |
| #ifdef HAVE_STRUCT_V4L2_SDR_FORMAT_BUFFERSIZE |
| ", buffersize=%u" |
| #endif |
| "}}) = -1 EBADF (%m)\n", |
| request, |
| buf_type_string, |
| cc0(magic), cc1(magic), cc2(magic), cc3(magic) |
| #ifdef HAVE_STRUCT_V4L2_SDR_FORMAT_BUFFERSIZE |
| , f->fmt.sdr.buffersize |
| #endif |
| ); |
| break; |
| #endif |
| } |
| } |
| #define print_ioctl_v4l2(v4l2_format, request, buf_type) \ |
| dprint_ioctl_v4l2((v4l2_format), (request), (buf_type), #buf_type) |
| |
| int |
| main(void) |
| { |
| const unsigned int size = get_page_size(); |
| void *const page = tail_alloc(size); |
| fill_memory(page, size); |
| |
| unsigned char cc[sizeof(int)] = { 'A', '\'', '\\', '\xfa' }; |
| |
| /* VIDIOC_QUERYCAP */ |
| ioctl(-1, VIDIOC_QUERYCAP, 0); |
| printf("ioctl(-1, VIDIOC_QUERYCAP, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_QUERYCAP, page); |
| printf("ioctl(-1, VIDIOC_QUERYCAP, %p) = -1 EBADF (%m)\n", page); |
| |
| /* VIDIOC_ENUM_FMT */ |
| ioctl(-1, VIDIOC_ENUM_FMT, 0); |
| printf("ioctl(-1, VIDIOC_ENUM_FMT, NULL) = -1 EBADF (%m)\n"); |
| |
| TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_fmtdesc, p_fmtdesc); |
| p_fmtdesc->index = magic; |
| p_fmtdesc->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; |
| ioctl(-1, VIDIOC_ENUM_FMT, p_fmtdesc); |
| printf("ioctl(-1, VIDIOC_ENUM_FMT, {index=%u" |
| ", type=V4L2_BUF_TYPE_VIDEO_CAPTURE}) = -1 EBADF (%m)\n", |
| p_fmtdesc->index); |
| |
| /* VIDIOC_G_FMT */ |
| ioctl(-1, VIDIOC_G_FMT, 0); |
| printf("ioctl(-1, VIDIOC_G_FMT, NULL) = -1 EBADF (%m)\n"); |
| |
| TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_format, p_format); |
| |
| p_format->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; |
| ioctl(-1, VIDIOC_G_FMT, p_format); |
| printf("ioctl(-1, VIDIOC_G_FMT" |
| ", {type=V4L2_BUF_TYPE_VIDEO_CAPTURE}) = -1 EBADF (%m)\n"); |
| #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE |
| p_format->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; |
| ioctl(-1, VIDIOC_G_FMT, p_format); |
| printf("ioctl(-1, VIDIOC_G_FMT" |
| ", {type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE}) =" |
| " -1 EBADF (%m)\n"); |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY |
| p_format->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY; |
| ioctl(-1, VIDIOC_G_FMT, p_format); |
| printf("ioctl(-1, VIDIOC_G_FMT" |
| ", {type=V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY}) =" |
| " -1 EBADF (%m)\n"); |
| #endif |
| p_format->type = V4L2_BUF_TYPE_VIDEO_OVERLAY; |
| ioctl(-1, VIDIOC_G_FMT, p_format); |
| printf("ioctl(-1, VIDIOC_G_FMT" |
| ", {type=V4L2_BUF_TYPE_VIDEO_OVERLAY}) =" |
| " -1 EBADF (%m)\n"); |
| |
| p_format->type = V4L2_BUF_TYPE_VBI_CAPTURE; |
| ioctl(-1, VIDIOC_G_FMT, p_format); |
| printf("ioctl(-1, VIDIOC_G_FMT" |
| ", {type=V4L2_BUF_TYPE_VBI_CAPTURE}) = -1 EBADF (%m)\n"); |
| #if HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE |
| p_format->type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE; |
| ioctl(-1, VIDIOC_G_FMT, p_format); |
| printf("ioctl(-1, VIDIOC_G_FMT" |
| ", {type=V4L2_BUF_TYPE_SLICED_VBI_CAPTURE}) = -1 EBADF (%m)\n"); |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE |
| p_format->type = V4L2_BUF_TYPE_SDR_CAPTURE; |
| ioctl(-1, VIDIOC_G_FMT, p_format); |
| printf("ioctl(-1, VIDIOC_G_FMT" |
| ", {type=V4L2_BUF_TYPE_SDR_CAPTURE}) = -1 EBADF (%m)\n"); |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT |
| p_format->type = V4L2_BUF_TYPE_SDR_OUTPUT; |
| ioctl(-1, VIDIOC_G_FMT, p_format); |
| printf("ioctl(-1, VIDIOC_G_FMT" |
| ", {type=V4L2_BUF_TYPE_SDR_OUTPUT}) = -1 EBADF (%m)\n"); |
| #endif |
| /* VIDIOC_S_FMT */ |
| ioctl(-1, VIDIOC_S_FMT, 0); |
| printf("ioctl(-1, VIDIOC_S_FMT, NULL) = -1 EBADF (%m)\n"); |
| |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OUTPUT); |
| ioctl(-1, VIDIOC_S_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", V4L2_BUF_TYPE_VIDEO_OUTPUT); |
| #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); |
| ioctl(-1, VIDIOC_S_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", |
| V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY); |
| ioctl(-1, VIDIOC_S_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", |
| V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY); |
| #endif |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OVERLAY); |
| ioctl(-1, VIDIOC_S_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", |
| V4L2_BUF_TYPE_VIDEO_OVERLAY); |
| |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_VBI_CAPTURE); |
| ioctl(-1, VIDIOC_S_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", V4L2_BUF_TYPE_VBI_CAPTURE); |
| #if HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_SLICED_VBI_CAPTURE); |
| ioctl(-1, VIDIOC_S_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", |
| V4L2_BUF_TYPE_SLICED_VBI_CAPTURE); |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_SDR_CAPTURE); |
| ioctl(-1, VIDIOC_S_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", V4L2_BUF_TYPE_SDR_CAPTURE); |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_SDR_OUTPUT); |
| ioctl(-1, VIDIOC_S_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_S_FMT", V4L2_BUF_TYPE_SDR_OUTPUT); |
| #endif |
| /* VIDIOC_TRY_FMT */ |
| ioctl(-1, VIDIOC_TRY_FMT, 0); |
| printf("ioctl(-1, VIDIOC_TRY_FMT, NULL) = -1 EBADF (%m)\n"); |
| |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OUTPUT); |
| ioctl(-1, VIDIOC_TRY_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", |
| V4L2_BUF_TYPE_VIDEO_OUTPUT); |
| #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); |
| ioctl(-1, VIDIOC_TRY_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", |
| V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY); |
| ioctl(-1, VIDIOC_TRY_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", |
| V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY); |
| #endif |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_VIDEO_OVERLAY); |
| ioctl(-1, VIDIOC_TRY_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", |
| V4L2_BUF_TYPE_VIDEO_OVERLAY); |
| |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_VBI_CAPTURE); |
| ioctl(-1, VIDIOC_TRY_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", V4L2_BUF_TYPE_VBI_CAPTURE); |
| #if HAVE_DECL_V4L2_BUF_TYPE_SLICED_VBI_CAPTURE |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_SLICED_VBI_CAPTURE); |
| ioctl(-1, VIDIOC_TRY_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", |
| V4L2_BUF_TYPE_SLICED_VBI_CAPTURE); |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_SDR_CAPTURE); |
| ioctl(-1, VIDIOC_TRY_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", V4L2_BUF_TYPE_SDR_CAPTURE); |
| #endif |
| #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT |
| init_v4l2_format(p_format, V4L2_BUF_TYPE_SDR_OUTPUT); |
| ioctl(-1, VIDIOC_TRY_FMT, p_format); |
| print_ioctl_v4l2(p_format, "VIDIOC_TRY_FMT", V4L2_BUF_TYPE_SDR_OUTPUT); |
| #endif |
| struct v4l2_format *const p_v4l2_format = |
| page + size - sizeof(*p_v4l2_format); |
| ioctl(-1, VIDIOC_TRY_FMT, p_v4l2_format); |
| printf("ioctl(-1, VIDIOC_TRY_FMT, {type=%#x /* V4L2_BUF_TYPE_??? */})" |
| " = -1 EBADF (%m)\n", p_v4l2_format->type); |
| |
| /* VIDIOC_REQBUFS */ |
| ioctl(-1, VIDIOC_REQBUFS, 0); |
| printf("ioctl(-1, VIDIOC_REQBUFS, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_requestbuffers *const p_v4l2_requestbuffers = |
| page + size - sizeof(*p_v4l2_requestbuffers); |
| ioctl(-1, VIDIOC_REQBUFS, p_v4l2_requestbuffers); |
| printf("ioctl(-1, VIDIOC_REQBUFS, {count=%u, type=%#x" |
| " /* V4L2_BUF_TYPE_??? */, memory=%#x /* V4L2_MEMORY_??? */})" |
| " = -1 EBADF (%m)\n", |
| p_v4l2_requestbuffers->count, |
| p_v4l2_requestbuffers->type, |
| p_v4l2_requestbuffers->memory); |
| |
| /* VIDIOC_QUERYBUF */ |
| ioctl(-1, VIDIOC_QUERYBUF, 0); |
| printf("ioctl(-1, VIDIOC_QUERYBUF, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_buffer *const p_v4l2_buffer = |
| page + size - sizeof(*p_v4l2_buffer); |
| ioctl(-1, VIDIOC_QUERYBUF, p_v4l2_buffer); |
| printf("ioctl(-1, VIDIOC_QUERYBUF, {type=%#x /* V4L2_BUF_TYPE_??? */" |
| ", index=%u}) = -1 EBADF (%m)\n", |
| p_v4l2_buffer->type, p_v4l2_buffer->index); |
| |
| /* VIDIOC_QBUF */ |
| ioctl(-1, VIDIOC_QBUF, 0); |
| printf("ioctl(-1, VIDIOC_QBUF, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_QBUF, p_v4l2_buffer); |
| printf("ioctl(-1, VIDIOC_QBUF, {type=%#x /* V4L2_BUF_TYPE_??? */" |
| ", index=%u}) = -1 EBADF (%m)\n", |
| p_v4l2_buffer->type, p_v4l2_buffer->index); |
| |
| /* VIDIOC_DQBUF */ |
| ioctl(-1, VIDIOC_DQBUF, 0); |
| printf("ioctl(-1, VIDIOC_DQBUF, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_DQBUF, p_v4l2_buffer); |
| printf("ioctl(-1, VIDIOC_DQBUF, {type=%#x" |
| " /* V4L2_BUF_TYPE_??? */}) = -1 EBADF (%m)\n", |
| p_v4l2_buffer->type); |
| |
| /* VIDIOC_G_FBUF */ |
| ioctl(-1, VIDIOC_G_FBUF, 0); |
| printf("ioctl(-1, VIDIOC_G_FBUF, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_G_FBUF, page); |
| printf("ioctl(-1, VIDIOC_G_FBUF, %p) = -1 EBADF (%m)\n", page); |
| |
| /* VIDIOC_S_FBUF */ |
| ioctl(-1, VIDIOC_S_FBUF, 0); |
| printf("ioctl(-1, VIDIOC_S_FBUF, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_framebuffer *const p_v4l2_framebuffer = |
| page + size - sizeof(*p_v4l2_framebuffer); |
| ioctl(-1, VIDIOC_S_FBUF, p_v4l2_framebuffer); |
| printf("ioctl(-1, VIDIOC_S_FBUF, {capability=%#x" |
| ", flags=%#x, base=%p}) = -1 EBADF (%m)\n", |
| p_v4l2_framebuffer->capability, |
| p_v4l2_framebuffer->flags, |
| p_v4l2_framebuffer->base); |
| |
| /* VIDIOC_STREAMON */ |
| ioctl(-1, VIDIOC_STREAMON, 0); |
| printf("ioctl(-1, VIDIOC_STREAMON, NULL) = -1 EBADF (%m)\n"); |
| |
| int *const p_int = page + size - sizeof(int); |
| ioctl(-1, VIDIOC_STREAMON, p_int); |
| printf("ioctl(-1, VIDIOC_STREAMON, [%#x /* V4L2_BUF_TYPE_??? */])" |
| " = -1 EBADF (%m)\n", *p_int); |
| |
| /* VIDIOC_STREAMOFF */ |
| ioctl(-1, VIDIOC_STREAMOFF, 0); |
| printf("ioctl(-1, VIDIOC_STREAMOFF, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_STREAMOFF, p_int); |
| printf("ioctl(-1, VIDIOC_STREAMOFF, [%#x /* V4L2_BUF_TYPE_??? */])" |
| " = -1 EBADF (%m)\n", *p_int); |
| |
| /* VIDIOC_G_PARM */ |
| ioctl(-1, VIDIOC_G_PARM, 0); |
| printf("ioctl(-1, VIDIOC_G_PARM, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_streamparm *const p_v4l2_streamparm = |
| page + size - sizeof(*p_v4l2_streamparm); |
| ioctl(-1, VIDIOC_G_PARM, p_v4l2_streamparm); |
| printf("ioctl(-1, VIDIOC_G_PARM, {type=%#x /* V4L2_BUF_TYPE_??? */})" |
| " = -1 EBADF (%m)\n", p_v4l2_streamparm->type); |
| |
| /* VIDIOC_S_PARM */ |
| ioctl(-1, VIDIOC_S_PARM, 0); |
| printf("ioctl(-1, VIDIOC_S_PARM, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_S_PARM, p_v4l2_streamparm); |
| printf("ioctl(-1, VIDIOC_S_PARM, {type=%#x /* V4L2_BUF_TYPE_??? */})" |
| " = -1 EBADF (%m)\n", p_v4l2_streamparm->type); |
| |
| TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_streamparm, p_streamparm); |
| p_streamparm->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; |
| p_streamparm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; |
| p_streamparm->parm.capture.capturemode = V4L2_MODE_HIGHQUALITY; |
| p_streamparm->parm.capture.timeperframe.numerator = 0xdeadbeef; |
| p_streamparm->parm.capture.timeperframe.denominator = 0xbadc0ded; |
| ioctl(-1, VIDIOC_S_PARM, p_streamparm); |
| printf("ioctl(-1, VIDIOC_S_PARM, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE" |
| ", parm.capture={capability=V4L2_CAP_TIMEPERFRAME" |
| ", capturemode=V4L2_MODE_HIGHQUALITY, timeperframe=%u/%u" |
| ", extendedmode=%u, readbuffers=%u}}) = -1 EBADF (%m)\n", |
| p_streamparm->parm.capture.timeperframe.numerator, |
| p_streamparm->parm.capture.timeperframe.denominator, -1U, -1U); |
| |
| p_streamparm->type = V4L2_BUF_TYPE_VIDEO_OUTPUT; |
| p_streamparm->parm.output.outputmode = 0; |
| ioctl(-1, VIDIOC_S_PARM, p_streamparm); |
| printf("ioctl(-1, VIDIOC_S_PARM, {type=V4L2_BUF_TYPE_VIDEO_OUTPUT" |
| ", parm.output={capability=V4L2_CAP_TIMEPERFRAME" |
| ", outputmode=0, timeperframe=%u/%u" |
| ", extendedmode=%u, writebuffers=%u}}) = -1 EBADF (%m)\n", |
| p_streamparm->parm.output.timeperframe.numerator, |
| p_streamparm->parm.output.timeperframe.denominator, -1U, -1U); |
| |
| /* VIDIOC_G_STD */ |
| ioctl(-1, VIDIOC_G_STD, 0); |
| printf("ioctl(-1, VIDIOC_G_STD, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_G_STD, page); |
| printf("ioctl(-1, VIDIOC_G_STD, %p) = -1 EBADF (%m)\n", page); |
| |
| /* VIDIOC_S_STD */ |
| ioctl(-1, VIDIOC_S_STD, 0); |
| printf("ioctl(-1, VIDIOC_S_STD, NULL) = -1 EBADF (%m)\n"); |
| |
| long long *const p_longlong = page + size - sizeof(*p_longlong); |
| ioctl(-1, VIDIOC_S_STD, p_longlong); |
| printf("ioctl(-1, VIDIOC_S_STD, [%#llx]) = -1 EBADF (%m)\n", |
| *p_longlong); |
| |
| /* VIDIOC_ENUMSTD */ |
| ioctl(-1, VIDIOC_ENUMSTD, 0); |
| printf("ioctl(-1, VIDIOC_ENUMSTD, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_standard *const p_v4l2_standard = |
| page + size - sizeof(*p_v4l2_standard); |
| ioctl(-1, VIDIOC_ENUMSTD, p_v4l2_standard); |
| printf("ioctl(-1, VIDIOC_ENUMSTD, {index=%u}) = -1 EBADF (%m)\n", |
| p_v4l2_standard->index); |
| |
| /* VIDIOC_ENUMINPUT */ |
| ioctl(-1, VIDIOC_ENUMINPUT, 0); |
| printf("ioctl(-1, VIDIOC_ENUMINPUT, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_input *const p_v4l2_input = |
| page + size - sizeof(*p_v4l2_input); |
| ioctl(-1, VIDIOC_ENUMINPUT, p_v4l2_input); |
| printf("ioctl(-1, VIDIOC_ENUMINPUT, {index=%u}) = -1 EBADF (%m)\n", |
| p_v4l2_input->index); |
| |
| /* VIDIOC_G_CTRL */ |
| ioctl(-1, VIDIOC_G_CTRL, 0); |
| printf("ioctl(-1, VIDIOC_G_CTRL, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_control *const p_v4l2_control = |
| page + size - sizeof(*p_v4l2_control); |
| ioctl(-1, VIDIOC_G_CTRL, p_v4l2_control); |
| printf("ioctl(-1, VIDIOC_G_CTRL, {id=%#x /* V4L2_CID_??? */})" |
| " = -1 EBADF (%m)\n", p_v4l2_control->id); |
| |
| /* VIDIOC_S_CTRL */ |
| ioctl(-1, VIDIOC_S_CTRL, 0); |
| printf("ioctl(-1, VIDIOC_S_CTRL, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_S_CTRL, p_v4l2_control); |
| printf("ioctl(-1, VIDIOC_S_CTRL, {id=%#x /* V4L2_CID_??? */" |
| ", value=%d}) = -1 EBADF (%m)\n", |
| p_v4l2_control->id, p_v4l2_control->value); |
| |
| /* VIDIOC_G_TUNER */ |
| ioctl(-1, VIDIOC_G_TUNER, 0); |
| printf("ioctl(-1, VIDIOC_G_TUNER, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_tuner *const p_v4l2_tuner = |
| page + size - sizeof(*p_v4l2_tuner); |
| ioctl(-1, VIDIOC_G_TUNER, p_v4l2_tuner); |
| printf("ioctl(-1, VIDIOC_G_TUNER, {index=%u})" |
| " = -1 EBADF (%m)\n", p_v4l2_tuner->index); |
| |
| /* VIDIOC_S_TUNER */ |
| ioctl(-1, VIDIOC_S_TUNER, 0); |
| printf("ioctl(-1, VIDIOC_S_TUNER, NULL) = -1 EBADF (%m)\n"); |
| |
| TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_tuner, p_tuner); |
| p_tuner->index = 0x4fb6df39; |
| strcpy((char *) p_tuner->name, "cum tacent clamant"); |
| p_tuner->type = V4L2_TUNER_RADIO; |
| p_tuner->capability = V4L2_TUNER_CAP_LOW; |
| p_tuner->rangelow = 0xa673bc29; |
| p_tuner->rangehigh = 0xbaf16d12; |
| p_tuner->rxsubchans = V4L2_TUNER_SUB_MONO; |
| p_tuner->audmode = V4L2_TUNER_MODE_MONO; |
| p_tuner->signal = 0x10bf92c8; |
| p_tuner->afc = 0x3bf7e18b; |
| ioctl(-1, VIDIOC_S_TUNER, p_tuner); |
| printf("ioctl(-1, VIDIOC_S_TUNER, {index=%u" |
| ", name=\"cum tacent clamant\"" |
| ", type=V4L2_TUNER_RADIO, capability=V4L2_TUNER_CAP_LOW" |
| ", rangelow=%u, rangehigh=%u" |
| ", rxsubchans=V4L2_TUNER_SUB_MONO" |
| ", audmode=V4L2_TUNER_MODE_MONO, signal=%d, afc=%d" |
| "}) = -1 EBADF (%m)\n", |
| p_tuner->index, p_tuner->rangelow, |
| p_tuner->rangehigh, p_tuner->signal, p_tuner->afc); |
| |
| /* VIDIOC_QUERYCTRL */ |
| ioctl(-1, VIDIOC_QUERYCTRL, 0); |
| printf("ioctl(-1, VIDIOC_QUERYCTRL, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_queryctrl *const p_v4l2_queryctrl = |
| page + size - sizeof(*p_v4l2_queryctrl); |
| ioctl(-1, VIDIOC_QUERYCTRL, p_v4l2_queryctrl); |
| # ifdef V4L2_CTRL_FLAG_NEXT_CTRL |
| printf("ioctl(-1, VIDIOC_QUERYCTRL, {id=V4L2_CTRL_FLAG_NEXT_CTRL" |
| "|%#x /* V4L2_CID_??? */}) = -1 EBADF (%m)\n", |
| p_v4l2_queryctrl->id & ~V4L2_CTRL_FLAG_NEXT_CTRL); |
| # else |
| printf("ioctl(-1, VIDIOC_QUERYCTRL, {id=%#x /* V4L2_CID_??? */})" |
| " = -1 EBADF (%m)\n", p_v4l2_queryctrl->id); |
| # endif |
| |
| TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_queryctrl, p_queryctrl); |
| p_queryctrl->id = V4L2_CID_SATURATION; |
| ioctl(-1, VIDIOC_QUERYCTRL, p_queryctrl); |
| printf("ioctl(-1, VIDIOC_QUERYCTRL, {id=V4L2_CID_SATURATION})" |
| " = -1 EBADF (%m)\n"); |
| |
| /* VIDIOC_G_INPUT */ |
| ioctl(-1, VIDIOC_G_INPUT, 0); |
| printf("ioctl(-1, VIDIOC_G_INPUT, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_G_INPUT, page); |
| printf("ioctl(-1, VIDIOC_G_INPUT, %p) = -1 EBADF (%m)\n", page); |
| |
| /* VIDIOC_S_INPUT */ |
| ioctl(-1, VIDIOC_S_INPUT, 0); |
| printf("ioctl(-1, VIDIOC_S_INPUT, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_S_INPUT, p_int); |
| printf("ioctl(-1, VIDIOC_S_INPUT, [%u]) = -1 EBADF (%m)\n", *p_int); |
| |
| /* VIDIOC_CROPCAP */ |
| ioctl(-1, VIDIOC_CROPCAP, 0); |
| printf("ioctl(-1, VIDIOC_CROPCAP, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_cropcap *const p_v4l2_cropcap = |
| page + size - sizeof(*p_v4l2_cropcap); |
| ioctl(-1, VIDIOC_CROPCAP, p_v4l2_cropcap); |
| printf("ioctl(-1, VIDIOC_CROPCAP, {type=%#x /* V4L2_BUF_TYPE_??? */})" |
| " = -1 EBADF (%m)\n", p_v4l2_cropcap->type); |
| |
| /* VIDIOC_G_CROP */ |
| ioctl(-1, VIDIOC_G_CROP, 0); |
| printf("ioctl(-1, VIDIOC_G_CROP, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_crop *const p_v4l2_crop = |
| page + size - sizeof(*p_v4l2_crop); |
| ioctl(-1, VIDIOC_G_CROP, p_v4l2_crop); |
| printf("ioctl(-1, VIDIOC_G_CROP, {type=%#x /* V4L2_BUF_TYPE_??? */})" |
| " = -1 EBADF (%m)\n", p_v4l2_crop->type); |
| |
| /* VIDIOC_S_CROP */ |
| ioctl(-1, VIDIOC_S_CROP, 0); |
| printf("ioctl(-1, VIDIOC_S_CROP, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_S_CROP, p_v4l2_crop); |
| printf("ioctl(-1, VIDIOC_S_CROP, {type=%#x /* V4L2_BUF_TYPE_??? */" |
| ", c={left=%d, top=%d, width=%u, height=%u}}) = -1 EBADF (%m)\n", |
| p_v4l2_crop->type, |
| p_v4l2_crop->c.left, |
| p_v4l2_crop->c.top, |
| p_v4l2_crop->c.width, |
| p_v4l2_crop->c.height); |
| |
| #ifdef VIDIOC_S_EXT_CTRLS |
| /* VIDIOC_S_EXT_CTRLS */ |
| ioctl(-1, VIDIOC_S_EXT_CTRLS, 0); |
| printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, NULL) = -1 EBADF (%m)\n"); |
| |
| TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_ext_controls, p_ext_controls); |
| p_ext_controls->ctrl_class = V4L2_CTRL_CLASS_USER; |
| p_ext_controls->count = 0; |
| p_ext_controls->controls = (void *) -2UL; |
| ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls); |
| printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, {ctrl_class=V4L2_CTRL_CLASS_USER" |
| ", count=%u}) = -1 EBADF (%m)\n", p_ext_controls->count); |
| |
| p_ext_controls->ctrl_class = V4L2_CTRL_CLASS_MPEG; |
| p_ext_controls->count = magic; |
| ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls); |
| printf("ioctl(-1, VIDIOC_S_EXT_CTRLS, {ctrl_class=V4L2_CTRL_CLASS_MPEG" |
| ", count=%u, controls=%p}) = -1 EBADF (%m)\n", |
| p_ext_controls->count, p_ext_controls->controls); |
| |
| # if HAVE_DECL_V4L2_CTRL_TYPE_STRING |
| p_ext_controls->count = 2; |
| p_ext_controls->controls = |
| tail_alloc(sizeof(*p_ext_controls->controls) * p_ext_controls->count); |
| p_ext_controls->controls[0].id = V4L2_CID_BRIGHTNESS; |
| p_ext_controls->controls[0].size = 0; |
| p_ext_controls->controls[0].value64 = 0xfacefeeddeadbeefULL; |
| p_ext_controls->controls[1].id = V4L2_CID_CONTRAST; |
| p_ext_controls->controls[1].size = 2; |
| p_ext_controls->controls[1].string = |
| tail_alloc(p_ext_controls->controls[1].size); |
| |
| ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls); |
| printf("ioctl(-1, VIDIOC_S_EXT_CTRLS" |
| ", {ctrl_class=V4L2_CTRL_CLASS_MPEG, count=%u, controls=" |
| "[{id=V4L2_CID_BRIGHTNESS, size=0, value=%d, value64=%lld}" |
| ", {id=V4L2_CID_CONTRAST, size=2, string=\"\\377\\377\"}" |
| "] => controls=" |
| "[{id=V4L2_CID_BRIGHTNESS, size=0, value=%d, value64=%lld}" |
| ", {id=V4L2_CID_CONTRAST, size=2, string=\"\\377\\377\"}" |
| "], error_idx=%u}) = -1 EBADF (%m)\n", |
| p_ext_controls->count, |
| p_ext_controls->controls[0].value, |
| (long long) p_ext_controls->controls[0].value64, |
| p_ext_controls->controls[0].value, |
| (long long) p_ext_controls->controls[0].value64, |
| p_ext_controls->error_idx); |
| |
| ++p_ext_controls->count; |
| ioctl(-1, VIDIOC_S_EXT_CTRLS, p_ext_controls); |
| printf("ioctl(-1, VIDIOC_S_EXT_CTRLS" |
| ", {ctrl_class=V4L2_CTRL_CLASS_MPEG, count=%u, controls=" |
| "[{id=V4L2_CID_BRIGHTNESS, size=0, value=%d, value64=%lld}" |
| ", {id=V4L2_CID_CONTRAST, size=2, string=\"\\377\\377\"}" |
| ", %p]}) = -1 EBADF (%m)\n", |
| p_ext_controls->count, |
| p_ext_controls->controls[0].value, |
| (long long) p_ext_controls->controls[0].value64, |
| p_ext_controls->controls + 2); |
| # endif /* HAVE_DECL_V4L2_CTRL_TYPE_STRING */ |
| |
| /* VIDIOC_TRY_EXT_CTRLS */ |
| ioctl(-1, VIDIOC_TRY_EXT_CTRLS, 0); |
| printf("ioctl(-1, VIDIOC_TRY_EXT_CTRLS, NULL) = -1 EBADF (%m)\n"); |
| |
| p_ext_controls->ctrl_class = V4L2_CTRL_CLASS_USER; |
| p_ext_controls->count = magic; |
| p_ext_controls->controls = (void *) -2UL; |
| ioctl(-1, VIDIOC_TRY_EXT_CTRLS, p_ext_controls); |
| printf("ioctl(-1, VIDIOC_TRY_EXT_CTRLS" |
| ", {ctrl_class=V4L2_CTRL_CLASS_USER, count=%u, controls=%p})" |
| " = -1 EBADF (%m)\n", |
| p_ext_controls->count, p_ext_controls->controls); |
| |
| /* VIDIOC_G_EXT_CTRLS */ |
| ioctl(-1, VIDIOC_G_EXT_CTRLS, 0); |
| printf("ioctl(-1, VIDIOC_G_EXT_CTRLS, NULL) = -1 EBADF (%m)\n"); |
| |
| ioctl(-1, VIDIOC_G_EXT_CTRLS, p_ext_controls); |
| printf("ioctl(-1, VIDIOC_G_EXT_CTRLS" |
| ", {ctrl_class=V4L2_CTRL_CLASS_USER, count=%u, controls=%p" |
| ", error_idx=%u}) = -1 EBADF (%m)\n", |
| p_ext_controls->count, p_ext_controls->controls, |
| p_ext_controls->error_idx); |
| #endif /* VIDIOC_S_EXT_CTRLS */ |
| |
| #ifdef VIDIOC_ENUM_FRAMESIZES |
| ioctl(-1, VIDIOC_ENUM_FRAMESIZES, 0); |
| printf("ioctl(-1, VIDIOC_ENUM_FRAMESIZES, NULL) = -1 EBADF (%m)\n"); |
| |
| TAIL_ALLOC_OBJECT_CONST_PTR(struct v4l2_frmsizeenum, p_frmsizeenum); |
| p_frmsizeenum->index = magic; |
| p_frmsizeenum->pixel_format = fourcc(cc[0], cc[1], cc[2], cc[3]); |
| |
| ioctl(-1, VIDIOC_ENUM_FRAMESIZES, p_frmsizeenum); |
| printf("ioctl(-1, VIDIOC_ENUM_FRAMESIZES, {index=%u" |
| ", pixel_format=v4l2_fourcc('%c', '\\%c', '\\%c', '\\x%x')})" |
| " = -1 EBADF (%m)\n", p_frmsizeenum->index, |
| cc[0], cc[1], cc[2], cc[3]); |
| #endif /* VIDIOC_ENUM_FRAMESIZES */ |
| |
| #ifdef VIDIOC_ENUM_FRAMEINTERVALS |
| ioctl(-1, VIDIOC_ENUM_FRAMEINTERVALS, 0); |
| printf("ioctl(-1, VIDIOC_ENUM_FRAMEINTERVALS, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_frmivalenum *const p_v4l2_frmivalenum = |
| page + size - sizeof(*p_v4l2_frmivalenum); |
| ioctl(-1, VIDIOC_ENUM_FRAMEINTERVALS, p_v4l2_frmivalenum); |
| printf("ioctl(-1, VIDIOC_ENUM_FRAMEINTERVALS, {index=%u" |
| ", pixel_format=v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')" |
| ", width=%u, height=%u}) = -1 EBADF (%m)\n", |
| p_v4l2_frmivalenum->index, |
| cc0(p_v4l2_frmivalenum->pixel_format), |
| cc1(p_v4l2_frmivalenum->pixel_format), |
| cc2(p_v4l2_frmivalenum->pixel_format), |
| cc3(p_v4l2_frmivalenum->pixel_format), |
| p_v4l2_frmivalenum->width, |
| p_v4l2_frmivalenum->height); |
| #endif /* VIDIOC_ENUM_FRAMEINTERVALS */ |
| |
| #ifdef VIDIOC_CREATE_BUFS |
| ioctl(-1, VIDIOC_CREATE_BUFS, 0); |
| printf("ioctl(-1, VIDIOC_CREATE_BUFS, NULL) = -1 EBADF (%m)\n"); |
| |
| struct v4l2_create_buffers *const p_v4l2_create_buffers = |
| page + size - sizeof(*p_v4l2_create_buffers); |
| ioctl(-1, VIDIOC_CREATE_BUFS, p_v4l2_create_buffers); |
| printf("ioctl(-1, VIDIOC_CREATE_BUFS, {count=%u, memory=%#x" |
| " /* V4L2_MEMORY_??? */, format={type=%#x" |
| " /* V4L2_BUF_TYPE_??? */}}) = -1 EBADF (%m)\n", |
| p_v4l2_create_buffers->count, |
| p_v4l2_create_buffers->memory, |
| p_v4l2_create_buffers->format.type); |
| #endif /* VIDIOC_CREATE_BUFS */ |
| |
| puts("+++ exited with 0 +++"); |
| return 0; |
| } |