linux/include/uapi/linux/usb/video.h
<<
>>
Prefs
   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