Commit | Line | Data |
---|---|---|
6f52b16c | 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
de05f634 LP |
2 | /* |
3 | * USB Video Class definitions. | |
4 | * | |
5 | * Copyright (C) 2009 Laurent Pinchart <laurent.pinchart@skynet.be> | |
6 | * | |
7 | * This file holds USB constants and structures defined by the USB Device | |
8 | * Class Definition for Video Devices. Unless otherwise stated, comments | |
9 | * below reference relevant sections of the USB Video Class 1.1 specification | |
10 | * available at | |
11 | * | |
12 | * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip | |
13 | */ | |
14 | ||
15 | #ifndef __LINUX_USB_VIDEO_H | |
16 | #define __LINUX_USB_VIDEO_H | |
17 | ||
18 | #include <linux/types.h> | |
19 | ||
20 | /* -------------------------------------------------------------------------- | |
21 | * UVC constants | |
22 | */ | |
23 | ||
24 | /* A.2. Video Interface Subclass Codes */ | |
25 | #define UVC_SC_UNDEFINED 0x00 | |
26 | #define UVC_SC_VIDEOCONTROL 0x01 | |
27 | #define UVC_SC_VIDEOSTREAMING 0x02 | |
28 | #define UVC_SC_VIDEO_INTERFACE_COLLECTION 0x03 | |
29 | ||
30 | /* A.3. Video Interface Protocol Codes */ | |
31 | #define UVC_PC_PROTOCOL_UNDEFINED 0x00 | |
8afe97be | 32 | #define UVC_PC_PROTOCOL_15 0x01 |
de05f634 LP |
33 | |
34 | /* A.5. Video Class-Specific VC Interface Descriptor Subtypes */ | |
35 | #define UVC_VC_DESCRIPTOR_UNDEFINED 0x00 | |
36 | #define UVC_VC_HEADER 0x01 | |
37 | #define UVC_VC_INPUT_TERMINAL 0x02 | |
38 | #define UVC_VC_OUTPUT_TERMINAL 0x03 | |
39 | #define UVC_VC_SELECTOR_UNIT 0x04 | |
40 | #define UVC_VC_PROCESSING_UNIT 0x05 | |
41 | #define UVC_VC_EXTENSION_UNIT 0x06 | |
42 | ||
43 | /* A.6. Video Class-Specific VS Interface Descriptor Subtypes */ | |
44 | #define UVC_VS_UNDEFINED 0x00 | |
45 | #define UVC_VS_INPUT_HEADER 0x01 | |
46 | #define UVC_VS_OUTPUT_HEADER 0x02 | |
47 | #define UVC_VS_STILL_IMAGE_FRAME 0x03 | |
48 | #define UVC_VS_FORMAT_UNCOMPRESSED 0x04 | |
49 | #define UVC_VS_FRAME_UNCOMPRESSED 0x05 | |
50 | #define UVC_VS_FORMAT_MJPEG 0x06 | |
51 | #define UVC_VS_FRAME_MJPEG 0x07 | |
52 | #define UVC_VS_FORMAT_MPEG2TS 0x0a | |
53 | #define UVC_VS_FORMAT_DV 0x0c | |
54 | #define UVC_VS_COLORFORMAT 0x0d | |
55 | #define UVC_VS_FORMAT_FRAME_BASED 0x10 | |
56 | #define UVC_VS_FRAME_FRAME_BASED 0x11 | |
57 | #define UVC_VS_FORMAT_STREAM_BASED 0x12 | |
58 | ||
59 | /* A.7. Video Class-Specific Endpoint Descriptor Subtypes */ | |
60 | #define UVC_EP_UNDEFINED 0x00 | |
61 | #define UVC_EP_GENERAL 0x01 | |
62 | #define UVC_EP_ENDPOINT 0x02 | |
63 | #define UVC_EP_INTERRUPT 0x03 | |
64 | ||
65 | /* A.8. Video Class-Specific Request Codes */ | |
66 | #define UVC_RC_UNDEFINED 0x00 | |
67 | #define UVC_SET_CUR 0x01 | |
68 | #define UVC_GET_CUR 0x81 | |
69 | #define UVC_GET_MIN 0x82 | |
70 | #define UVC_GET_MAX 0x83 | |
71 | #define UVC_GET_RES 0x84 | |
72 | #define UVC_GET_LEN 0x85 | |
73 | #define UVC_GET_INFO 0x86 | |
74 | #define UVC_GET_DEF 0x87 | |
75 | ||
76 | /* A.9.1. VideoControl Interface Control Selectors */ | |
77 | #define UVC_VC_CONTROL_UNDEFINED 0x00 | |
78 | #define UVC_VC_VIDEO_POWER_MODE_CONTROL 0x01 | |
79 | #define UVC_VC_REQUEST_ERROR_CODE_CONTROL 0x02 | |
80 | ||
81 | /* A.9.2. Terminal Control Selectors */ | |
82 | #define UVC_TE_CONTROL_UNDEFINED 0x00 | |
83 | ||
84 | /* A.9.3. Selector Unit Control Selectors */ | |
85 | #define UVC_SU_CONTROL_UNDEFINED 0x00 | |
86 | #define UVC_SU_INPUT_SELECT_CONTROL 0x01 | |
87 | ||
88 | /* A.9.4. Camera Terminal Control Selectors */ | |
89 | #define UVC_CT_CONTROL_UNDEFINED 0x00 | |
90 | #define UVC_CT_SCANNING_MODE_CONTROL 0x01 | |
91 | #define UVC_CT_AE_MODE_CONTROL 0x02 | |
92 | #define UVC_CT_AE_PRIORITY_CONTROL 0x03 | |
93 | #define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04 | |
94 | #define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05 | |
95 | #define UVC_CT_FOCUS_ABSOLUTE_CONTROL 0x06 | |
96 | #define UVC_CT_FOCUS_RELATIVE_CONTROL 0x07 | |
97 | #define UVC_CT_FOCUS_AUTO_CONTROL 0x08 | |
98 | #define UVC_CT_IRIS_ABSOLUTE_CONTROL 0x09 | |
99 | #define UVC_CT_IRIS_RELATIVE_CONTROL 0x0a | |
100 | #define UVC_CT_ZOOM_ABSOLUTE_CONTROL 0x0b | |
101 | #define UVC_CT_ZOOM_RELATIVE_CONTROL 0x0c | |
102 | #define UVC_CT_PANTILT_ABSOLUTE_CONTROL 0x0d | |
103 | #define UVC_CT_PANTILT_RELATIVE_CONTROL 0x0e | |
104 | #define UVC_CT_ROLL_ABSOLUTE_CONTROL 0x0f | |
105 | #define UVC_CT_ROLL_RELATIVE_CONTROL 0x10 | |
106 | #define UVC_CT_PRIVACY_CONTROL 0x11 | |
107 | ||
108 | /* A.9.5. Processing Unit Control Selectors */ | |
109 | #define UVC_PU_CONTROL_UNDEFINED 0x00 | |
110 | #define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01 | |
111 | #define UVC_PU_BRIGHTNESS_CONTROL 0x02 | |
112 | #define UVC_PU_CONTRAST_CONTROL 0x03 | |
113 | #define UVC_PU_GAIN_CONTROL 0x04 | |
114 | #define UVC_PU_POWER_LINE_FREQUENCY_CONTROL 0x05 | |
115 | #define UVC_PU_HUE_CONTROL 0x06 | |
116 | #define UVC_PU_SATURATION_CONTROL 0x07 | |
117 | #define UVC_PU_SHARPNESS_CONTROL 0x08 | |
118 | #define UVC_PU_GAMMA_CONTROL 0x09 | |
119 | #define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0a | |
120 | #define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0b | |
121 | #define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0c | |
122 | #define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0d | |
123 | #define UVC_PU_DIGITAL_MULTIPLIER_CONTROL 0x0e | |
124 | #define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0f | |
125 | #define UVC_PU_HUE_AUTO_CONTROL 0x10 | |
126 | #define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11 | |
127 | #define UVC_PU_ANALOG_LOCK_STATUS_CONTROL 0x12 | |
128 | ||
129 | /* A.9.7. VideoStreaming Interface Control Selectors */ | |
130 | #define UVC_VS_CONTROL_UNDEFINED 0x00 | |
131 | #define UVC_VS_PROBE_CONTROL 0x01 | |
132 | #define UVC_VS_COMMIT_CONTROL 0x02 | |
133 | #define UVC_VS_STILL_PROBE_CONTROL 0x03 | |
134 | #define UVC_VS_STILL_COMMIT_CONTROL 0x04 | |
135 | #define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05 | |
136 | #define UVC_VS_STREAM_ERROR_CODE_CONTROL 0x06 | |
137 | #define UVC_VS_GENERATE_KEY_FRAME_CONTROL 0x07 | |
138 | #define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08 | |
139 | #define UVC_VS_SYNC_DELAY_CONTROL 0x09 | |
140 | ||
141 | /* B.1. USB Terminal Types */ | |
142 | #define UVC_TT_VENDOR_SPECIFIC 0x0100 | |
143 | #define UVC_TT_STREAMING 0x0101 | |
144 | ||
145 | /* B.2. Input Terminal Types */ | |
146 | #define UVC_ITT_VENDOR_SPECIFIC 0x0200 | |
147 | #define UVC_ITT_CAMERA 0x0201 | |
148 | #define UVC_ITT_MEDIA_TRANSPORT_INPUT 0x0202 | |
149 | ||
150 | /* B.3. Output Terminal Types */ | |
151 | #define UVC_OTT_VENDOR_SPECIFIC 0x0300 | |
152 | #define UVC_OTT_DISPLAY 0x0301 | |
153 | #define UVC_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302 | |
154 | ||
155 | /* B.4. External Terminal Types */ | |
156 | #define UVC_EXTERNAL_VENDOR_SPECIFIC 0x0400 | |
157 | #define UVC_COMPOSITE_CONNECTOR 0x0401 | |
158 | #define UVC_SVIDEO_CONNECTOR 0x0402 | |
159 | #define UVC_COMPONENT_CONNECTOR 0x0403 | |
160 | ||
161 | /* 2.4.2.2. Status Packet Type */ | |
162 | #define UVC_STATUS_TYPE_CONTROL 1 | |
163 | #define UVC_STATUS_TYPE_STREAMING 2 | |
164 | ||
bbafc0cb LP |
165 | /* 2.4.3.3. Payload Header Information */ |
166 | #define UVC_STREAM_EOH (1 << 7) | |
167 | #define UVC_STREAM_ERR (1 << 6) | |
168 | #define UVC_STREAM_STI (1 << 5) | |
169 | #define UVC_STREAM_RES (1 << 4) | |
170 | #define UVC_STREAM_SCR (1 << 3) | |
171 | #define UVC_STREAM_PTS (1 << 2) | |
172 | #define UVC_STREAM_EOF (1 << 1) | |
173 | #define UVC_STREAM_FID (1 << 0) | |
174 | ||
1b4e21c4 LP |
175 | /* 4.1.2. Control Capabilities */ |
176 | #define UVC_CONTROL_CAP_GET (1 << 0) | |
177 | #define UVC_CONTROL_CAP_SET (1 << 1) | |
178 | #define UVC_CONTROL_CAP_DISABLED (1 << 2) | |
179 | #define UVC_CONTROL_CAP_AUTOUPDATE (1 << 3) | |
180 | #define UVC_CONTROL_CAP_ASYNCHRONOUS (1 << 4) | |
181 | ||
bbafc0cb LP |
182 | /* ------------------------------------------------------------------------ |
183 | * UVC structures | |
184 | */ | |
185 | ||
186 | /* All UVC descriptors have these 3 fields at the beginning */ | |
187 | struct uvc_descriptor_header { | |
188 | __u8 bLength; | |
189 | __u8 bDescriptorType; | |
190 | __u8 bDescriptorSubType; | |
191 | } __attribute__((packed)); | |
192 | ||
193 | /* 3.7.2. Video Control Interface Header Descriptor */ | |
194 | struct uvc_header_descriptor { | |
f823b75f LP |
195 | __u8 bLength; |
196 | __u8 bDescriptorType; | |
197 | __u8 bDescriptorSubType; | |
198 | __le16 bcdUVC; | |
199 | __le16 wTotalLength; | |
200 | __le32 dwClockFrequency; | |
201 | __u8 bInCollection; | |
202 | __u8 baInterfaceNr[]; | |
bbafc0cb LP |
203 | } __attribute__((__packed__)); |
204 | ||
205 | #define UVC_DT_HEADER_SIZE(n) (12+(n)) | |
206 | ||
207 | #define UVC_HEADER_DESCRIPTOR(n) \ | |
208 | uvc_header_descriptor_##n | |
209 | ||
210 | #define DECLARE_UVC_HEADER_DESCRIPTOR(n) \ | |
211 | struct UVC_HEADER_DESCRIPTOR(n) { \ | |
f823b75f LP |
212 | __u8 bLength; \ |
213 | __u8 bDescriptorType; \ | |
214 | __u8 bDescriptorSubType; \ | |
215 | __le16 bcdUVC; \ | |
216 | __le16 wTotalLength; \ | |
217 | __le32 dwClockFrequency; \ | |
218 | __u8 bInCollection; \ | |
219 | __u8 baInterfaceNr[n]; \ | |
bbafc0cb LP |
220 | } __attribute__ ((packed)) |
221 | ||
222 | /* 3.7.2.1. Input Terminal Descriptor */ | |
223 | struct uvc_input_terminal_descriptor { | |
f823b75f LP |
224 | __u8 bLength; |
225 | __u8 bDescriptorType; | |
226 | __u8 bDescriptorSubType; | |
227 | __u8 bTerminalID; | |
228 | __le16 wTerminalType; | |
229 | __u8 bAssocTerminal; | |
230 | __u8 iTerminal; | |
bbafc0cb LP |
231 | } __attribute__((__packed__)); |
232 | ||
233 | #define UVC_DT_INPUT_TERMINAL_SIZE 8 | |
234 | ||
235 | /* 3.7.2.2. Output Terminal Descriptor */ | |
236 | struct uvc_output_terminal_descriptor { | |
f823b75f LP |
237 | __u8 bLength; |
238 | __u8 bDescriptorType; | |
239 | __u8 bDescriptorSubType; | |
240 | __u8 bTerminalID; | |
241 | __le16 wTerminalType; | |
242 | __u8 bAssocTerminal; | |
243 | __u8 bSourceID; | |
244 | __u8 iTerminal; | |
bbafc0cb LP |
245 | } __attribute__((__packed__)); |
246 | ||
247 | #define UVC_DT_OUTPUT_TERMINAL_SIZE 9 | |
248 | ||
249 | /* 3.7.2.3. Camera Terminal Descriptor */ | |
250 | struct uvc_camera_terminal_descriptor { | |
f823b75f LP |
251 | __u8 bLength; |
252 | __u8 bDescriptorType; | |
253 | __u8 bDescriptorSubType; | |
254 | __u8 bTerminalID; | |
255 | __le16 wTerminalType; | |
256 | __u8 bAssocTerminal; | |
257 | __u8 iTerminal; | |
258 | __le16 wObjectiveFocalLengthMin; | |
259 | __le16 wObjectiveFocalLengthMax; | |
260 | __le16 wOcularFocalLength; | |
261 | __u8 bControlSize; | |
262 | __u8 bmControls[3]; | |
bbafc0cb LP |
263 | } __attribute__((__packed__)); |
264 | ||
265 | #define UVC_DT_CAMERA_TERMINAL_SIZE(n) (15+(n)) | |
266 | ||
267 | /* 3.7.2.4. Selector Unit Descriptor */ | |
268 | struct uvc_selector_unit_descriptor { | |
269 | __u8 bLength; | |
270 | __u8 bDescriptorType; | |
271 | __u8 bDescriptorSubType; | |
272 | __u8 bUnitID; | |
273 | __u8 bNrInPins; | |
274 | __u8 baSourceID[0]; | |
275 | __u8 iSelector; | |
276 | } __attribute__((__packed__)); | |
277 | ||
278 | #define UVC_DT_SELECTOR_UNIT_SIZE(n) (6+(n)) | |
279 | ||
280 | #define UVC_SELECTOR_UNIT_DESCRIPTOR(n) \ | |
281 | uvc_selector_unit_descriptor_##n | |
282 | ||
283 | #define DECLARE_UVC_SELECTOR_UNIT_DESCRIPTOR(n) \ | |
284 | struct UVC_SELECTOR_UNIT_DESCRIPTOR(n) { \ | |
285 | __u8 bLength; \ | |
286 | __u8 bDescriptorType; \ | |
287 | __u8 bDescriptorSubType; \ | |
288 | __u8 bUnitID; \ | |
289 | __u8 bNrInPins; \ | |
290 | __u8 baSourceID[n]; \ | |
291 | __u8 iSelector; \ | |
292 | } __attribute__ ((packed)) | |
293 | ||
294 | /* 3.7.2.5. Processing Unit Descriptor */ | |
295 | struct uvc_processing_unit_descriptor { | |
f823b75f LP |
296 | __u8 bLength; |
297 | __u8 bDescriptorType; | |
298 | __u8 bDescriptorSubType; | |
299 | __u8 bUnitID; | |
300 | __u8 bSourceID; | |
301 | __le16 wMaxMultiplier; | |
302 | __u8 bControlSize; | |
303 | __u8 bmControls[2]; | |
304 | __u8 iProcessing; | |
bbafc0cb LP |
305 | } __attribute__((__packed__)); |
306 | ||
307 | #define UVC_DT_PROCESSING_UNIT_SIZE(n) (9+(n)) | |
308 | ||
309 | /* 3.7.2.6. Extension Unit Descriptor */ | |
310 | struct uvc_extension_unit_descriptor { | |
311 | __u8 bLength; | |
312 | __u8 bDescriptorType; | |
313 | __u8 bDescriptorSubType; | |
314 | __u8 bUnitID; | |
315 | __u8 guidExtensionCode[16]; | |
316 | __u8 bNumControls; | |
317 | __u8 bNrInPins; | |
318 | __u8 baSourceID[0]; | |
319 | __u8 bControlSize; | |
320 | __u8 bmControls[0]; | |
321 | __u8 iExtension; | |
322 | } __attribute__((__packed__)); | |
323 | ||
324 | #define UVC_DT_EXTENSION_UNIT_SIZE(p, n) (24+(p)+(n)) | |
325 | ||
326 | #define UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \ | |
327 | uvc_extension_unit_descriptor_##p_##n | |
328 | ||
329 | #define DECLARE_UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \ | |
330 | struct UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) { \ | |
331 | __u8 bLength; \ | |
332 | __u8 bDescriptorType; \ | |
333 | __u8 bDescriptorSubType; \ | |
334 | __u8 bUnitID; \ | |
335 | __u8 guidExtensionCode[16]; \ | |
336 | __u8 bNumControls; \ | |
337 | __u8 bNrInPins; \ | |
338 | __u8 baSourceID[p]; \ | |
339 | __u8 bControlSize; \ | |
340 | __u8 bmControls[n]; \ | |
341 | __u8 iExtension; \ | |
342 | } __attribute__ ((packed)) | |
343 | ||
344 | /* 3.8.2.2. Video Control Interrupt Endpoint Descriptor */ | |
345 | struct uvc_control_endpoint_descriptor { | |
f823b75f LP |
346 | __u8 bLength; |
347 | __u8 bDescriptorType; | |
348 | __u8 bDescriptorSubType; | |
349 | __le16 wMaxTransferSize; | |
bbafc0cb LP |
350 | } __attribute__((__packed__)); |
351 | ||
352 | #define UVC_DT_CONTROL_ENDPOINT_SIZE 5 | |
353 | ||
354 | /* 3.9.2.1. Input Header Descriptor */ | |
355 | struct uvc_input_header_descriptor { | |
f823b75f LP |
356 | __u8 bLength; |
357 | __u8 bDescriptorType; | |
358 | __u8 bDescriptorSubType; | |
359 | __u8 bNumFormats; | |
360 | __le16 wTotalLength; | |
361 | __u8 bEndpointAddress; | |
362 | __u8 bmInfo; | |
363 | __u8 bTerminalLink; | |
364 | __u8 bStillCaptureMethod; | |
365 | __u8 bTriggerSupport; | |
366 | __u8 bTriggerUsage; | |
367 | __u8 bControlSize; | |
368 | __u8 bmaControls[]; | |
bbafc0cb LP |
369 | } __attribute__((__packed__)); |
370 | ||
371 | #define UVC_DT_INPUT_HEADER_SIZE(n, p) (13+(n*p)) | |
372 | ||
373 | #define UVC_INPUT_HEADER_DESCRIPTOR(n, p) \ | |
374 | uvc_input_header_descriptor_##n_##p | |
375 | ||
376 | #define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n, p) \ | |
377 | struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) { \ | |
f823b75f LP |
378 | __u8 bLength; \ |
379 | __u8 bDescriptorType; \ | |
380 | __u8 bDescriptorSubType; \ | |
381 | __u8 bNumFormats; \ | |
382 | __le16 wTotalLength; \ | |
383 | __u8 bEndpointAddress; \ | |
384 | __u8 bmInfo; \ | |
385 | __u8 bTerminalLink; \ | |
386 | __u8 bStillCaptureMethod; \ | |
387 | __u8 bTriggerSupport; \ | |
388 | __u8 bTriggerUsage; \ | |
389 | __u8 bControlSize; \ | |
390 | __u8 bmaControls[p][n]; \ | |
bbafc0cb LP |
391 | } __attribute__ ((packed)) |
392 | ||
393 | /* 3.9.2.2. Output Header Descriptor */ | |
394 | struct uvc_output_header_descriptor { | |
f823b75f LP |
395 | __u8 bLength; |
396 | __u8 bDescriptorType; | |
397 | __u8 bDescriptorSubType; | |
398 | __u8 bNumFormats; | |
399 | __le16 wTotalLength; | |
400 | __u8 bEndpointAddress; | |
401 | __u8 bTerminalLink; | |
402 | __u8 bControlSize; | |
403 | __u8 bmaControls[]; | |
bbafc0cb LP |
404 | } __attribute__((__packed__)); |
405 | ||
406 | #define UVC_DT_OUTPUT_HEADER_SIZE(n, p) (9+(n*p)) | |
407 | ||
408 | #define UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \ | |
409 | uvc_output_header_descriptor_##n_##p | |
410 | ||
411 | #define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \ | |
412 | struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) { \ | |
f823b75f LP |
413 | __u8 bLength; \ |
414 | __u8 bDescriptorType; \ | |
415 | __u8 bDescriptorSubType; \ | |
416 | __u8 bNumFormats; \ | |
417 | __le16 wTotalLength; \ | |
418 | __u8 bEndpointAddress; \ | |
419 | __u8 bTerminalLink; \ | |
420 | __u8 bControlSize; \ | |
421 | __u8 bmaControls[p][n]; \ | |
bbafc0cb LP |
422 | } __attribute__ ((packed)) |
423 | ||
424 | /* 3.9.2.6. Color matching descriptor */ | |
425 | struct uvc_color_matching_descriptor { | |
426 | __u8 bLength; | |
427 | __u8 bDescriptorType; | |
428 | __u8 bDescriptorSubType; | |
429 | __u8 bColorPrimaries; | |
430 | __u8 bTransferCharacteristics; | |
431 | __u8 bMatrixCoefficients; | |
432 | } __attribute__((__packed__)); | |
433 | ||
434 | #define UVC_DT_COLOR_MATCHING_SIZE 6 | |
435 | ||
436 | /* 4.3.1.1. Video Probe and Commit Controls */ | |
437 | struct uvc_streaming_control { | |
438 | __u16 bmHint; | |
439 | __u8 bFormatIndex; | |
440 | __u8 bFrameIndex; | |
441 | __u32 dwFrameInterval; | |
442 | __u16 wKeyFrameRate; | |
443 | __u16 wPFrameRate; | |
444 | __u16 wCompQuality; | |
445 | __u16 wCompWindowSize; | |
446 | __u16 wDelay; | |
447 | __u32 dwMaxVideoFrameSize; | |
448 | __u32 dwMaxPayloadTransferSize; | |
449 | __u32 dwClockFrequency; | |
450 | __u8 bmFramingInfo; | |
451 | __u8 bPreferedVersion; | |
452 | __u8 bMinVersion; | |
453 | __u8 bMaxVersion; | |
454 | } __attribute__((__packed__)); | |
455 | ||
456 | /* Uncompressed Payload - 3.1.1. Uncompressed Video Format Descriptor */ | |
457 | struct uvc_format_uncompressed { | |
458 | __u8 bLength; | |
459 | __u8 bDescriptorType; | |
460 | __u8 bDescriptorSubType; | |
461 | __u8 bFormatIndex; | |
462 | __u8 bNumFrameDescriptors; | |
463 | __u8 guidFormat[16]; | |
464 | __u8 bBitsPerPixel; | |
465 | __u8 bDefaultFrameIndex; | |
466 | __u8 bAspectRatioX; | |
467 | __u8 bAspectRatioY; | |
468 | __u8 bmInterfaceFlags; | |
469 | __u8 bCopyProtect; | |
470 | } __attribute__((__packed__)); | |
471 | ||
472 | #define UVC_DT_FORMAT_UNCOMPRESSED_SIZE 27 | |
473 | ||
474 | /* Uncompressed Payload - 3.1.2. Uncompressed Video Frame Descriptor */ | |
475 | struct uvc_frame_uncompressed { | |
f823b75f LP |
476 | __u8 bLength; |
477 | __u8 bDescriptorType; | |
478 | __u8 bDescriptorSubType; | |
479 | __u8 bFrameIndex; | |
480 | __u8 bmCapabilities; | |
481 | __le16 wWidth; | |
482 | __le16 wHeight; | |
483 | __le32 dwMinBitRate; | |
484 | __le32 dwMaxBitRate; | |
485 | __le32 dwMaxVideoFrameBufferSize; | |
486 | __le32 dwDefaultFrameInterval; | |
487 | __u8 bFrameIntervalType; | |
488 | __le32 dwFrameInterval[]; | |
bbafc0cb LP |
489 | } __attribute__((__packed__)); |
490 | ||
491 | #define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n) (26+4*(n)) | |
492 | ||
493 | #define UVC_FRAME_UNCOMPRESSED(n) \ | |
494 | uvc_frame_uncompressed_##n | |
495 | ||
496 | #define DECLARE_UVC_FRAME_UNCOMPRESSED(n) \ | |
497 | struct UVC_FRAME_UNCOMPRESSED(n) { \ | |
f823b75f LP |
498 | __u8 bLength; \ |
499 | __u8 bDescriptorType; \ | |
500 | __u8 bDescriptorSubType; \ | |
501 | __u8 bFrameIndex; \ | |
502 | __u8 bmCapabilities; \ | |
503 | __le16 wWidth; \ | |
504 | __le16 wHeight; \ | |
505 | __le32 dwMinBitRate; \ | |
506 | __le32 dwMaxBitRate; \ | |
507 | __le32 dwMaxVideoFrameBufferSize; \ | |
508 | __le32 dwDefaultFrameInterval; \ | |
509 | __u8 bFrameIntervalType; \ | |
510 | __le32 dwFrameInterval[n]; \ | |
bbafc0cb LP |
511 | } __attribute__ ((packed)) |
512 | ||
513 | /* MJPEG Payload - 3.1.1. MJPEG Video Format Descriptor */ | |
514 | struct uvc_format_mjpeg { | |
515 | __u8 bLength; | |
516 | __u8 bDescriptorType; | |
517 | __u8 bDescriptorSubType; | |
518 | __u8 bFormatIndex; | |
519 | __u8 bNumFrameDescriptors; | |
520 | __u8 bmFlags; | |
521 | __u8 bDefaultFrameIndex; | |
522 | __u8 bAspectRatioX; | |
523 | __u8 bAspectRatioY; | |
524 | __u8 bmInterfaceFlags; | |
525 | __u8 bCopyProtect; | |
526 | } __attribute__((__packed__)); | |
527 | ||
528 | #define UVC_DT_FORMAT_MJPEG_SIZE 11 | |
529 | ||
530 | /* MJPEG Payload - 3.1.2. MJPEG Video Frame Descriptor */ | |
531 | struct uvc_frame_mjpeg { | |
f823b75f LP |
532 | __u8 bLength; |
533 | __u8 bDescriptorType; | |
534 | __u8 bDescriptorSubType; | |
535 | __u8 bFrameIndex; | |
536 | __u8 bmCapabilities; | |
537 | __le16 wWidth; | |
538 | __le16 wHeight; | |
539 | __le32 dwMinBitRate; | |
540 | __le32 dwMaxBitRate; | |
541 | __le32 dwMaxVideoFrameBufferSize; | |
542 | __le32 dwDefaultFrameInterval; | |
543 | __u8 bFrameIntervalType; | |
544 | __le32 dwFrameInterval[]; | |
bbafc0cb LP |
545 | } __attribute__((__packed__)); |
546 | ||
547 | #define UVC_DT_FRAME_MJPEG_SIZE(n) (26+4*(n)) | |
548 | ||
549 | #define UVC_FRAME_MJPEG(n) \ | |
550 | uvc_frame_mjpeg_##n | |
551 | ||
552 | #define DECLARE_UVC_FRAME_MJPEG(n) \ | |
553 | struct UVC_FRAME_MJPEG(n) { \ | |
f823b75f LP |
554 | __u8 bLength; \ |
555 | __u8 bDescriptorType; \ | |
556 | __u8 bDescriptorSubType; \ | |
557 | __u8 bFrameIndex; \ | |
558 | __u8 bmCapabilities; \ | |
559 | __le16 wWidth; \ | |
560 | __le16 wHeight; \ | |
561 | __le32 dwMinBitRate; \ | |
562 | __le32 dwMaxBitRate; \ | |
563 | __le32 dwMaxVideoFrameBufferSize; \ | |
564 | __le32 dwDefaultFrameInterval; \ | |
565 | __u8 bFrameIntervalType; \ | |
566 | __le32 dwFrameInterval[n]; \ | |
bbafc0cb LP |
567 | } __attribute__ ((packed)) |
568 | ||
de05f634 LP |
569 | #endif /* __LINUX_USB_VIDEO_H */ |
570 |