1+ #include <stdio.h>
2+ #include <stddef.h>
3+ #include <linux/videodev2.h>
4+
5+ #define printconst1 (con ) printf("\t%s = 0x%08lx\n", #con, con)
6+ #define printconst2 (con ) printf("\t%s = %d\n", #con, con)
7+ #define printstruct (str ) printf("type %s struct { // size %lu\n", #str, sizeof(struct str))
8+ #define printmember (str , mem , typ ) printf("\t%s %s // offset %lu, size %lu\n", #mem == "type" ? "typ" : #mem, typ, offsetof(struct str, mem), sizeof((struct str){0}.mem))
9+ #define printunimem (str , uni , mem , typ ) printf("\t%s %s // offset %lu, size %lu\n", #mem, typ, offsetof(struct str, uni.mem), sizeof((struct str){0}.uni.mem))
10+ #define printalign1 (str , mem2 , mem1 , siz1 ) printf("\t_ [%lu]byte // align\n", offsetof(struct str, mem2) - offsetof(struct str, mem1) - siz1)
11+ #define printfiller (str , mem1 , siz1 ) printf("\t_ [%lu]byte // filler\n", sizeof(struct str) - offsetof(struct str, mem1) - siz1)
12+
13+ int main () {
14+ printf ("const (\n" );
15+ printconst1 (VIDIOC_QUERYCAP );
16+ printconst1 (VIDIOC_ENUM_FMT );
17+ printconst1 (VIDIOC_G_FMT );
18+ printconst1 (VIDIOC_S_FMT );
19+ printconst1 (VIDIOC_REQBUFS );
20+ printconst1 (VIDIOC_QUERYBUF );
21+ printf ("\n" );
22+ printconst1 (VIDIOC_QBUF );
23+ printconst1 (VIDIOC_DQBUF );
24+ printconst1 (VIDIOC_STREAMON );
25+ printconst1 (VIDIOC_STREAMOFF );
26+ printconst1 (VIDIOC_G_PARM );
27+ printconst1 (VIDIOC_S_PARM );
28+ printf ("\n" );
29+ printconst1 (VIDIOC_ENUM_FRAMESIZES );
30+ printconst1 (VIDIOC_ENUM_FRAMEINTERVALS );
31+ printf (")\n\n" );
32+
33+ printf ("const (\n" );
34+ printconst2 (V4L2_BUF_TYPE_VIDEO_CAPTURE );
35+ printconst2 (V4L2_COLORSPACE_DEFAULT );
36+ printconst2 (V4L2_FIELD_NONE );
37+ printconst2 (V4L2_FRMIVAL_TYPE_DISCRETE );
38+ printconst2 (V4L2_FRMSIZE_TYPE_DISCRETE );
39+ printconst2 (V4L2_MEMORY_MMAP );
40+ printf (")\n\n" );
41+
42+ printstruct (v4l2_capability );
43+ printmember (v4l2_capability , driver , "[16]byte" );
44+ printmember (v4l2_capability , card , "[32]byte" );
45+ printmember (v4l2_capability , bus_info , "[32]byte" );
46+ printmember (v4l2_capability , version , "uint32" );
47+ printmember (v4l2_capability , capabilities , "uint32" );
48+ printmember (v4l2_capability , device_caps , "uint32" );
49+ printmember (v4l2_capability , reserved , "[3]uint32" );
50+ printf ("}\n\n" );
51+
52+ printstruct (v4l2_format );
53+ printmember (v4l2_format , type , "uint32" );
54+ printalign1 (v4l2_format , fmt , type , 4 );
55+ printunimem (v4l2_format , fmt , pix , "v4l2_pix_format" );
56+ printfiller (v4l2_format , fmt , sizeof (struct v4l2_pix_format ));
57+ printf ("}\n\n" );
58+
59+ printstruct (v4l2_pix_format );
60+ printmember (v4l2_pix_format , width , "uint32" );
61+ printmember (v4l2_pix_format , height , "uint32" );
62+ printmember (v4l2_pix_format , pixelformat , "uint32" );
63+ printmember (v4l2_pix_format , field , "uint32" );
64+ printmember (v4l2_pix_format , bytesperline , "uint32" );
65+ printmember (v4l2_pix_format , sizeimage , "uint32" );
66+ printmember (v4l2_pix_format , colorspace , "uint32" );
67+ printmember (v4l2_pix_format , priv , "uint32" );
68+ printmember (v4l2_pix_format , flags , "uint32" );
69+ printmember (v4l2_pix_format , ycbcr_enc , "uint32" );
70+ printmember (v4l2_pix_format , quantization , "uint32" );
71+ printmember (v4l2_pix_format , xfer_func , "uint32" );
72+ printf ("}\n\n" );
73+
74+ printstruct (v4l2_streamparm );
75+ printmember (v4l2_streamparm , type , "uint32" );
76+ printunimem (v4l2_streamparm , parm , capture , "v4l2_captureparm" );
77+ printfiller (v4l2_streamparm , parm , sizeof (struct v4l2_captureparm ));
78+ printf ("}\n\n" );
79+
80+ printstruct (v4l2_captureparm );
81+ printmember (v4l2_captureparm , capability , "uint32" );
82+ printmember (v4l2_captureparm , capturemode , "uint32" );
83+ printmember (v4l2_captureparm , timeperframe , "v4l2_fract" );
84+ printmember (v4l2_captureparm , extendedmode , "uint32" );
85+ printmember (v4l2_captureparm , readbuffers , "uint32" );
86+ printmember (v4l2_captureparm , reserved , "[4]uint32" );
87+ printf ("}\n\n" );
88+
89+ printstruct (v4l2_fract );
90+ printmember (v4l2_fract , numerator , "uint32" );
91+ printmember (v4l2_fract , denominator , "uint32" );
92+ printf ("}\n\n" );
93+
94+ printstruct (v4l2_requestbuffers );
95+ printmember (v4l2_requestbuffers , count , "uint32" );
96+ printmember (v4l2_requestbuffers , type , "uint32" );
97+ printmember (v4l2_requestbuffers , memory , "uint32" );
98+ printmember (v4l2_requestbuffers , capabilities , "uint32" );
99+ printmember (v4l2_requestbuffers , flags , "uint8" );
100+ printmember (v4l2_requestbuffers , reserved , "[3]uint8" );
101+ printf ("}\n\n" );
102+
103+ printstruct (v4l2_buffer );
104+ printmember (v4l2_buffer , index , "uint32" );
105+ printmember (v4l2_buffer , type , "uint32" );
106+ printmember (v4l2_buffer , bytesused , "uint32" );
107+ printmember (v4l2_buffer , flags , "uint32" );
108+ printmember (v4l2_buffer , field , "uint32" );
109+ printalign1 (v4l2_buffer , timecode , field , 4 );
110+ printmember (v4l2_buffer , timecode , "v4l2_timecode" );
111+ printmember (v4l2_buffer , sequence , "uint32" );
112+ printmember (v4l2_buffer , memory , "uint32" );
113+ printunimem (v4l2_buffer , m , offset , "uint32" );
114+ printalign1 (v4l2_buffer , length , m , 4 );
115+ printmember (v4l2_buffer , length , "uint32" );
116+ printfiller (v4l2_buffer , length , 4 );
117+ printf ("}\n\n" );
118+
119+ printstruct (v4l2_timecode );
120+ printmember (v4l2_timecode , type , "uint32" );
121+ printmember (v4l2_timecode , flags , "uint32" );
122+ printmember (v4l2_timecode , frames , "uint8" );
123+ printmember (v4l2_timecode , seconds , "uint8" );
124+ printmember (v4l2_timecode , minutes , "uint8" );
125+ printmember (v4l2_timecode , hours , "uint8" );
126+ printmember (v4l2_timecode , userbits , "[4]uint8" );
127+ printf ("}\n\n" );
128+
129+ printstruct (v4l2_fmtdesc );
130+ printmember (v4l2_fmtdesc , index , "uint32" );
131+ printmember (v4l2_fmtdesc , type , "uint32" );
132+ printmember (v4l2_fmtdesc , flags , "uint32" );
133+ printmember (v4l2_fmtdesc , description , "[32]byte" );
134+ printmember (v4l2_fmtdesc , pixelformat , "uint32" );
135+ printmember (v4l2_fmtdesc , mbus_code , "uint32" );
136+ printmember (v4l2_fmtdesc , reserved , "[3]uint32" );
137+ printf ("}\n\n" );
138+
139+ printstruct (v4l2_frmsizeenum );
140+ printmember (v4l2_frmsizeenum , index , "uint32" );
141+ printmember (v4l2_frmsizeenum , pixel_format , "uint32" );
142+ printmember (v4l2_frmsizeenum , type , "uint32" );
143+ printmember (v4l2_frmsizeenum , discrete , "v4l2_frmsize_discrete" );
144+ printfiller (v4l2_frmsizeenum , discrete , sizeof (struct v4l2_frmsize_discrete ));
145+ printf ("}\n\n" );
146+
147+ printstruct (v4l2_frmsize_discrete );
148+ printmember (v4l2_frmsize_discrete , width , "uint32" );
149+ printmember (v4l2_frmsize_discrete , height , "uint32" );
150+ printf ("}\n\n" );
151+
152+ printstruct (v4l2_frmivalenum );
153+ printmember (v4l2_frmivalenum , index , "uint32" );
154+ printmember (v4l2_frmivalenum , pixel_format , "uint32" );
155+ printmember (v4l2_frmivalenum , width , "uint32" );
156+ printmember (v4l2_frmivalenum , height , "uint32" );
157+ printmember (v4l2_frmivalenum , type , "uint32" );
158+ printmember (v4l2_frmivalenum , discrete , "v4l2_fract" );
159+ printfiller (v4l2_frmivalenum , discrete , sizeof (struct v4l2_fract ));
160+ printf ("}\n\n" );
161+
162+ return 0 ;
163+ }
0 commit comments