1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
---|---|
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 |
32 | #define UVC_PC_PROTOCOL_15 0x01 |
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 | #define UVC_CT_REGION_OF_INTEREST_CONTROL 0x14 |
108 | |
109 | /* A.9.5. Processing Unit Control Selectors */ |
110 | #define UVC_PU_CONTROL_UNDEFINED 0x00 |
111 | #define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01 |
112 | #define UVC_PU_BRIGHTNESS_CONTROL 0x02 |
113 | #define UVC_PU_CONTRAST_CONTROL 0x03 |
114 | #define UVC_PU_GAIN_CONTROL 0x04 |
115 | #define UVC_PU_POWER_LINE_FREQUENCY_CONTROL 0x05 |
116 | #define UVC_PU_HUE_CONTROL 0x06 |
117 | #define UVC_PU_SATURATION_CONTROL 0x07 |
118 | #define UVC_PU_SHARPNESS_CONTROL 0x08 |
119 | #define UVC_PU_GAMMA_CONTROL 0x09 |
120 | #define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0a |
121 | #define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0b |
122 | #define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0c |
123 | #define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0d |
124 | #define UVC_PU_DIGITAL_MULTIPLIER_CONTROL 0x0e |
125 | #define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0f |
126 | #define UVC_PU_HUE_AUTO_CONTROL 0x10 |
127 | #define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11 |
128 | #define UVC_PU_ANALOG_LOCK_STATUS_CONTROL 0x12 |
129 | |
130 | /* A.9.7. VideoStreaming Interface Control Selectors */ |
131 | #define UVC_VS_CONTROL_UNDEFINED 0x00 |
132 | #define UVC_VS_PROBE_CONTROL 0x01 |
133 | #define UVC_VS_COMMIT_CONTROL 0x02 |
134 | #define UVC_VS_STILL_PROBE_CONTROL 0x03 |
135 | #define UVC_VS_STILL_COMMIT_CONTROL 0x04 |
136 | #define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05 |
137 | #define UVC_VS_STREAM_ERROR_CODE_CONTROL 0x06 |
138 | #define UVC_VS_GENERATE_KEY_FRAME_CONTROL 0x07 |
139 | #define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08 |
140 | #define UVC_VS_SYNC_DELAY_CONTROL 0x09 |
141 | |
142 | /* B.1. USB Terminal Types */ |
143 | #define UVC_TT_VENDOR_SPECIFIC 0x0100 |
144 | #define UVC_TT_STREAMING 0x0101 |
145 | |
146 | /* B.2. Input Terminal Types */ |
147 | #define UVC_ITT_VENDOR_SPECIFIC 0x0200 |
148 | #define UVC_ITT_CAMERA 0x0201 |
149 | #define UVC_ITT_MEDIA_TRANSPORT_INPUT 0x0202 |
150 | |
151 | /* B.3. Output Terminal Types */ |
152 | #define UVC_OTT_VENDOR_SPECIFIC 0x0300 |
153 | #define UVC_OTT_DISPLAY 0x0301 |
154 | #define UVC_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302 |
155 | |
156 | /* B.4. External Terminal Types */ |
157 | #define UVC_EXTERNAL_VENDOR_SPECIFIC 0x0400 |
158 | #define UVC_COMPOSITE_CONNECTOR 0x0401 |
159 | #define UVC_SVIDEO_CONNECTOR 0x0402 |
160 | #define UVC_COMPONENT_CONNECTOR 0x0403 |
161 | |
162 | /* 2.4.2.2. Status Packet Type */ |
163 | #define UVC_STATUS_TYPE_CONTROL 1 |
164 | #define UVC_STATUS_TYPE_STREAMING 2 |
165 | |
166 | /* 2.4.3.3. Payload Header Information */ |
167 | #define UVC_STREAM_EOH (1 << 7) |
168 | #define UVC_STREAM_ERR (1 << 6) |
169 | #define UVC_STREAM_STI (1 << 5) |
170 | #define UVC_STREAM_RES (1 << 4) |
171 | #define UVC_STREAM_SCR (1 << 3) |
172 | #define UVC_STREAM_PTS (1 << 2) |
173 | #define UVC_STREAM_EOF (1 << 1) |
174 | #define UVC_STREAM_FID (1 << 0) |
175 | |
176 | /* 4.1.2. Control Capabilities */ |
177 | #define UVC_CONTROL_CAP_GET (1 << 0) |
178 | #define UVC_CONTROL_CAP_SET (1 << 1) |
179 | #define UVC_CONTROL_CAP_DISABLED (1 << 2) |
180 | #define UVC_CONTROL_CAP_AUTOUPDATE (1 << 3) |
181 | #define UVC_CONTROL_CAP_ASYNCHRONOUS (1 << 4) |
182 | |
183 | /* 3.9.2.6 Color Matching Descriptor Values */ |
184 | enum uvc_color_primaries_values { |
185 | UVC_COLOR_PRIMARIES_UNSPECIFIED, |
186 | UVC_COLOR_PRIMARIES_BT_709_SRGB, |
187 | UVC_COLOR_PRIMARIES_BT_470_2_M, |
188 | UVC_COLOR_PRIMARIES_BT_470_2_B_G, |
189 | UVC_COLOR_PRIMARIES_SMPTE_170M, |
190 | UVC_COLOR_PRIMARIES_SMPTE_240M, |
191 | }; |
192 | |
193 | enum uvc_transfer_characteristics_values { |
194 | UVC_TRANSFER_CHARACTERISTICS_UNSPECIFIED, |
195 | UVC_TRANSFER_CHARACTERISTICS_BT_709, |
196 | UVC_TRANSFER_CHARACTERISTICS_BT_470_2_M, |
197 | UVC_TRANSFER_CHARACTERISTICS_BT_470_2_B_G, |
198 | UVC_TRANSFER_CHARACTERISTICS_SMPTE_170M, |
199 | UVC_TRANSFER_CHARACTERISTICS_SMPTE_240M, |
200 | UVC_TRANSFER_CHARACTERISTICS_LINEAR, |
201 | UVC_TRANSFER_CHARACTERISTICS_SRGB, |
202 | }; |
203 | |
204 | enum uvc_matrix_coefficients { |
205 | UVC_MATRIX_COEFFICIENTS_UNSPECIFIED, |
206 | UVC_MATRIX_COEFFICIENTS_BT_709, |
207 | UVC_MATRIX_COEFFICIENTS_FCC, |
208 | UVC_MATRIX_COEFFICIENTS_BT_470_2_B_G, |
209 | UVC_MATRIX_COEFFICIENTS_SMPTE_170M, |
210 | UVC_MATRIX_COEFFICIENTS_SMPTE_240M, |
211 | }; |
212 | |
213 | /* ------------------------------------------------------------------------ |
214 | * UVC structures |
215 | */ |
216 | |
217 | /* All UVC descriptors have these 3 fields at the beginning */ |
218 | struct uvc_descriptor_header { |
219 | __u8 bLength; |
220 | __u8 bDescriptorType; |
221 | __u8 bDescriptorSubType; |
222 | } __attribute__((packed)); |
223 | |
224 | /* 3.7.2. Video Control Interface Header Descriptor */ |
225 | struct uvc_header_descriptor { |
226 | __u8 bLength; |
227 | __u8 bDescriptorType; |
228 | __u8 bDescriptorSubType; |
229 | __le16 bcdUVC; |
230 | __le16 wTotalLength; |
231 | __le32 dwClockFrequency; |
232 | __u8 bInCollection; |
233 | __u8 baInterfaceNr[]; |
234 | } __attribute__((__packed__)); |
235 | |
236 | #define UVC_DT_HEADER_SIZE(n) (12+(n)) |
237 | |
238 | #define UVC_HEADER_DESCRIPTOR(n) \ |
239 | uvc_header_descriptor_##n |
240 | |
241 | #define DECLARE_UVC_HEADER_DESCRIPTOR(n) \ |
242 | struct UVC_HEADER_DESCRIPTOR(n) { \ |
243 | __u8 bLength; \ |
244 | __u8 bDescriptorType; \ |
245 | __u8 bDescriptorSubType; \ |
246 | __le16 bcdUVC; \ |
247 | __le16 wTotalLength; \ |
248 | __le32 dwClockFrequency; \ |
249 | __u8 bInCollection; \ |
250 | __u8 baInterfaceNr[n]; \ |
251 | } __attribute__ ((packed)) |
252 | |
253 | /* 3.7.2.1. Input Terminal Descriptor */ |
254 | struct uvc_input_terminal_descriptor { |
255 | __u8 bLength; |
256 | __u8 bDescriptorType; |
257 | __u8 bDescriptorSubType; |
258 | __u8 bTerminalID; |
259 | __le16 wTerminalType; |
260 | __u8 bAssocTerminal; |
261 | __u8 iTerminal; |
262 | } __attribute__((__packed__)); |
263 | |
264 | #define UVC_DT_INPUT_TERMINAL_SIZE 8 |
265 | |
266 | /* 3.7.2.2. Output Terminal Descriptor */ |
267 | struct uvc_output_terminal_descriptor { |
268 | __u8 bLength; |
269 | __u8 bDescriptorType; |
270 | __u8 bDescriptorSubType; |
271 | __u8 bTerminalID; |
272 | __le16 wTerminalType; |
273 | __u8 bAssocTerminal; |
274 | __u8 bSourceID; |
275 | __u8 iTerminal; |
276 | } __attribute__((__packed__)); |
277 | |
278 | #define UVC_DT_OUTPUT_TERMINAL_SIZE 9 |
279 | |
280 | /* 3.7.2.3. Camera Terminal Descriptor */ |
281 | struct uvc_camera_terminal_descriptor { |
282 | __u8 bLength; |
283 | __u8 bDescriptorType; |
284 | __u8 bDescriptorSubType; |
285 | __u8 bTerminalID; |
286 | __le16 wTerminalType; |
287 | __u8 bAssocTerminal; |
288 | __u8 iTerminal; |
289 | __le16 wObjectiveFocalLengthMin; |
290 | __le16 wObjectiveFocalLengthMax; |
291 | __le16 wOcularFocalLength; |
292 | __u8 bControlSize; |
293 | __u8 bmControls[3]; |
294 | } __attribute__((__packed__)); |
295 | |
296 | #define UVC_DT_CAMERA_TERMINAL_SIZE(n) (15+(n)) |
297 | |
298 | /* 3.7.2.4. Selector Unit Descriptor */ |
299 | struct uvc_selector_unit_descriptor { |
300 | __u8 bLength; |
301 | __u8 bDescriptorType; |
302 | __u8 bDescriptorSubType; |
303 | __u8 bUnitID; |
304 | __u8 bNrInPins; |
305 | __u8 baSourceID[0]; |
306 | __u8 iSelector; |
307 | } __attribute__((__packed__)); |
308 | |
309 | #define UVC_DT_SELECTOR_UNIT_SIZE(n) (6+(n)) |
310 | |
311 | #define UVC_SELECTOR_UNIT_DESCRIPTOR(n) \ |
312 | uvc_selector_unit_descriptor_##n |
313 | |
314 | #define DECLARE_UVC_SELECTOR_UNIT_DESCRIPTOR(n) \ |
315 | struct UVC_SELECTOR_UNIT_DESCRIPTOR(n) { \ |
316 | __u8 bLength; \ |
317 | __u8 bDescriptorType; \ |
318 | __u8 bDescriptorSubType; \ |
319 | __u8 bUnitID; \ |
320 | __u8 bNrInPins; \ |
321 | __u8 baSourceID[n]; \ |
322 | __u8 iSelector; \ |
323 | } __attribute__ ((packed)) |
324 | |
325 | /* 3.7.2.5. Processing Unit Descriptor */ |
326 | struct uvc_processing_unit_descriptor { |
327 | __u8 bLength; |
328 | __u8 bDescriptorType; |
329 | __u8 bDescriptorSubType; |
330 | __u8 bUnitID; |
331 | __u8 bSourceID; |
332 | __le16 wMaxMultiplier; |
333 | __u8 bControlSize; |
334 | __u8 bmControls[2]; |
335 | __u8 iProcessing; |
336 | __u8 bmVideoStandards; |
337 | } __attribute__((__packed__)); |
338 | |
339 | #define UVC_DT_PROCESSING_UNIT_SIZE(n) (10+(n)) |
340 | |
341 | /* 3.7.2.6. Extension Unit Descriptor */ |
342 | struct uvc_extension_unit_descriptor { |
343 | __u8 bLength; |
344 | __u8 bDescriptorType; |
345 | __u8 bDescriptorSubType; |
346 | __u8 bUnitID; |
347 | __u8 guidExtensionCode[16]; |
348 | __u8 bNumControls; |
349 | __u8 bNrInPins; |
350 | __u8 baSourceID[0]; |
351 | __u8 bControlSize; |
352 | __u8 bmControls[0]; |
353 | __u8 iExtension; |
354 | } __attribute__((__packed__)); |
355 | |
356 | #define UVC_DT_EXTENSION_UNIT_SIZE(p, n) (24+(p)+(n)) |
357 | |
358 | #define UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \ |
359 | uvc_extension_unit_descriptor_##p_##n |
360 | |
361 | #define DECLARE_UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \ |
362 | struct UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) { \ |
363 | __u8 bLength; \ |
364 | __u8 bDescriptorType; \ |
365 | __u8 bDescriptorSubType; \ |
366 | __u8 bUnitID; \ |
367 | __u8 guidExtensionCode[16]; \ |
368 | __u8 bNumControls; \ |
369 | __u8 bNrInPins; \ |
370 | __u8 baSourceID[p]; \ |
371 | __u8 bControlSize; \ |
372 | __u8 bmControls[n]; \ |
373 | __u8 iExtension; \ |
374 | } __attribute__ ((packed)) |
375 | |
376 | /* 3.8.2.2. Video Control Interrupt Endpoint Descriptor */ |
377 | struct uvc_control_endpoint_descriptor { |
378 | __u8 bLength; |
379 | __u8 bDescriptorType; |
380 | __u8 bDescriptorSubType; |
381 | __le16 wMaxTransferSize; |
382 | } __attribute__((__packed__)); |
383 | |
384 | #define UVC_DT_CONTROL_ENDPOINT_SIZE 5 |
385 | |
386 | /* 3.9.2.1. Input Header Descriptor */ |
387 | struct uvc_input_header_descriptor { |
388 | __u8 bLength; |
389 | __u8 bDescriptorType; |
390 | __u8 bDescriptorSubType; |
391 | __u8 bNumFormats; |
392 | __le16 wTotalLength; |
393 | __u8 bEndpointAddress; |
394 | __u8 bmInfo; |
395 | __u8 bTerminalLink; |
396 | __u8 bStillCaptureMethod; |
397 | __u8 bTriggerSupport; |
398 | __u8 bTriggerUsage; |
399 | __u8 bControlSize; |
400 | __u8 bmaControls[]; |
401 | } __attribute__((__packed__)); |
402 | |
403 | #define UVC_DT_INPUT_HEADER_SIZE(n, p) (13+(n*p)) |
404 | |
405 | #define UVC_INPUT_HEADER_DESCRIPTOR(n, p) \ |
406 | uvc_input_header_descriptor_##n_##p |
407 | |
408 | #define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n, p) \ |
409 | struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) { \ |
410 | __u8 bLength; \ |
411 | __u8 bDescriptorType; \ |
412 | __u8 bDescriptorSubType; \ |
413 | __u8 bNumFormats; \ |
414 | __le16 wTotalLength; \ |
415 | __u8 bEndpointAddress; \ |
416 | __u8 bmInfo; \ |
417 | __u8 bTerminalLink; \ |
418 | __u8 bStillCaptureMethod; \ |
419 | __u8 bTriggerSupport; \ |
420 | __u8 bTriggerUsage; \ |
421 | __u8 bControlSize; \ |
422 | __u8 bmaControls[p][n]; \ |
423 | } __attribute__ ((packed)) |
424 | |
425 | /* 3.9.2.2. Output Header Descriptor */ |
426 | struct uvc_output_header_descriptor { |
427 | __u8 bLength; |
428 | __u8 bDescriptorType; |
429 | __u8 bDescriptorSubType; |
430 | __u8 bNumFormats; |
431 | __le16 wTotalLength; |
432 | __u8 bEndpointAddress; |
433 | __u8 bTerminalLink; |
434 | __u8 bControlSize; |
435 | __u8 bmaControls[]; |
436 | } __attribute__((__packed__)); |
437 | |
438 | #define UVC_DT_OUTPUT_HEADER_SIZE(n, p) (9+(n*p)) |
439 | |
440 | #define UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \ |
441 | uvc_output_header_descriptor_##n_##p |
442 | |
443 | #define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \ |
444 | struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) { \ |
445 | __u8 bLength; \ |
446 | __u8 bDescriptorType; \ |
447 | __u8 bDescriptorSubType; \ |
448 | __u8 bNumFormats; \ |
449 | __le16 wTotalLength; \ |
450 | __u8 bEndpointAddress; \ |
451 | __u8 bTerminalLink; \ |
452 | __u8 bControlSize; \ |
453 | __u8 bmaControls[p][n]; \ |
454 | } __attribute__ ((packed)) |
455 | |
456 | /* 3.9.2.6. Color matching descriptor */ |
457 | struct uvc_color_matching_descriptor { |
458 | __u8 bLength; |
459 | __u8 bDescriptorType; |
460 | __u8 bDescriptorSubType; |
461 | __u8 bColorPrimaries; |
462 | __u8 bTransferCharacteristics; |
463 | __u8 bMatrixCoefficients; |
464 | } __attribute__((__packed__)); |
465 | |
466 | #define UVC_DT_COLOR_MATCHING_SIZE 6 |
467 | |
468 | /* 4.3.1.1. Video Probe and Commit Controls */ |
469 | struct uvc_streaming_control { |
470 | __u16 bmHint; |
471 | __u8 bFormatIndex; |
472 | __u8 bFrameIndex; |
473 | __u32 dwFrameInterval; |
474 | __u16 wKeyFrameRate; |
475 | __u16 wPFrameRate; |
476 | __u16 wCompQuality; |
477 | __u16 wCompWindowSize; |
478 | __u16 wDelay; |
479 | __u32 dwMaxVideoFrameSize; |
480 | __u32 dwMaxPayloadTransferSize; |
481 | __u32 dwClockFrequency; |
482 | __u8 bmFramingInfo; |
483 | __u8 bPreferedVersion; |
484 | __u8 bMinVersion; |
485 | __u8 bMaxVersion; |
486 | } __attribute__((__packed__)); |
487 | |
488 | /* Uncompressed Payload - 3.1.1. Uncompressed Video Format Descriptor */ |
489 | struct uvc_format_uncompressed { |
490 | __u8 bLength; |
491 | __u8 bDescriptorType; |
492 | __u8 bDescriptorSubType; |
493 | __u8 bFormatIndex; |
494 | __u8 bNumFrameDescriptors; |
495 | __u8 guidFormat[16]; |
496 | __u8 bBitsPerPixel; |
497 | __u8 bDefaultFrameIndex; |
498 | __u8 bAspectRatioX; |
499 | __u8 bAspectRatioY; |
500 | __u8 bmInterlaceFlags; |
501 | __u8 bCopyProtect; |
502 | } __attribute__((__packed__)); |
503 | |
504 | #define UVC_DT_FORMAT_UNCOMPRESSED_SIZE 27 |
505 | |
506 | /* Uncompressed Payload - 3.1.2. Uncompressed Video Frame Descriptor */ |
507 | struct uvc_frame_uncompressed { |
508 | __u8 bLength; |
509 | __u8 bDescriptorType; |
510 | __u8 bDescriptorSubType; |
511 | __u8 bFrameIndex; |
512 | __u8 bmCapabilities; |
513 | __le16 wWidth; |
514 | __le16 wHeight; |
515 | __le32 dwMinBitRate; |
516 | __le32 dwMaxBitRate; |
517 | __le32 dwMaxVideoFrameBufferSize; |
518 | __le32 dwDefaultFrameInterval; |
519 | __u8 bFrameIntervalType; |
520 | __le32 dwFrameInterval[]; |
521 | } __attribute__((__packed__)); |
522 | |
523 | #define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n) (26+4*(n)) |
524 | |
525 | #define UVC_FRAME_UNCOMPRESSED(n) \ |
526 | uvc_frame_uncompressed_##n |
527 | |
528 | #define DECLARE_UVC_FRAME_UNCOMPRESSED(n) \ |
529 | struct UVC_FRAME_UNCOMPRESSED(n) { \ |
530 | __u8 bLength; \ |
531 | __u8 bDescriptorType; \ |
532 | __u8 bDescriptorSubType; \ |
533 | __u8 bFrameIndex; \ |
534 | __u8 bmCapabilities; \ |
535 | __le16 wWidth; \ |
536 | __le16 wHeight; \ |
537 | __le32 dwMinBitRate; \ |
538 | __le32 dwMaxBitRate; \ |
539 | __le32 dwMaxVideoFrameBufferSize; \ |
540 | __le32 dwDefaultFrameInterval; \ |
541 | __u8 bFrameIntervalType; \ |
542 | __le32 dwFrameInterval[n]; \ |
543 | } __attribute__ ((packed)) |
544 | |
545 | /* MJPEG Payload - 3.1.1. MJPEG Video Format Descriptor */ |
546 | struct uvc_format_mjpeg { |
547 | __u8 bLength; |
548 | __u8 bDescriptorType; |
549 | __u8 bDescriptorSubType; |
550 | __u8 bFormatIndex; |
551 | __u8 bNumFrameDescriptors; |
552 | __u8 bmFlags; |
553 | __u8 bDefaultFrameIndex; |
554 | __u8 bAspectRatioX; |
555 | __u8 bAspectRatioY; |
556 | __u8 bmInterlaceFlags; |
557 | __u8 bCopyProtect; |
558 | } __attribute__((__packed__)); |
559 | |
560 | #define UVC_DT_FORMAT_MJPEG_SIZE 11 |
561 | |
562 | /* MJPEG Payload - 3.1.2. MJPEG Video Frame Descriptor */ |
563 | struct uvc_frame_mjpeg { |
564 | __u8 bLength; |
565 | __u8 bDescriptorType; |
566 | __u8 bDescriptorSubType; |
567 | __u8 bFrameIndex; |
568 | __u8 bmCapabilities; |
569 | __le16 wWidth; |
570 | __le16 wHeight; |
571 | __le32 dwMinBitRate; |
572 | __le32 dwMaxBitRate; |
573 | __le32 dwMaxVideoFrameBufferSize; |
574 | __le32 dwDefaultFrameInterval; |
575 | __u8 bFrameIntervalType; |
576 | __le32 dwFrameInterval[]; |
577 | } __attribute__((__packed__)); |
578 | |
579 | #define UVC_DT_FRAME_MJPEG_SIZE(n) (26+4*(n)) |
580 | |
581 | #define UVC_FRAME_MJPEG(n) \ |
582 | uvc_frame_mjpeg_##n |
583 | |
584 | #define DECLARE_UVC_FRAME_MJPEG(n) \ |
585 | struct UVC_FRAME_MJPEG(n) { \ |
586 | __u8 bLength; \ |
587 | __u8 bDescriptorType; \ |
588 | __u8 bDescriptorSubType; \ |
589 | __u8 bFrameIndex; \ |
590 | __u8 bmCapabilities; \ |
591 | __le16 wWidth; \ |
592 | __le16 wHeight; \ |
593 | __le32 dwMinBitRate; \ |
594 | __le32 dwMaxBitRate; \ |
595 | __le32 dwMaxVideoFrameBufferSize; \ |
596 | __le32 dwDefaultFrameInterval; \ |
597 | __u8 bFrameIntervalType; \ |
598 | __le32 dwFrameInterval[n]; \ |
599 | } __attribute__ ((packed)) |
600 | |
601 | /* Frame Based Payload - 3.1.1. Frame Based Video Format Descriptor */ |
602 | struct uvc_format_framebased { |
603 | __u8 bLength; |
604 | __u8 bDescriptorType; |
605 | __u8 bDescriptorSubType; |
606 | __u8 bFormatIndex; |
607 | __u8 bNumFrameDescriptors; |
608 | __u8 guidFormat[16]; |
609 | __u8 bBitsPerPixel; |
610 | __u8 bDefaultFrameIndex; |
611 | __u8 bAspectRatioX; |
612 | __u8 bAspectRatioY; |
613 | __u8 bmInterfaceFlags; |
614 | __u8 bCopyProtect; |
615 | __u8 bVariableSize; |
616 | } __attribute__((__packed__)); |
617 | |
618 | #define UVC_DT_FORMAT_FRAMEBASED_SIZE 28 |
619 | |
620 | /* Frame Based Payload - 3.1.2. Frame Based Video Frame Descriptor */ |
621 | struct uvc_frame_framebased { |
622 | __u8 bLength; |
623 | __u8 bDescriptorType; |
624 | __u8 bDescriptorSubType; |
625 | __u8 bFrameIndex; |
626 | __u8 bmCapabilities; |
627 | __u16 wWidth; |
628 | __u16 wHeight; |
629 | __u32 dwMinBitRate; |
630 | __u32 dwMaxBitRate; |
631 | __u32 dwDefaultFrameInterval; |
632 | __u8 bFrameIntervalType; |
633 | __u32 dwBytesPerLine; |
634 | __u32 dwFrameInterval[]; |
635 | } __attribute__((__packed__)); |
636 | |
637 | #define UVC_DT_FRAME_FRAMEBASED_SIZE(n) (26+4*(n)) |
638 | |
639 | #define UVC_FRAME_FRAMEBASED(n) \ |
640 | uvc_frame_framebased_##n |
641 | |
642 | #define DECLARE_UVC_FRAME_FRAMEBASED(n) \ |
643 | struct UVC_FRAME_FRAMEBASED(n) { \ |
644 | __u8 bLength; \ |
645 | __u8 bDescriptorType; \ |
646 | __u8 bDescriptorSubType; \ |
647 | __u8 bFrameIndex; \ |
648 | __u8 bmCapabilities; \ |
649 | __u16 wWidth; \ |
650 | __u16 wHeight; \ |
651 | __u32 dwMinBitRate; \ |
652 | __u32 dwMaxBitRate; \ |
653 | __u32 dwDefaultFrameInterval; \ |
654 | __u8 bFrameIntervalType; \ |
655 | __u32 dwBytesPerLine; \ |
656 | __u32 dwFrameInterval[n]; \ |
657 | } __attribute__ ((packed)) |
658 | |
659 | #endif /* __LINUX_USB_VIDEO_H */ |
660 | |
661 |
Definitions
- uvc_color_primaries_values
- uvc_transfer_characteristics_values
- uvc_matrix_coefficients
- uvc_descriptor_header
- uvc_header_descriptor
- uvc_input_terminal_descriptor
- uvc_output_terminal_descriptor
- uvc_camera_terminal_descriptor
- uvc_selector_unit_descriptor
- uvc_processing_unit_descriptor
- uvc_extension_unit_descriptor
- uvc_control_endpoint_descriptor
- uvc_input_header_descriptor
- uvc_output_header_descriptor
- uvc_color_matching_descriptor
- uvc_streaming_control
- uvc_format_uncompressed
- uvc_frame_uncompressed
- uvc_format_mjpeg
- uvc_frame_mjpeg
- uvc_format_framebased
Improve your Profiling and Debugging skills
Find out more