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