brintos

brintos / linux-shallow public Read only

0
0
Text · 16.9 KiB · 2ff0e8a Raw
602 lines · c
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 Device8 * Class Definition for Video Devices. Unless otherwise stated, comments9 * below reference relevant sections of the USB Video Class 1.1 specification10 * available at11 *12 * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip13 */14 15#ifndef __LINUX_USB_VIDEO_H16#define __LINUX_USB_VIDEO_H17 18#include <linux/types.h>19 20/* --------------------------------------------------------------------------21 * UVC constants22 */23 24/* A.2. Video Interface Subclass Codes */25#define UVC_SC_UNDEFINED				0x0026#define UVC_SC_VIDEOCONTROL				0x0127#define UVC_SC_VIDEOSTREAMING				0x0228#define UVC_SC_VIDEO_INTERFACE_COLLECTION		0x0329 30/* A.3. Video Interface Protocol Codes */31#define UVC_PC_PROTOCOL_UNDEFINED			0x0032#define UVC_PC_PROTOCOL_15				0x0133 34/* A.5. Video Class-Specific VC Interface Descriptor Subtypes */35#define UVC_VC_DESCRIPTOR_UNDEFINED			0x0036#define UVC_VC_HEADER					0x0137#define UVC_VC_INPUT_TERMINAL				0x0238#define UVC_VC_OUTPUT_TERMINAL				0x0339#define UVC_VC_SELECTOR_UNIT				0x0440#define UVC_VC_PROCESSING_UNIT				0x0541#define UVC_VC_EXTENSION_UNIT				0x0642 43/* A.6. Video Class-Specific VS Interface Descriptor Subtypes */44#define UVC_VS_UNDEFINED				0x0045#define UVC_VS_INPUT_HEADER				0x0146#define UVC_VS_OUTPUT_HEADER				0x0247#define UVC_VS_STILL_IMAGE_FRAME			0x0348#define UVC_VS_FORMAT_UNCOMPRESSED			0x0449#define UVC_VS_FRAME_UNCOMPRESSED			0x0550#define UVC_VS_FORMAT_MJPEG				0x0651#define UVC_VS_FRAME_MJPEG				0x0752#define UVC_VS_FORMAT_MPEG2TS				0x0a53#define UVC_VS_FORMAT_DV				0x0c54#define UVC_VS_COLORFORMAT				0x0d55#define UVC_VS_FORMAT_FRAME_BASED			0x1056#define UVC_VS_FRAME_FRAME_BASED			0x1157#define UVC_VS_FORMAT_STREAM_BASED			0x1258 59/* A.7. Video Class-Specific Endpoint Descriptor Subtypes */60#define UVC_EP_UNDEFINED				0x0061#define UVC_EP_GENERAL					0x0162#define UVC_EP_ENDPOINT					0x0263#define UVC_EP_INTERRUPT				0x0364 65/* A.8. Video Class-Specific Request Codes */66#define UVC_RC_UNDEFINED				0x0067#define UVC_SET_CUR					0x0168#define UVC_GET_CUR					0x8169#define UVC_GET_MIN					0x8270#define UVC_GET_MAX					0x8371#define UVC_GET_RES					0x8472#define UVC_GET_LEN					0x8573#define UVC_GET_INFO					0x8674#define UVC_GET_DEF					0x8775 76/* A.9.1. VideoControl Interface Control Selectors */77#define UVC_VC_CONTROL_UNDEFINED			0x0078#define UVC_VC_VIDEO_POWER_MODE_CONTROL			0x0179#define UVC_VC_REQUEST_ERROR_CODE_CONTROL		0x0280 81/* A.9.2. Terminal Control Selectors */82#define UVC_TE_CONTROL_UNDEFINED			0x0083 84/* A.9.3. Selector Unit Control Selectors */85#define UVC_SU_CONTROL_UNDEFINED			0x0086#define UVC_SU_INPUT_SELECT_CONTROL			0x0187 88/* A.9.4. Camera Terminal Control Selectors */89#define UVC_CT_CONTROL_UNDEFINED			0x0090#define UVC_CT_SCANNING_MODE_CONTROL			0x0191#define UVC_CT_AE_MODE_CONTROL				0x0292#define UVC_CT_AE_PRIORITY_CONTROL			0x0393#define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL		0x0494#define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL		0x0595#define UVC_CT_FOCUS_ABSOLUTE_CONTROL			0x0696#define UVC_CT_FOCUS_RELATIVE_CONTROL			0x0797#define UVC_CT_FOCUS_AUTO_CONTROL			0x0898#define UVC_CT_IRIS_ABSOLUTE_CONTROL			0x0999#define UVC_CT_IRIS_RELATIVE_CONTROL			0x0a100#define UVC_CT_ZOOM_ABSOLUTE_CONTROL			0x0b101#define UVC_CT_ZOOM_RELATIVE_CONTROL			0x0c102#define UVC_CT_PANTILT_ABSOLUTE_CONTROL			0x0d103#define UVC_CT_PANTILT_RELATIVE_CONTROL			0x0e104#define UVC_CT_ROLL_ABSOLUTE_CONTROL			0x0f105#define UVC_CT_ROLL_RELATIVE_CONTROL			0x10106#define UVC_CT_PRIVACY_CONTROL				0x11107 108/* A.9.5. Processing Unit Control Selectors */109#define UVC_PU_CONTROL_UNDEFINED			0x00110#define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL		0x01111#define UVC_PU_BRIGHTNESS_CONTROL			0x02112#define UVC_PU_CONTRAST_CONTROL				0x03113#define UVC_PU_GAIN_CONTROL				0x04114#define UVC_PU_POWER_LINE_FREQUENCY_CONTROL		0x05115#define UVC_PU_HUE_CONTROL				0x06116#define UVC_PU_SATURATION_CONTROL			0x07117#define UVC_PU_SHARPNESS_CONTROL			0x08118#define UVC_PU_GAMMA_CONTROL				0x09119#define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL	0x0a120#define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL	0x0b121#define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL		0x0c122#define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL	0x0d123#define UVC_PU_DIGITAL_MULTIPLIER_CONTROL		0x0e124#define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL		0x0f125#define UVC_PU_HUE_AUTO_CONTROL				0x10126#define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL		0x11127#define UVC_PU_ANALOG_LOCK_STATUS_CONTROL		0x12128 129/* A.9.7. VideoStreaming Interface Control Selectors */130#define UVC_VS_CONTROL_UNDEFINED			0x00131#define UVC_VS_PROBE_CONTROL				0x01132#define UVC_VS_COMMIT_CONTROL				0x02133#define UVC_VS_STILL_PROBE_CONTROL			0x03134#define UVC_VS_STILL_COMMIT_CONTROL			0x04135#define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL		0x05136#define UVC_VS_STREAM_ERROR_CODE_CONTROL		0x06137#define UVC_VS_GENERATE_KEY_FRAME_CONTROL		0x07138#define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL		0x08139#define UVC_VS_SYNC_DELAY_CONTROL			0x09140 141/* B.1. USB Terminal Types */142#define UVC_TT_VENDOR_SPECIFIC				0x0100143#define UVC_TT_STREAMING				0x0101144 145/* B.2. Input Terminal Types */146#define UVC_ITT_VENDOR_SPECIFIC				0x0200147#define UVC_ITT_CAMERA					0x0201148#define UVC_ITT_MEDIA_TRANSPORT_INPUT			0x0202149 150/* B.3. Output Terminal Types */151#define UVC_OTT_VENDOR_SPECIFIC				0x0300152#define UVC_OTT_DISPLAY					0x0301153#define UVC_OTT_MEDIA_TRANSPORT_OUTPUT			0x0302154 155/* B.4. External Terminal Types */156#define UVC_EXTERNAL_VENDOR_SPECIFIC			0x0400157#define UVC_COMPOSITE_CONNECTOR				0x0401158#define UVC_SVIDEO_CONNECTOR				0x0402159#define UVC_COMPONENT_CONNECTOR				0x0403160 161/* 2.4.2.2. Status Packet Type */162#define UVC_STATUS_TYPE_CONTROL				1163#define UVC_STATUS_TYPE_STREAMING			2164 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 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 182/* 3.9.2.6 Color Matching Descriptor Values */183enum uvc_color_primaries_values {184	UVC_COLOR_PRIMARIES_UNSPECIFIED,185	UVC_COLOR_PRIMARIES_BT_709_SRGB,186	UVC_COLOR_PRIMARIES_BT_470_2_M,187	UVC_COLOR_PRIMARIES_BT_470_2_B_G,188	UVC_COLOR_PRIMARIES_SMPTE_170M,189	UVC_COLOR_PRIMARIES_SMPTE_240M,190};191 192enum uvc_transfer_characteristics_values {193	UVC_TRANSFER_CHARACTERISTICS_UNSPECIFIED,194	UVC_TRANSFER_CHARACTERISTICS_BT_709,195	UVC_TRANSFER_CHARACTERISTICS_BT_470_2_M,196	UVC_TRANSFER_CHARACTERISTICS_BT_470_2_B_G,197	UVC_TRANSFER_CHARACTERISTICS_SMPTE_170M,198	UVC_TRANSFER_CHARACTERISTICS_SMPTE_240M,199	UVC_TRANSFER_CHARACTERISTICS_LINEAR,200	UVC_TRANSFER_CHARACTERISTICS_SRGB,201};202 203enum uvc_matrix_coefficients {204	UVC_MATRIX_COEFFICIENTS_UNSPECIFIED,205	UVC_MATRIX_COEFFICIENTS_BT_709,206	UVC_MATRIX_COEFFICIENTS_FCC,207	UVC_MATRIX_COEFFICIENTS_BT_470_2_B_G,208	UVC_MATRIX_COEFFICIENTS_SMPTE_170M,209	UVC_MATRIX_COEFFICIENTS_SMPTE_240M,210};211 212/* ------------------------------------------------------------------------213 * UVC structures214 */215 216/* All UVC descriptors have these 3 fields at the beginning */217struct uvc_descriptor_header {218	__u8  bLength;219	__u8  bDescriptorType;220	__u8  bDescriptorSubType;221} __attribute__((packed));222 223/* 3.7.2. Video Control Interface Header Descriptor */224struct uvc_header_descriptor {225	__u8   bLength;226	__u8   bDescriptorType;227	__u8   bDescriptorSubType;228	__le16 bcdUVC;229	__le16 wTotalLength;230	__le32 dwClockFrequency;231	__u8   bInCollection;232	__u8   baInterfaceNr[];233} __attribute__((__packed__));234 235#define UVC_DT_HEADER_SIZE(n)				(12+(n))236 237#define UVC_HEADER_DESCRIPTOR(n) \238	uvc_header_descriptor_##n239 240#define DECLARE_UVC_HEADER_DESCRIPTOR(n)		\241struct UVC_HEADER_DESCRIPTOR(n) {			\242	__u8   bLength;					\243	__u8   bDescriptorType;				\244	__u8   bDescriptorSubType;			\245	__le16 bcdUVC;					\246	__le16 wTotalLength;				\247	__le32 dwClockFrequency;			\248	__u8   bInCollection;				\249	__u8   baInterfaceNr[n];			\250} __attribute__ ((packed))251 252/* 3.7.2.1. Input Terminal Descriptor */253struct uvc_input_terminal_descriptor {254	__u8   bLength;255	__u8   bDescriptorType;256	__u8   bDescriptorSubType;257	__u8   bTerminalID;258	__le16 wTerminalType;259	__u8   bAssocTerminal;260	__u8   iTerminal;261} __attribute__((__packed__));262 263#define UVC_DT_INPUT_TERMINAL_SIZE			8264 265/* 3.7.2.2. Output Terminal Descriptor */266struct uvc_output_terminal_descriptor {267	__u8   bLength;268	__u8   bDescriptorType;269	__u8   bDescriptorSubType;270	__u8   bTerminalID;271	__le16 wTerminalType;272	__u8   bAssocTerminal;273	__u8   bSourceID;274	__u8   iTerminal;275} __attribute__((__packed__));276 277#define UVC_DT_OUTPUT_TERMINAL_SIZE			9278 279/* 3.7.2.3. Camera Terminal Descriptor */280struct uvc_camera_terminal_descriptor {281	__u8   bLength;282	__u8   bDescriptorType;283	__u8   bDescriptorSubType;284	__u8   bTerminalID;285	__le16 wTerminalType;286	__u8   bAssocTerminal;287	__u8   iTerminal;288	__le16 wObjectiveFocalLengthMin;289	__le16 wObjectiveFocalLengthMax;290	__le16 wOcularFocalLength;291	__u8   bControlSize;292	__u8   bmControls[3];293} __attribute__((__packed__));294 295#define UVC_DT_CAMERA_TERMINAL_SIZE(n)			(15+(n))296 297/* 3.7.2.4. Selector Unit Descriptor */298struct uvc_selector_unit_descriptor {299	__u8  bLength;300	__u8  bDescriptorType;301	__u8  bDescriptorSubType;302	__u8  bUnitID;303	__u8  bNrInPins;304	__u8  baSourceID[0];305	__u8  iSelector;306} __attribute__((__packed__));307 308#define UVC_DT_SELECTOR_UNIT_SIZE(n)			(6+(n))309 310#define UVC_SELECTOR_UNIT_DESCRIPTOR(n)	\311	uvc_selector_unit_descriptor_##n312 313#define DECLARE_UVC_SELECTOR_UNIT_DESCRIPTOR(n)	\314struct UVC_SELECTOR_UNIT_DESCRIPTOR(n) {		\315	__u8  bLength;					\316	__u8  bDescriptorType;				\317	__u8  bDescriptorSubType;			\318	__u8  bUnitID;					\319	__u8  bNrInPins;				\320	__u8  baSourceID[n];				\321	__u8  iSelector;				\322} __attribute__ ((packed))323 324/* 3.7.2.5. Processing Unit Descriptor */325struct uvc_processing_unit_descriptor {326	__u8   bLength;327	__u8   bDescriptorType;328	__u8   bDescriptorSubType;329	__u8   bUnitID;330	__u8   bSourceID;331	__le16 wMaxMultiplier;332	__u8   bControlSize;333	__u8   bmControls[2];334	__u8   iProcessing;335	__u8   bmVideoStandards;336} __attribute__((__packed__));337 338#define UVC_DT_PROCESSING_UNIT_SIZE(n)			(10+(n))339 340/* 3.7.2.6. Extension Unit Descriptor */341struct uvc_extension_unit_descriptor {342	__u8  bLength;343	__u8  bDescriptorType;344	__u8  bDescriptorSubType;345	__u8  bUnitID;346	__u8  guidExtensionCode[16];347	__u8  bNumControls;348	__u8  bNrInPins;349	__u8  baSourceID[0];350	__u8  bControlSize;351	__u8  bmControls[0];352	__u8  iExtension;353} __attribute__((__packed__));354 355#define UVC_DT_EXTENSION_UNIT_SIZE(p, n)		(24+(p)+(n))356 357#define UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \358	uvc_extension_unit_descriptor_##p_##n359 360#define DECLARE_UVC_EXTENSION_UNIT_DESCRIPTOR(p, n)	\361struct UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) {		\362	__u8  bLength;					\363	__u8  bDescriptorType;				\364	__u8  bDescriptorSubType;			\365	__u8  bUnitID;					\366	__u8  guidExtensionCode[16];			\367	__u8  bNumControls;				\368	__u8  bNrInPins;				\369	__u8  baSourceID[p];				\370	__u8  bControlSize;				\371	__u8  bmControls[n];				\372	__u8  iExtension;				\373} __attribute__ ((packed))374 375/* 3.8.2.2. Video Control Interrupt Endpoint Descriptor */376struct uvc_control_endpoint_descriptor {377	__u8   bLength;378	__u8   bDescriptorType;379	__u8   bDescriptorSubType;380	__le16 wMaxTransferSize;381} __attribute__((__packed__));382 383#define UVC_DT_CONTROL_ENDPOINT_SIZE			5384 385/* 3.9.2.1. Input Header Descriptor */386struct uvc_input_header_descriptor {387	__u8   bLength;388	__u8   bDescriptorType;389	__u8   bDescriptorSubType;390	__u8   bNumFormats;391	__le16 wTotalLength;392	__u8   bEndpointAddress;393	__u8   bmInfo;394	__u8   bTerminalLink;395	__u8   bStillCaptureMethod;396	__u8   bTriggerSupport;397	__u8   bTriggerUsage;398	__u8   bControlSize;399	__u8   bmaControls[];400} __attribute__((__packed__));401 402#define UVC_DT_INPUT_HEADER_SIZE(n, p)			(13+(n*p))403 404#define UVC_INPUT_HEADER_DESCRIPTOR(n, p) \405	uvc_input_header_descriptor_##n_##p406 407#define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n, p)	\408struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) {		\409	__u8   bLength;					\410	__u8   bDescriptorType;				\411	__u8   bDescriptorSubType;			\412	__u8   bNumFormats;				\413	__le16 wTotalLength;				\414	__u8   bEndpointAddress;			\415	__u8   bmInfo;					\416	__u8   bTerminalLink;				\417	__u8   bStillCaptureMethod;			\418	__u8   bTriggerSupport;				\419	__u8   bTriggerUsage;				\420	__u8   bControlSize;				\421	__u8   bmaControls[p][n];			\422} __attribute__ ((packed))423 424/* 3.9.2.2. Output Header Descriptor */425struct uvc_output_header_descriptor {426	__u8   bLength;427	__u8   bDescriptorType;428	__u8   bDescriptorSubType;429	__u8   bNumFormats;430	__le16 wTotalLength;431	__u8   bEndpointAddress;432	__u8   bTerminalLink;433	__u8   bControlSize;434	__u8   bmaControls[];435} __attribute__((__packed__));436 437#define UVC_DT_OUTPUT_HEADER_SIZE(n, p)			(9+(n*p))438 439#define UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \440	uvc_output_header_descriptor_##n_##p441 442#define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n, p)	\443struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) {		\444	__u8   bLength;					\445	__u8   bDescriptorType;				\446	__u8   bDescriptorSubType;			\447	__u8   bNumFormats;				\448	__le16 wTotalLength;				\449	__u8   bEndpointAddress;			\450	__u8   bTerminalLink;				\451	__u8   bControlSize;				\452	__u8   bmaControls[p][n];			\453} __attribute__ ((packed))454 455/* 3.9.2.6. Color matching descriptor */456struct uvc_color_matching_descriptor {457	__u8  bLength;458	__u8  bDescriptorType;459	__u8  bDescriptorSubType;460	__u8  bColorPrimaries;461	__u8  bTransferCharacteristics;462	__u8  bMatrixCoefficients;463} __attribute__((__packed__));464 465#define UVC_DT_COLOR_MATCHING_SIZE			6466 467/* 4.3.1.1. Video Probe and Commit Controls */468struct uvc_streaming_control {469	__u16 bmHint;470	__u8  bFormatIndex;471	__u8  bFrameIndex;472	__u32 dwFrameInterval;473	__u16 wKeyFrameRate;474	__u16 wPFrameRate;475	__u16 wCompQuality;476	__u16 wCompWindowSize;477	__u16 wDelay;478	__u32 dwMaxVideoFrameSize;479	__u32 dwMaxPayloadTransferSize;480	__u32 dwClockFrequency;481	__u8  bmFramingInfo;482	__u8  bPreferedVersion;483	__u8  bMinVersion;484	__u8  bMaxVersion;485} __attribute__((__packed__));486 487/* Uncompressed Payload - 3.1.1. Uncompressed Video Format Descriptor */488struct uvc_format_uncompressed {489	__u8  bLength;490	__u8  bDescriptorType;491	__u8  bDescriptorSubType;492	__u8  bFormatIndex;493	__u8  bNumFrameDescriptors;494	__u8  guidFormat[16];495	__u8  bBitsPerPixel;496	__u8  bDefaultFrameIndex;497	__u8  bAspectRatioX;498	__u8  bAspectRatioY;499	__u8  bmInterlaceFlags;500	__u8  bCopyProtect;501} __attribute__((__packed__));502 503#define UVC_DT_FORMAT_UNCOMPRESSED_SIZE			27504 505/* Uncompressed Payload - 3.1.2. Uncompressed Video Frame Descriptor */506struct uvc_frame_uncompressed {507	__u8   bLength;508	__u8   bDescriptorType;509	__u8   bDescriptorSubType;510	__u8   bFrameIndex;511	__u8   bmCapabilities;512	__le16 wWidth;513	__le16 wHeight;514	__le32 dwMinBitRate;515	__le32 dwMaxBitRate;516	__le32 dwMaxVideoFrameBufferSize;517	__le32 dwDefaultFrameInterval;518	__u8   bFrameIntervalType;519	__le32 dwFrameInterval[];520} __attribute__((__packed__));521 522#define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n)		(26+4*(n))523 524#define UVC_FRAME_UNCOMPRESSED(n) \525	uvc_frame_uncompressed_##n526 527#define DECLARE_UVC_FRAME_UNCOMPRESSED(n)		\528struct UVC_FRAME_UNCOMPRESSED(n) {			\529	__u8   bLength;					\530	__u8   bDescriptorType;				\531	__u8   bDescriptorSubType;			\532	__u8   bFrameIndex;				\533	__u8   bmCapabilities;				\534	__le16 wWidth;					\535	__le16 wHeight;					\536	__le32 dwMinBitRate;				\537	__le32 dwMaxBitRate;				\538	__le32 dwMaxVideoFrameBufferSize;		\539	__le32 dwDefaultFrameInterval;			\540	__u8   bFrameIntervalType;			\541	__le32 dwFrameInterval[n];			\542} __attribute__ ((packed))543 544/* MJPEG Payload - 3.1.1. MJPEG Video Format Descriptor */545struct uvc_format_mjpeg {546	__u8  bLength;547	__u8  bDescriptorType;548	__u8  bDescriptorSubType;549	__u8  bFormatIndex;550	__u8  bNumFrameDescriptors;551	__u8  bmFlags;552	__u8  bDefaultFrameIndex;553	__u8  bAspectRatioX;554	__u8  bAspectRatioY;555	__u8  bmInterlaceFlags;556	__u8  bCopyProtect;557} __attribute__((__packed__));558 559#define UVC_DT_FORMAT_MJPEG_SIZE			11560 561/* MJPEG Payload - 3.1.2. MJPEG Video Frame Descriptor */562struct uvc_frame_mjpeg {563	__u8   bLength;564	__u8   bDescriptorType;565	__u8   bDescriptorSubType;566	__u8   bFrameIndex;567	__u8   bmCapabilities;568	__le16 wWidth;569	__le16 wHeight;570	__le32 dwMinBitRate;571	__le32 dwMaxBitRate;572	__le32 dwMaxVideoFrameBufferSize;573	__le32 dwDefaultFrameInterval;574	__u8   bFrameIntervalType;575	__le32 dwFrameInterval[];576} __attribute__((__packed__));577 578#define UVC_DT_FRAME_MJPEG_SIZE(n)			(26+4*(n))579 580#define UVC_FRAME_MJPEG(n) \581	uvc_frame_mjpeg_##n582 583#define DECLARE_UVC_FRAME_MJPEG(n)			\584struct UVC_FRAME_MJPEG(n) {				\585	__u8   bLength;					\586	__u8   bDescriptorType;				\587	__u8   bDescriptorSubType;			\588	__u8   bFrameIndex;				\589	__u8   bmCapabilities;				\590	__le16 wWidth;					\591	__le16 wHeight;					\592	__le32 dwMinBitRate;				\593	__le32 dwMaxBitRate;				\594	__le32 dwMaxVideoFrameBufferSize;		\595	__le32 dwDefaultFrameInterval;			\596	__u8   bFrameIntervalType;			\597	__le32 dwFrameInterval[n];			\598} __attribute__ ((packed))599 600#endif /* __LINUX_USB_VIDEO_H */601 602