blob: 8b688e1aeb6b581df2bb403e7cac6be0533cdf89 [file] [log] [blame]
Elliott Hughes180edef2023-11-02 00:08:05 +00001/*
2 * This file is auto-generated. Modifications will be lost.
3 *
4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5 * for more information.
6 */
Ben Cheng655a7c02013-10-16 16:09:24 -07007#ifndef __LINUX_USB_VIDEO_H
8#define __LINUX_USB_VIDEO_H
9#include <linux/types.h>
10#define UVC_SC_UNDEFINED 0x00
Ben Cheng655a7c02013-10-16 16:09:24 -070011#define UVC_SC_VIDEOCONTROL 0x01
12#define UVC_SC_VIDEOSTREAMING 0x02
13#define UVC_SC_VIDEO_INTERFACE_COLLECTION 0x03
14#define UVC_PC_PROTOCOL_UNDEFINED 0x00
Christopher Ferris106b3a82016-08-24 12:15:38 -070015#define UVC_PC_PROTOCOL_15 0x01
Ben Cheng655a7c02013-10-16 16:09:24 -070016#define UVC_VC_DESCRIPTOR_UNDEFINED 0x00
17#define UVC_VC_HEADER 0x01
18#define UVC_VC_INPUT_TERMINAL 0x02
Christopher Ferris106b3a82016-08-24 12:15:38 -070019#define UVC_VC_OUTPUT_TERMINAL 0x03
Ben Cheng655a7c02013-10-16 16:09:24 -070020#define UVC_VC_SELECTOR_UNIT 0x04
21#define UVC_VC_PROCESSING_UNIT 0x05
22#define UVC_VC_EXTENSION_UNIT 0x06
Christopher Ferris106b3a82016-08-24 12:15:38 -070023#define UVC_VS_UNDEFINED 0x00
Ben Cheng655a7c02013-10-16 16:09:24 -070024#define UVC_VS_INPUT_HEADER 0x01
25#define UVC_VS_OUTPUT_HEADER 0x02
26#define UVC_VS_STILL_IMAGE_FRAME 0x03
Christopher Ferris106b3a82016-08-24 12:15:38 -070027#define UVC_VS_FORMAT_UNCOMPRESSED 0x04
Ben Cheng655a7c02013-10-16 16:09:24 -070028#define UVC_VS_FRAME_UNCOMPRESSED 0x05
29#define UVC_VS_FORMAT_MJPEG 0x06
30#define UVC_VS_FRAME_MJPEG 0x07
Christopher Ferris106b3a82016-08-24 12:15:38 -070031#define UVC_VS_FORMAT_MPEG2TS 0x0a
Ben Cheng655a7c02013-10-16 16:09:24 -070032#define UVC_VS_FORMAT_DV 0x0c
33#define UVC_VS_COLORFORMAT 0x0d
34#define UVC_VS_FORMAT_FRAME_BASED 0x10
Christopher Ferris106b3a82016-08-24 12:15:38 -070035#define UVC_VS_FRAME_FRAME_BASED 0x11
Ben Cheng655a7c02013-10-16 16:09:24 -070036#define UVC_VS_FORMAT_STREAM_BASED 0x12
37#define UVC_EP_UNDEFINED 0x00
38#define UVC_EP_GENERAL 0x01
Christopher Ferris106b3a82016-08-24 12:15:38 -070039#define UVC_EP_ENDPOINT 0x02
Ben Cheng655a7c02013-10-16 16:09:24 -070040#define UVC_EP_INTERRUPT 0x03
41#define UVC_RC_UNDEFINED 0x00
42#define UVC_SET_CUR 0x01
Christopher Ferris106b3a82016-08-24 12:15:38 -070043#define UVC_GET_CUR 0x81
Ben Cheng655a7c02013-10-16 16:09:24 -070044#define UVC_GET_MIN 0x82
45#define UVC_GET_MAX 0x83
46#define UVC_GET_RES 0x84
Christopher Ferris106b3a82016-08-24 12:15:38 -070047#define UVC_GET_LEN 0x85
Ben Cheng655a7c02013-10-16 16:09:24 -070048#define UVC_GET_INFO 0x86
49#define UVC_GET_DEF 0x87
50#define UVC_VC_CONTROL_UNDEFINED 0x00
Christopher Ferris106b3a82016-08-24 12:15:38 -070051#define UVC_VC_VIDEO_POWER_MODE_CONTROL 0x01
Ben Cheng655a7c02013-10-16 16:09:24 -070052#define UVC_VC_REQUEST_ERROR_CODE_CONTROL 0x02
53#define UVC_TE_CONTROL_UNDEFINED 0x00
54#define UVC_SU_CONTROL_UNDEFINED 0x00
Christopher Ferris106b3a82016-08-24 12:15:38 -070055#define UVC_SU_INPUT_SELECT_CONTROL 0x01
Ben Cheng655a7c02013-10-16 16:09:24 -070056#define UVC_CT_CONTROL_UNDEFINED 0x00
57#define UVC_CT_SCANNING_MODE_CONTROL 0x01
58#define UVC_CT_AE_MODE_CONTROL 0x02
Christopher Ferris106b3a82016-08-24 12:15:38 -070059#define UVC_CT_AE_PRIORITY_CONTROL 0x03
Ben Cheng655a7c02013-10-16 16:09:24 -070060#define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04
61#define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05
62#define UVC_CT_FOCUS_ABSOLUTE_CONTROL 0x06
Christopher Ferris106b3a82016-08-24 12:15:38 -070063#define UVC_CT_FOCUS_RELATIVE_CONTROL 0x07
Ben Cheng655a7c02013-10-16 16:09:24 -070064#define UVC_CT_FOCUS_AUTO_CONTROL 0x08
65#define UVC_CT_IRIS_ABSOLUTE_CONTROL 0x09
66#define UVC_CT_IRIS_RELATIVE_CONTROL 0x0a
Christopher Ferris106b3a82016-08-24 12:15:38 -070067#define UVC_CT_ZOOM_ABSOLUTE_CONTROL 0x0b
Ben Cheng655a7c02013-10-16 16:09:24 -070068#define UVC_CT_ZOOM_RELATIVE_CONTROL 0x0c
69#define UVC_CT_PANTILT_ABSOLUTE_CONTROL 0x0d
70#define UVC_CT_PANTILT_RELATIVE_CONTROL 0x0e
Christopher Ferris106b3a82016-08-24 12:15:38 -070071#define UVC_CT_ROLL_ABSOLUTE_CONTROL 0x0f
Ben Cheng655a7c02013-10-16 16:09:24 -070072#define UVC_CT_ROLL_RELATIVE_CONTROL 0x10
73#define UVC_CT_PRIVACY_CONTROL 0x11
74#define UVC_PU_CONTROL_UNDEFINED 0x00
Christopher Ferris106b3a82016-08-24 12:15:38 -070075#define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01
Ben Cheng655a7c02013-10-16 16:09:24 -070076#define UVC_PU_BRIGHTNESS_CONTROL 0x02
77#define UVC_PU_CONTRAST_CONTROL 0x03
78#define UVC_PU_GAIN_CONTROL 0x04
Christopher Ferris106b3a82016-08-24 12:15:38 -070079#define UVC_PU_POWER_LINE_FREQUENCY_CONTROL 0x05
Ben Cheng655a7c02013-10-16 16:09:24 -070080#define UVC_PU_HUE_CONTROL 0x06
81#define UVC_PU_SATURATION_CONTROL 0x07
82#define UVC_PU_SHARPNESS_CONTROL 0x08
Christopher Ferris106b3a82016-08-24 12:15:38 -070083#define UVC_PU_GAMMA_CONTROL 0x09
Ben Cheng655a7c02013-10-16 16:09:24 -070084#define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0a
85#define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0b
86#define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0c
Christopher Ferris106b3a82016-08-24 12:15:38 -070087#define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0d
Ben Cheng655a7c02013-10-16 16:09:24 -070088#define UVC_PU_DIGITAL_MULTIPLIER_CONTROL 0x0e
89#define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0f
90#define UVC_PU_HUE_AUTO_CONTROL 0x10
Christopher Ferris106b3a82016-08-24 12:15:38 -070091#define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11
Ben Cheng655a7c02013-10-16 16:09:24 -070092#define UVC_PU_ANALOG_LOCK_STATUS_CONTROL 0x12
93#define UVC_VS_CONTROL_UNDEFINED 0x00
94#define UVC_VS_PROBE_CONTROL 0x01
Christopher Ferris106b3a82016-08-24 12:15:38 -070095#define UVC_VS_COMMIT_CONTROL 0x02
Ben Cheng655a7c02013-10-16 16:09:24 -070096#define UVC_VS_STILL_PROBE_CONTROL 0x03
97#define UVC_VS_STILL_COMMIT_CONTROL 0x04
98#define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05
Christopher Ferris106b3a82016-08-24 12:15:38 -070099#define UVC_VS_STREAM_ERROR_CODE_CONTROL 0x06
Ben Cheng655a7c02013-10-16 16:09:24 -0700100#define UVC_VS_GENERATE_KEY_FRAME_CONTROL 0x07
101#define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08
102#define UVC_VS_SYNC_DELAY_CONTROL 0x09
Christopher Ferris106b3a82016-08-24 12:15:38 -0700103#define UVC_TT_VENDOR_SPECIFIC 0x0100
Ben Cheng655a7c02013-10-16 16:09:24 -0700104#define UVC_TT_STREAMING 0x0101
105#define UVC_ITT_VENDOR_SPECIFIC 0x0200
106#define UVC_ITT_CAMERA 0x0201
Christopher Ferris106b3a82016-08-24 12:15:38 -0700107#define UVC_ITT_MEDIA_TRANSPORT_INPUT 0x0202
Ben Cheng655a7c02013-10-16 16:09:24 -0700108#define UVC_OTT_VENDOR_SPECIFIC 0x0300
109#define UVC_OTT_DISPLAY 0x0301
110#define UVC_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302
Christopher Ferris106b3a82016-08-24 12:15:38 -0700111#define UVC_EXTERNAL_VENDOR_SPECIFIC 0x0400
Ben Cheng655a7c02013-10-16 16:09:24 -0700112#define UVC_COMPOSITE_CONNECTOR 0x0401
113#define UVC_SVIDEO_CONNECTOR 0x0402
114#define UVC_COMPONENT_CONNECTOR 0x0403
Christopher Ferris106b3a82016-08-24 12:15:38 -0700115#define UVC_STATUS_TYPE_CONTROL 1
Ben Cheng655a7c02013-10-16 16:09:24 -0700116#define UVC_STATUS_TYPE_STREAMING 2
117#define UVC_STREAM_EOH (1 << 7)
118#define UVC_STREAM_ERR (1 << 6)
Christopher Ferris106b3a82016-08-24 12:15:38 -0700119#define UVC_STREAM_STI (1 << 5)
Ben Cheng655a7c02013-10-16 16:09:24 -0700120#define UVC_STREAM_RES (1 << 4)
121#define UVC_STREAM_SCR (1 << 3)
122#define UVC_STREAM_PTS (1 << 2)
Christopher Ferris106b3a82016-08-24 12:15:38 -0700123#define UVC_STREAM_EOF (1 << 1)
Ben Cheng655a7c02013-10-16 16:09:24 -0700124#define UVC_STREAM_FID (1 << 0)
125#define UVC_CONTROL_CAP_GET (1 << 0)
126#define UVC_CONTROL_CAP_SET (1 << 1)
Christopher Ferris106b3a82016-08-24 12:15:38 -0700127#define UVC_CONTROL_CAP_DISABLED (1 << 2)
Ben Cheng655a7c02013-10-16 16:09:24 -0700128#define UVC_CONTROL_CAP_AUTOUPDATE (1 << 3)
129#define UVC_CONTROL_CAP_ASYNCHRONOUS (1 << 4)
Christopher Ferrisb7cef6d2023-05-09 19:04:15 +0000130enum uvc_color_primaries_values {
131 UVC_COLOR_PRIMARIES_UNSPECIFIED,
132 UVC_COLOR_PRIMARIES_BT_709_SRGB,
133 UVC_COLOR_PRIMARIES_BT_470_2_M,
134 UVC_COLOR_PRIMARIES_BT_470_2_B_G,
135 UVC_COLOR_PRIMARIES_SMPTE_170M,
136 UVC_COLOR_PRIMARIES_SMPTE_240M,
137};
138enum uvc_transfer_characteristics_values {
139 UVC_TRANSFER_CHARACTERISTICS_UNSPECIFIED,
140 UVC_TRANSFER_CHARACTERISTICS_BT_709,
141 UVC_TRANSFER_CHARACTERISTICS_BT_470_2_M,
142 UVC_TRANSFER_CHARACTERISTICS_BT_470_2_B_G,
143 UVC_TRANSFER_CHARACTERISTICS_SMPTE_170M,
144 UVC_TRANSFER_CHARACTERISTICS_SMPTE_240M,
145 UVC_TRANSFER_CHARACTERISTICS_LINEAR,
146 UVC_TRANSFER_CHARACTERISTICS_SRGB,
147};
148enum uvc_matrix_coefficients {
149 UVC_MATRIX_COEFFICIENTS_UNSPECIFIED,
150 UVC_MATRIX_COEFFICIENTS_BT_709,
151 UVC_MATRIX_COEFFICIENTS_FCC,
152 UVC_MATRIX_COEFFICIENTS_BT_470_2_B_G,
153 UVC_MATRIX_COEFFICIENTS_SMPTE_170M,
154 UVC_MATRIX_COEFFICIENTS_SMPTE_240M,
155};
Ben Cheng655a7c02013-10-16 16:09:24 -0700156struct uvc_descriptor_header {
Christopher Ferris106b3a82016-08-24 12:15:38 -0700157 __u8 bLength;
Tao Baod7db5942015-01-28 10:07:51 -0800158 __u8 bDescriptorType;
159 __u8 bDescriptorSubType;
Ben Cheng655a7c02013-10-16 16:09:24 -0700160} __attribute__((packed));
Christopher Ferris106b3a82016-08-24 12:15:38 -0700161struct uvc_header_descriptor {
Tao Baod7db5942015-01-28 10:07:51 -0800162 __u8 bLength;
163 __u8 bDescriptorType;
164 __u8 bDescriptorSubType;
Christopher Ferris86a48372019-01-10 14:14:59 -0800165 __le16 bcdUVC;
166 __le16 wTotalLength;
167 __le32 dwClockFrequency;
Tao Baod7db5942015-01-28 10:07:51 -0800168 __u8 bInCollection;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700169 __u8 baInterfaceNr[];
Ben Cheng655a7c02013-10-16 16:09:24 -0700170} __attribute__((__packed__));
Tao Baod7db5942015-01-28 10:07:51 -0800171#define UVC_DT_HEADER_SIZE(n) (12 + (n))
172#define UVC_HEADER_DESCRIPTOR(n) uvc_header_descriptor_ ##n
Christopher Ferris86a48372019-01-10 14:14:59 -0800173#define DECLARE_UVC_HEADER_DESCRIPTOR(n) struct UVC_HEADER_DESCRIPTOR(n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __le16 bcdUVC; __le16 wTotalLength; __le32 dwClockFrequency; __u8 bInCollection; __u8 baInterfaceNr[n]; \
Tao Baod7db5942015-01-28 10:07:51 -0800174} __attribute__((packed))
Ben Cheng655a7c02013-10-16 16:09:24 -0700175struct uvc_input_terminal_descriptor {
Tao Baod7db5942015-01-28 10:07:51 -0800176 __u8 bLength;
177 __u8 bDescriptorType;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700178 __u8 bDescriptorSubType;
Tao Baod7db5942015-01-28 10:07:51 -0800179 __u8 bTerminalID;
Christopher Ferris86a48372019-01-10 14:14:59 -0800180 __le16 wTerminalType;
Tao Baod7db5942015-01-28 10:07:51 -0800181 __u8 bAssocTerminal;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700182 __u8 iTerminal;
Ben Cheng655a7c02013-10-16 16:09:24 -0700183} __attribute__((__packed__));
184#define UVC_DT_INPUT_TERMINAL_SIZE 8
185struct uvc_output_terminal_descriptor {
Christopher Ferris106b3a82016-08-24 12:15:38 -0700186 __u8 bLength;
Tao Baod7db5942015-01-28 10:07:51 -0800187 __u8 bDescriptorType;
188 __u8 bDescriptorSubType;
189 __u8 bTerminalID;
Christopher Ferris86a48372019-01-10 14:14:59 -0800190 __le16 wTerminalType;
Tao Baod7db5942015-01-28 10:07:51 -0800191 __u8 bAssocTerminal;
192 __u8 bSourceID;
193 __u8 iTerminal;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700194} __attribute__((__packed__));
Ben Cheng655a7c02013-10-16 16:09:24 -0700195#define UVC_DT_OUTPUT_TERMINAL_SIZE 9
196struct uvc_camera_terminal_descriptor {
Tao Baod7db5942015-01-28 10:07:51 -0800197 __u8 bLength;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700198 __u8 bDescriptorType;
Tao Baod7db5942015-01-28 10:07:51 -0800199 __u8 bDescriptorSubType;
200 __u8 bTerminalID;
Christopher Ferris86a48372019-01-10 14:14:59 -0800201 __le16 wTerminalType;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700202 __u8 bAssocTerminal;
Tao Baod7db5942015-01-28 10:07:51 -0800203 __u8 iTerminal;
Christopher Ferris86a48372019-01-10 14:14:59 -0800204 __le16 wObjectiveFocalLengthMin;
205 __le16 wObjectiveFocalLengthMax;
206 __le16 wOcularFocalLength;
Tao Baod7db5942015-01-28 10:07:51 -0800207 __u8 bControlSize;
208 __u8 bmControls[3];
Ben Cheng655a7c02013-10-16 16:09:24 -0700209} __attribute__((__packed__));
Christopher Ferris106b3a82016-08-24 12:15:38 -0700210#define UVC_DT_CAMERA_TERMINAL_SIZE(n) (15 + (n))
Ben Cheng655a7c02013-10-16 16:09:24 -0700211struct uvc_selector_unit_descriptor {
Tao Baod7db5942015-01-28 10:07:51 -0800212 __u8 bLength;
213 __u8 bDescriptorType;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700214 __u8 bDescriptorSubType;
Tao Baod7db5942015-01-28 10:07:51 -0800215 __u8 bUnitID;
216 __u8 bNrInPins;
217 __u8 baSourceID[0];
Christopher Ferris106b3a82016-08-24 12:15:38 -0700218 __u8 iSelector;
Ben Cheng655a7c02013-10-16 16:09:24 -0700219} __attribute__((__packed__));
Tao Baod7db5942015-01-28 10:07:51 -0800220#define UVC_DT_SELECTOR_UNIT_SIZE(n) (6 + (n))
221#define UVC_SELECTOR_UNIT_DESCRIPTOR(n) uvc_selector_unit_descriptor_ ##n
222#define DECLARE_UVC_SELECTOR_UNIT_DESCRIPTOR(n) struct UVC_SELECTOR_UNIT_DESCRIPTOR(n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bUnitID; __u8 bNrInPins; __u8 baSourceID[n]; __u8 iSelector; \
223} __attribute__((packed))
Ben Cheng655a7c02013-10-16 16:09:24 -0700224struct uvc_processing_unit_descriptor {
Tao Baod7db5942015-01-28 10:07:51 -0800225 __u8 bLength;
226 __u8 bDescriptorType;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700227 __u8 bDescriptorSubType;
Tao Baod7db5942015-01-28 10:07:51 -0800228 __u8 bUnitID;
229 __u8 bSourceID;
Christopher Ferris86a48372019-01-10 14:14:59 -0800230 __le16 wMaxMultiplier;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700231 __u8 bControlSize;
Tao Baod7db5942015-01-28 10:07:51 -0800232 __u8 bmControls[2];
233 __u8 iProcessing;
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +0000234 __u8 bmVideoStandards;
Ben Cheng655a7c02013-10-16 16:09:24 -0700235} __attribute__((__packed__));
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +0000236#define UVC_DT_PROCESSING_UNIT_SIZE(n) (10 + (n))
Ben Cheng655a7c02013-10-16 16:09:24 -0700237struct uvc_extension_unit_descriptor {
Tao Baod7db5942015-01-28 10:07:51 -0800238 __u8 bLength;
239 __u8 bDescriptorType;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700240 __u8 bDescriptorSubType;
Tao Baod7db5942015-01-28 10:07:51 -0800241 __u8 bUnitID;
242 __u8 guidExtensionCode[16];
243 __u8 bNumControls;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700244 __u8 bNrInPins;
Tao Baod7db5942015-01-28 10:07:51 -0800245 __u8 baSourceID[0];
246 __u8 bControlSize;
247 __u8 bmControls[0];
Christopher Ferris106b3a82016-08-24 12:15:38 -0700248 __u8 iExtension;
Ben Cheng655a7c02013-10-16 16:09:24 -0700249} __attribute__((__packed__));
Tao Baod7db5942015-01-28 10:07:51 -0800250#define UVC_DT_EXTENSION_UNIT_SIZE(p,n) (24 + (p) + (n))
251#define UVC_EXTENSION_UNIT_DESCRIPTOR(p,n) uvc_extension_unit_descriptor_ ##p_ ##n
252#define DECLARE_UVC_EXTENSION_UNIT_DESCRIPTOR(p,n) struct UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bUnitID; __u8 guidExtensionCode[16]; __u8 bNumControls; __u8 bNrInPins; __u8 baSourceID[p]; __u8 bControlSize; __u8 bmControls[n]; __u8 iExtension; \
253} __attribute__((packed))
Ben Cheng655a7c02013-10-16 16:09:24 -0700254struct uvc_control_endpoint_descriptor {
Tao Baod7db5942015-01-28 10:07:51 -0800255 __u8 bLength;
256 __u8 bDescriptorType;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700257 __u8 bDescriptorSubType;
Christopher Ferris86a48372019-01-10 14:14:59 -0800258 __le16 wMaxTransferSize;
Ben Cheng655a7c02013-10-16 16:09:24 -0700259} __attribute__((__packed__));
260#define UVC_DT_CONTROL_ENDPOINT_SIZE 5
Christopher Ferris106b3a82016-08-24 12:15:38 -0700261struct uvc_input_header_descriptor {
Tao Baod7db5942015-01-28 10:07:51 -0800262 __u8 bLength;
263 __u8 bDescriptorType;
264 __u8 bDescriptorSubType;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700265 __u8 bNumFormats;
Christopher Ferris86a48372019-01-10 14:14:59 -0800266 __le16 wTotalLength;
Tao Baod7db5942015-01-28 10:07:51 -0800267 __u8 bEndpointAddress;
268 __u8 bmInfo;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700269 __u8 bTerminalLink;
Tao Baod7db5942015-01-28 10:07:51 -0800270 __u8 bStillCaptureMethod;
271 __u8 bTriggerSupport;
272 __u8 bTriggerUsage;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700273 __u8 bControlSize;
Tao Baod7db5942015-01-28 10:07:51 -0800274 __u8 bmaControls[];
Ben Cheng655a7c02013-10-16 16:09:24 -0700275} __attribute__((__packed__));
Tao Baod7db5942015-01-28 10:07:51 -0800276#define UVC_DT_INPUT_HEADER_SIZE(n,p) (13 + (n * p))
Christopher Ferris106b3a82016-08-24 12:15:38 -0700277#define UVC_INPUT_HEADER_DESCRIPTOR(n,p) uvc_input_header_descriptor_ ##n_ ##p
Christopher Ferris86a48372019-01-10 14:14:59 -0800278#define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n,p) struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bNumFormats; __le16 wTotalLength; __u8 bEndpointAddress; __u8 bmInfo; __u8 bTerminalLink; __u8 bStillCaptureMethod; __u8 bTriggerSupport; __u8 bTriggerUsage; __u8 bControlSize; __u8 bmaControls[p][n]; \
Tao Baod7db5942015-01-28 10:07:51 -0800279} __attribute__((packed))
Ben Cheng655a7c02013-10-16 16:09:24 -0700280struct uvc_output_header_descriptor {
Tao Baod7db5942015-01-28 10:07:51 -0800281 __u8 bLength;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700282 __u8 bDescriptorType;
Tao Baod7db5942015-01-28 10:07:51 -0800283 __u8 bDescriptorSubType;
284 __u8 bNumFormats;
Christopher Ferris86a48372019-01-10 14:14:59 -0800285 __le16 wTotalLength;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700286 __u8 bEndpointAddress;
Tao Baod7db5942015-01-28 10:07:51 -0800287 __u8 bTerminalLink;
288 __u8 bControlSize;
289 __u8 bmaControls[];
Christopher Ferris106b3a82016-08-24 12:15:38 -0700290} __attribute__((__packed__));
Tao Baod7db5942015-01-28 10:07:51 -0800291#define UVC_DT_OUTPUT_HEADER_SIZE(n,p) (9 + (n * p))
292#define UVC_OUTPUT_HEADER_DESCRIPTOR(n,p) uvc_output_header_descriptor_ ##n_ ##p
Christopher Ferris86a48372019-01-10 14:14:59 -0800293#define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n,p) struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bNumFormats; __le16 wTotalLength; __u8 bEndpointAddress; __u8 bTerminalLink; __u8 bControlSize; __u8 bmaControls[p][n]; \
Tao Baod7db5942015-01-28 10:07:51 -0800294} __attribute__((packed))
Christopher Ferris106b3a82016-08-24 12:15:38 -0700295struct uvc_color_matching_descriptor {
Tao Baod7db5942015-01-28 10:07:51 -0800296 __u8 bLength;
297 __u8 bDescriptorType;
298 __u8 bDescriptorSubType;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700299 __u8 bColorPrimaries;
Tao Baod7db5942015-01-28 10:07:51 -0800300 __u8 bTransferCharacteristics;
301 __u8 bMatrixCoefficients;
Ben Cheng655a7c02013-10-16 16:09:24 -0700302} __attribute__((__packed__));
Christopher Ferris106b3a82016-08-24 12:15:38 -0700303#define UVC_DT_COLOR_MATCHING_SIZE 6
Ben Cheng655a7c02013-10-16 16:09:24 -0700304struct uvc_streaming_control {
Tao Baod7db5942015-01-28 10:07:51 -0800305 __u16 bmHint;
306 __u8 bFormatIndex;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700307 __u8 bFrameIndex;
Tao Baod7db5942015-01-28 10:07:51 -0800308 __u32 dwFrameInterval;
309 __u16 wKeyFrameRate;
310 __u16 wPFrameRate;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700311 __u16 wCompQuality;
Tao Baod7db5942015-01-28 10:07:51 -0800312 __u16 wCompWindowSize;
313 __u16 wDelay;
314 __u32 dwMaxVideoFrameSize;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700315 __u32 dwMaxPayloadTransferSize;
Tao Baod7db5942015-01-28 10:07:51 -0800316 __u32 dwClockFrequency;
317 __u8 bmFramingInfo;
318 __u8 bPreferedVersion;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700319 __u8 bMinVersion;
Tao Baod7db5942015-01-28 10:07:51 -0800320 __u8 bMaxVersion;
Ben Cheng655a7c02013-10-16 16:09:24 -0700321} __attribute__((__packed__));
322struct uvc_format_uncompressed {
Christopher Ferris106b3a82016-08-24 12:15:38 -0700323 __u8 bLength;
Tao Baod7db5942015-01-28 10:07:51 -0800324 __u8 bDescriptorType;
325 __u8 bDescriptorSubType;
326 __u8 bFormatIndex;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700327 __u8 bNumFrameDescriptors;
Tao Baod7db5942015-01-28 10:07:51 -0800328 __u8 guidFormat[16];
329 __u8 bBitsPerPixel;
330 __u8 bDefaultFrameIndex;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700331 __u8 bAspectRatioX;
Tao Baod7db5942015-01-28 10:07:51 -0800332 __u8 bAspectRatioY;
Christopher Ferris8b7fdc92023-02-21 13:36:32 -0800333 __u8 bmInterlaceFlags;
Tao Baod7db5942015-01-28 10:07:51 -0800334 __u8 bCopyProtect;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700335} __attribute__((__packed__));
Ben Cheng655a7c02013-10-16 16:09:24 -0700336#define UVC_DT_FORMAT_UNCOMPRESSED_SIZE 27
337struct uvc_frame_uncompressed {
Tao Baod7db5942015-01-28 10:07:51 -0800338 __u8 bLength;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700339 __u8 bDescriptorType;
Tao Baod7db5942015-01-28 10:07:51 -0800340 __u8 bDescriptorSubType;
341 __u8 bFrameIndex;
342 __u8 bmCapabilities;
Christopher Ferris86a48372019-01-10 14:14:59 -0800343 __le16 wWidth;
344 __le16 wHeight;
345 __le32 dwMinBitRate;
346 __le32 dwMaxBitRate;
347 __le32 dwMaxVideoFrameBufferSize;
348 __le32 dwDefaultFrameInterval;
Tao Baod7db5942015-01-28 10:07:51 -0800349 __u8 bFrameIntervalType;
Christopher Ferris86a48372019-01-10 14:14:59 -0800350 __le32 dwFrameInterval[];
Christopher Ferris106b3a82016-08-24 12:15:38 -0700351} __attribute__((__packed__));
Tao Baod7db5942015-01-28 10:07:51 -0800352#define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n) (26 + 4 * (n))
353#define UVC_FRAME_UNCOMPRESSED(n) uvc_frame_uncompressed_ ##n
Christopher Ferris86a48372019-01-10 14:14:59 -0800354#define DECLARE_UVC_FRAME_UNCOMPRESSED(n) struct UVC_FRAME_UNCOMPRESSED(n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bFrameIndex; __u8 bmCapabilities; __le16 wWidth; __le16 wHeight; __le32 dwMinBitRate; __le32 dwMaxBitRate; __le32 dwMaxVideoFrameBufferSize; __le32 dwDefaultFrameInterval; __u8 bFrameIntervalType; __le32 dwFrameInterval[n]; \
Tao Baod7db5942015-01-28 10:07:51 -0800355} __attribute__((packed))
Christopher Ferris106b3a82016-08-24 12:15:38 -0700356struct uvc_format_mjpeg {
Tao Baod7db5942015-01-28 10:07:51 -0800357 __u8 bLength;
358 __u8 bDescriptorType;
359 __u8 bDescriptorSubType;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700360 __u8 bFormatIndex;
Tao Baod7db5942015-01-28 10:07:51 -0800361 __u8 bNumFrameDescriptors;
362 __u8 bmFlags;
363 __u8 bDefaultFrameIndex;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700364 __u8 bAspectRatioX;
Tao Baod7db5942015-01-28 10:07:51 -0800365 __u8 bAspectRatioY;
Christopher Ferris8b7fdc92023-02-21 13:36:32 -0800366 __u8 bmInterlaceFlags;
Tao Baod7db5942015-01-28 10:07:51 -0800367 __u8 bCopyProtect;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700368} __attribute__((__packed__));
Ben Cheng655a7c02013-10-16 16:09:24 -0700369#define UVC_DT_FORMAT_MJPEG_SIZE 11
370struct uvc_frame_mjpeg {
Tao Baod7db5942015-01-28 10:07:51 -0800371 __u8 bLength;
Christopher Ferris106b3a82016-08-24 12:15:38 -0700372 __u8 bDescriptorType;
Tao Baod7db5942015-01-28 10:07:51 -0800373 __u8 bDescriptorSubType;
374 __u8 bFrameIndex;
375 __u8 bmCapabilities;
Christopher Ferris86a48372019-01-10 14:14:59 -0800376 __le16 wWidth;
377 __le16 wHeight;
378 __le32 dwMinBitRate;
379 __le32 dwMaxBitRate;
380 __le32 dwMaxVideoFrameBufferSize;
381 __le32 dwDefaultFrameInterval;
Tao Baod7db5942015-01-28 10:07:51 -0800382 __u8 bFrameIntervalType;
Christopher Ferris86a48372019-01-10 14:14:59 -0800383 __le32 dwFrameInterval[];
Christopher Ferris106b3a82016-08-24 12:15:38 -0700384} __attribute__((__packed__));
Tao Baod7db5942015-01-28 10:07:51 -0800385#define UVC_DT_FRAME_MJPEG_SIZE(n) (26 + 4 * (n))
386#define UVC_FRAME_MJPEG(n) uvc_frame_mjpeg_ ##n
Christopher Ferris86a48372019-01-10 14:14:59 -0800387#define DECLARE_UVC_FRAME_MJPEG(n) struct UVC_FRAME_MJPEG(n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bFrameIndex; __u8 bmCapabilities; __le16 wWidth; __le16 wHeight; __le32 dwMinBitRate; __le32 dwMaxBitRate; __le32 dwMaxVideoFrameBufferSize; __le32 dwDefaultFrameInterval; __u8 bFrameIntervalType; __le32 dwFrameInterval[n]; \
Tao Baod7db5942015-01-28 10:07:51 -0800388} __attribute__((packed))
Christopher Ferris106b3a82016-08-24 12:15:38 -0700389#endif