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