Sample Code

Windows Driver Samples/ USBView sample application/ C++/ usbviddesc.h/

/*++

Copyright (c) 2002-2003 Microsoft Corporation

Module Name:

    USBVIDDESC.H

Abstract:

    This is a header file for USB Video Class Specific descriptors which are not yet in
    a standard system header file.

Environment:

    user mode

Revision History:

    11-20-2002 : created
    03-28-2003 : major updates to support latest UVC specs

--*/

#pragma pack(push, 1)

/*****************************************************************************
 D E F I N E S
*****************************************************************************/

//global version for USB Video Class spec version
#define BCDVDC     0x0083

//
// USB Device Class Definition for Video Devices v8.c
// Appendix A.  Video Device Class Codes
//

// A.1 Video Interface Class Code
//TBD Normally would be in USB100.h but not official yet
#define USB_DEVICE_CLASS_VIDEO             0x0E
#define USB_DEVICE_CLASS_VIDEO_PRERELEASE  0xFF
//CC_VIDEO in spec.  The rest of the codes will be USB_VIDEO plus text from spec codes

// A.2  Video Interface Subclass Codes
//
#define USB_VIDEO_SC_UNDEFINED                   0x00
#define USB_VIDEO_SC_VIDEOCONTROL                0x01
#define USB_VIDEO_SC_VIDEOSTREAMING              0x02
#define USB_VIDEO_SC_VIDEO_INTERFACE_COLLECTION  0x03

// A.3  Video Interface Protocol Codes
//
#define USB_VIDEO_PC_PROTOCOL_UNDEFINED     0x00

// A.4  Video Class-Specific Descriptor Types
//
#define USB_VIDEO_CS_UNDEFINED              0x20
#define USB_VIDEO_CS_DEVICE                 0x21
#define USB_VIDEO_CS_CONFIGURATION          0x22
#define USB_VIDEO_CS_STRING                 0x23
#define USB_VIDEO_CS_INTERFACE              0x24
#define USB_VIDEO_CS_ENDPOINT               0x25

// A.5  Video Class-Specific VC (Video Control) Interface Descriptor Subtypes
//
#define USB_VIDEO_VC_DESCRIPTOR_UNDEFINED   0x00
#define USB_VIDEO_VC_HEADER                 0x01
#define USB_VIDEO_VC_INPUT_TERMINAL         0x02
#define USB_VIDEO_VC_OUTPUT_TERMINAL        0x03
#define USB_VIDEO_VC_SELECTOR_UNIT          0x04
#define USB_VIDEO_VC_PROCESSING_UNIT        0x05
#define USB_VIDEO_VC_EXTENSION_UNIT         0x06

// A.6  Video Class-Specific VS (Video Streaming) Interface Descriptor Subtypes
//
#define USB_VIDEO_VS_UNDEFINED              0x00
#define USB_VIDEO_VS_INPUT_HEADER           0x01
#define USB_VIDEO_VS_OUTPUT_HEADER          0x02
#define USB_VIDEO_VS_STILL_IMAGE_FRAME      0x03
#define USB_VIDEO_VS_FORMAT_UNCOMPRESSED    0x04
#define USB_VIDEO_VS_FRAME_UNCOMPRESSED     0x05
#define USB_VIDEO_VS_FORMAT_MJPEG           0x06
#define USB_VIDEO_VS_FRAME_MJPEG            0x07
#define USB_VIDEO_VS_FORMAT_MPEG1           0x08
#define USB_VIDEO_VS_FORMAT_MPEG2PS         0x09
#define USB_VIDEO_VS_FORMAT_MPEG2TS         0x0A
#define USB_VIDEO_VS_FORMAT_MPEG4SL         0x0B
#define USB_VIDEO_VS_FORMAT_DV              0x0C
#define USB_VIDEO_VS_COLORFORMAT            0x0D
#define USB_VIDEO_VS_FORMAT_VENDOR          0x0E
#define USB_VIDEO_VS_FRAME_VENDOR           0x0F

// A.7 Video Class-Specific Endpoint Descriptor Subtypes
//
#define USB_VIDEO_EP_UNDEFINED              0x00
#define USB_VIDEO_EP_GENERAL                0x01
#define USB_VIDEO_EP_ENDPOINT               0x02
#define USB_VIDEO_EP_INTERRUPT              0x03

//
// Below definitions only necessary if testing requests
//
// A.8 Video Class-Specific Request Codes
//
#define USB_VIDEO_RC_UNDEFINED  0x00
#define USB_VIDEO_SET_CUR       0x01
#define USB_VIDEO_GET_CUR       0x81
#define USB_VIDEO_GET_MIN       0x82
#define USB_VIDEO_GET_MAX       0x83
#define USB_VIDEO_GET_RES       0x84
#define USB_VIDEO_GET_LEN       0x85
#define USB_VIDEO_GET_INFO      0x86
#define USB_VIDEO_GET_DEF       0x87

// A.9 Control Selector Codes
// A.9.1 VideoControl Interface Control Selectors
#define USB_VIDEO_VC_UNDEFINED_CONTROL            0x00
#define USB_VIDEO_VC_VIDEO_POWER_MODE_CONTROL     0x01
#define USB_VIDEO_VC_REQUEST_ERROR_CODE_CONTROL   0x02
#define USB_VIDEO_VC_INDICATE_HOST_CLOCK_CONTROL  0x03

//A.9.2 Terminal Control Selectors
//
#define USB_VIDEO_TE_CONTROL_UNDEFINED  0x00

//A.9.3 Selector Unit Control Selectors
//
#define USB_VIDEO_SU_CONTROL_UNDEFINED     0x00
#define USB_VIDEO_SU_INPUT_SELECT_CONTROL  0x01

//A.9.4 Camera Terminal Control Selectors
//
#define USB_VIDEO_CT_CONTROL_UNDEFINED               0x00
#define USB_VIDEO_CT_SCANNING_MODE_CONTROL           0x01
#define USB_VIDEO_CT_AE_MODE_CONTROL                 0x02
#define USB_VIDEO_CT_AE_PRIORITY_CONTROL             0x03
#define USB_VIDEO_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL  0x04
#define USB_VIDEO_CT_EXPOSURE_TIME_RELATIVE_CONTROL  0x05
#define USB_VIDEO_CT_FOCUS_ABSOLUTE_CONTROL          0x06
#define USB_VIDEO_CT_FOCUS_RELATIVE_CONTROL          0x07
#define USB_VIDEO_CT_FOCUS_AUTO_CONTROL              0x08
#define USB_VIDEO_CT_IRIS_ABSOLUTE_CONTROL           0x09
#define USB_VIDEO_CT_IRIS_RELATIVE_CONTROL           0x0A
#define USB_VIDEO_CT_ZOOM_ABSOLUTE_CONTROL           0x0B
#define USB_VIDEO_CT_ZOOM_RELATIVE_CONTROL           0x0C
#define USB_VIDEO_CT_PANTILT_ABSOLUTE_CONTROL        0x0D
#define USB_VIDEO_CT_PANTILT_RELATIVE_CONTROL        0x0E
#define USB_VIDEO_CT_ROLL_ABSOLUTE_CONTROL           0x0F
#define USB_VIDEO_CT_ROLL_RELATIVE_CONTROL           0x10

//A.9.5 Processing Unit Control Selectors
//
#define USB_VIDEO_PU_CONTROL_UNDEFINED                       0x04
#define USB_VIDEO_PU_BACKLIGHT_COMPENSATION_CONTROL          0x01
#define USB_VIDEO_PU_BRIGHTNESS_CONTROL                      0x02
#define USB_VIDEO_PU_CONTRAST_CONTROL                        0x03
#define USB_VIDEO_PU_GAIN_CONTROL                            0x04
#define USB_VIDEO_PU_POWER_LINE_FREQUENCY_CONTROL            0x05
#define USB_VIDEO_PU_HUE_CONTROL                             0x06
#define USB_VIDEO_PU_SATURATION_CONTROL                      0x07
#define USB_VIDEO_PU_SHARPNESS_CONTROL                       0x08
#define USB_VIDEO_PU_GAMMA_CONTROL                           0x09
#define USB_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_CONTROL       0x0A
#define USB_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL  0x0B
#define USB_VIDEO_PU_WHITE_BALANCE_COMPONENT_CONTROL         0x0C
#define USB_VIDEO_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL    0x0D
#define USB_VIDEO_PU_DIGITAL_MULTIPLIER_CONTROL              0x0E
#define USB_VIDEO_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL        0x0F
#define USB_VIDEO_PU_HUE_AUTO_CONTROL                        0x10

//A.9.6 Extension Unit Control Selectors
//
#define USB_VIDEO_XU_CONTROL_UNDEFINED  0x00

//A.9.7 VideoStreaming Interface Control Selectors
//
#define USB_VIDEO_VS_CONTROL_UNDEFINED             0x00
#define USB_VIDEO_VS_PROBE_CONTROL                 0x01
#define USB_VIDEO_VS_COMMIT_CONTROL                0x02
#define USB_VIDEO_VS_STILL_PROBE_CONTROL           0x03
#define USB_VIDEO_VS_STILL_COMMIT_CONTROL          0x04
#define USB_VIDEO_VS_STILL_IMAGE_TRIGGER_CONTROL   0x05
#define USB_VIDEO_VS_STREAM_ERROR_CODE_CONTROL     0x06
#define USB_VIDEO_VS_GENERATE_KEY_FRAME_CONTROL    0x07
#define USB_VIDEO_VS_UPDATE_FRAME_SEGMENT_CONTROL  0x08
#define USB_VIDEO_VS_SYNCH_DELAY_CONTROL           0x09

#define TapeControls       0
#define TransportModes     1
#define CameraControls     2
#define ProcessorControls  3
#define InHeaderControls   4

/*****************************************************************************
 T Y P E D E F S
*****************************************************************************/


/*****************************************************************************
 USB Device Class Definition for Video Devices v8.b
*****************************************************************************/

typedef struct _USB_VIDEO_COMMON_DESCRIPTOR {
    UCHAR  bLength;
    UCHAR  bDescriptorType;
    UCHAR  bDescriptorSubtype;
} USB_VIDEO_COMMON_DESCRIPTOR,
*PUSB_VIDEO_COMMON_DESCRIPTOR;

// 3.6.2 Class-Specific VC (Video Control) Interface Descriptor
//
typedef struct _USB_VIDEO_VC_INTERFACE_HEADER_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    USHORT   bcdVDC;
    USHORT   wTotalLength;
    ULONG32  dwClockFrequency;
    UCHAR    bInCollection;
//    UCHAR    baInterfaceNr;          // variable length (0 minimum)
} USB_VIDEO_VC_INTERFACE_HEADER_DESCRIPTOR,
*PUSB_VIDEO_VC_INTERFACE_HEADER_DESCRIPTOR;

// 3.6.2.1 Input Terminal Descriptor
//
typedef struct _USB_VIDEO_INPUT_TERMINAL_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bTerminalID;
    USHORT   wTerminalType;
    UCHAR    bAssocTerminal;
    UCHAR    iTerminal;
} USB_VIDEO_INPUT_TERMINAL_DESCRIPTOR,
*PUSB_VIDEO_INPUT_TERMINAL_DESCRIPTOR;

// 3.6.2.2 Output Terminal Descriptor
//
typedef struct _USB_VIDEO_OUTPUT_TERMINAL_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bTerminalID;
    USHORT   wTerminalType;
    UCHAR    bAssocTerminal;
    UCHAR    bSourceID;
    UCHAR    iTerminal;
} USB_VIDEO_OUTPUT_TERMINAL_DESCRIPTOR,
*PUSB_VIDEO_OUTPUT_TERMINAL_DESCRIPTOR;

// 3.6.2.3 Camera Unit Descriptor
//
typedef struct _USB_VIDEO_CAMERA_TERMINAL_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bTerminalID;
    USHORT   wTerminalType;
    UCHAR    bAssocTerminal;
    UCHAR    iTerminal;
    USHORT   wObjectiveFocalLengthMin;
    USHORT   wObjectiveFocalLengthMax;
    USHORT   wOcularFocalLength;
    UCHAR    bControlSize;
//    UCHAR    bmControls;               // variable length (0 min, 3 max)
} USB_VIDEO_CAMERA_TERMINAL_DESCRIPTOR,
*PUSB_VIDEO_CAMERA_TERMINAL_DESCRIPTOR;

// 3.6.2.4 Selector Unit Descriptor
//
typedef struct _USB_VIDEO_SELECTOR_UNIT_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bUnitID;
    UCHAR    bNrInPins;
    UCHAR    baSourceID;               // variable length (1 minimum)
    UCHAR    iSelector;
} USB_VIDEO_SELECTOR_UNIT_DESCRIPTOR,
*PUSB_VIDEO_SELECTOR_UNIT_DESCRIPTOR;

// 3.6.2.5 Processing Unit Descriptor
//
typedef struct _USB_VIDEO_PROCESSING_UNIT_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bUnitID;
    UCHAR    bSourceID;
    USHORT   wMaxMultiplier;
    UCHAR    bControlSize;
//    UCHAR    bmControls;             // variable length (0 minimum)
    UCHAR    iProcessing;
} USB_VIDEO_PROCESSING_UNIT_DESCRIPTOR,
*PUSB_VIDEO_PROCESSING_UNIT_DESCRIPTOR;

// 3.6.2.6 Extension Unit Descriptor
//
typedef struct _USB_VIDEO_EXTENSION_UNIT_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bUnitID;
    GUID     guidExtensionCode;
    UCHAR    bNumControls;
    UCHAR    bNrInPins;
    UCHAR    baSourceID;               // variable length (1 minimum)
//    UCHAR    bControlSize;
//    UCHAR    bmControls;             // variable length (0 minimum)
//    UCHAR    iExtension;
} USB_VIDEO_EXTENSION_UNIT_DESCRIPTOR,
*PUSB_VIDEO_EXTENSION_UNIT_DESCRIPTOR;

// 3.7.2.2 Class-Specific VC Interrupt EndPoint Descriptor
//
typedef struct _USB_VIDEO_VC_INTERRUPT_ENDPOINT_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubType;
    USHORT   wMaxTransferSize;
} USB_VIDEO_VC_INTERRUPT_ENDPOINT_DESCRIPTOR,
*PUSB_VIDEO_VC_INTERRUPT_ENDPOINT_DESCRIPTOR;
// 3.8.2.1 Class-Specific Input Header Descriptor
//
typedef struct _USB_VIDEO_INPUT_HEADER_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bNumFormats;
    USHORT   wTotalLength;
    UCHAR    bEndpointAddress;
    UCHAR    bmInfo;
    UCHAR    bTerminalLink;
    UCHAR    bStillCaptureMethod;
    UCHAR    bTriggerSupport;
    UCHAR    bTriggerUsage;
    UCHAR    bControlSize;
//    UCHAR    bmaControls;            // variable length (0 minimum)
} USB_VIDEO_INPUT_HEADER_DESCRIPTOR,
*PUSB_VIDEO_INPUT_HEADER_DESCRIPTOR;

// 3.8.2.2 Class-Specific Output Header Descriptor
//
typedef struct _USB_VIDEO_OUTPUT_HEADER_DESCRIPTOR {
    UCHAR  bLength;
    UCHAR  bDescriptorType;
    UCHAR  bDescriptorSubtype;
    UCHAR  bNumFormats;
    USHORT wTotalLength;
    UCHAR  bEndpointAddress;
    UCHAR  bTerminalLink;
} USB_VIDEO_OUTPUT_HEADER_DESCRIPTOR,
*PUSB_VIDEO_OUTPUT_HEADER_DESCRIPTOR;

// 3.8.2.3  Payload Format Descriptors
//Payload Format Descriptor  Document
//Uncompressed Video         DWGVideo Payload Uncompressed 0.xx.doc
//MJPEG Video                DWGVideo Payload MJPEG Format Ver0.xx.doc
//MPEG1 System Stream        DWGVideo Payload MPEG1 System Stream, MPEG2-PS Format Ver0.xx.doc
//MPEG2 PS                   DWGVideo Payload MPEG1 System Stream, MPEG2-PS Format Ver0.xx.doc
//MPEG-2 TS                  DWGVideo Payload MPEG2TS Format Ver0.xx.doc
//MPEG-4 SL                  DWGVideo Payload MPEG4 SL format Ver0.xx.doc
//DV                         DWGVideo Payload DV Format Ver0.xx.doc

// 3.8.2.4  Video Frame Descriptor
//
//Video Frame Descriptor     Document
//Uncompressed               DWGVideo Payload Uncompressed 0.xx.doc
//MJPEG                      DWGVideo Payload MJPEG Format Ver0.xx.doc

// 3.8.2.5  Still Image Frame Descriptor
//
typedef struct _VIDEO_STILL_IMAGE {
    USHORT  wWidth;
    USHORT  wHeight;
} VIDEO_STILL_IMAGE,
*PVIDEO_STILL_IMAGE;

typedef struct _USB_VIDEO_STILL_IMAGE_FRAME_DESCRIPTOR {
    UCHAR              bLength;
    UCHAR              bDescriptorType;
    UCHAR              bDescriptorSubtype;
    UCHAR              bEndpointAddress;
    UCHAR              bNumImageSizePatterns;
    VIDEO_STILL_IMAGE  dwStillImage;             // variable count
    UCHAR              bNumCompressionPattern;
    UCHAR              bCompression;             // variable count
} USB_VIDEO_STILL_IMAGE_FRAME_DESCRIPTOR,
*PUSB_VIDEO_STILL_IMAGE_FRAME_DESCRIPTOR;

// 3.8.2.6  Color Matching Descriptor
//
typedef struct _USB_VIDEO_COLOR_MATCHING_DESCRIPTOR {
    UCHAR  bLength;
    UCHAR  bDescriptorType;
    UCHAR  bDescriptorSubtype;
    UCHAR  bColorPrimaries;
    UCHAR  bTransferCharacteristics;
    UCHAR  bMatrixCoefficients;
} USB_VIDEO_COLOR_MATCHING_DESCRIPTOR,
*PUSB_VIDEO_COLOR_MATCHING_DESCRIPTOR;
/*
// 3.9.1  Class-specific VC Interrupt Endpoint Descriptor
typedef struct _USB_VIDEO_VS_ENDPOINT_DESCRIPTOR {
    UCHAR  bLength;
    UCHAR  bDescriptorType;
    UCHAR  bDescriptorSubType;
    USHORT  wMaxTransferSize;
} USB_VIDEO_VS_ENDPOINT_DESCRIPTOR,
*PUSB_VIDEO_VS_ENDPOINT_DESCRIPTOR;
*/
//
// USB Device Class Definition for Video Devices: Uncompressed Payload 0.8a Draft Revision
//

// 3.1.1    Uncompressed Video Format Descriptor
//
typedef struct _USB_VIDEO_UNCOMPRESSED_FORMAT_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFormatIndex;
    UCHAR    bNumFrameDescriptors;
    GUID     guidFormat;
    UCHAR    bBitsPerPixel;
    UCHAR    bDefaultFrameIndex;
    UCHAR    bAspectRatioX;
    UCHAR    bAspectRatioY;
    UCHAR    bmInterlaceFlags;
    UCHAR    bCopyProtect;
} USB_VIDEO_UNCOMPRESSED_FORMAT_DESCRIPTOR,
*PUSB_VIDEO_UNCOMPRESSED_FORMAT_DESCRIPTOR;

// 3.1.2    Uncompressed Video Frame Descriptor Common
//
typedef struct _USB_VIDEO_UNCOMPRESSED_FRAME_DESCRIPTOR_COMMON {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFrameIndex;
    UCHAR    bmCapabilities;
    USHORT   wWidth;
    USHORT   wHeight;
    ULONG32  dwMinBitRate;
    ULONG32  dwMaxBitRate;
    ULONG32  dwMaxVideoFrameBufferSize;
    ULONG32  dwDefaultFrameInterval;
    UCHAR    bFrameIntervalType;
} USB_VIDEO_UNCOMPRESSED_FRAME_DESCRIPTOR_COMMON,
*PUSB_VIDEO_UNCOMPRESSED_FRAME_DESCRIPTOR_COMMON;

// 3.1.2    Uncompressed Video Frame Descriptor - Continuous
//
typedef struct _USB_VIDEO_UNCOMPRESSED_FRAME_DESCRIPTOR_CONTINUOUS {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFrameIndex;
    UCHAR    bmCapabilities;
    USHORT   wWidth;
    USHORT   wHeight;
    ULONG32  dwMinBitRate;
    ULONG32  dwMaxBitRate;
    ULONG32  dwMaxVideoFrameBufferSize;
    ULONG32  dwDefaultFrameInterval;
    UCHAR    bFrameIntervalType;
    ULONG32  dwMinFrameInterval;
    ULONG32  dwMaxFrameInterval;
    ULONG32  dwFrameIntervalStep;
} USB_VIDEO_UNCOMPRESSED_FRAME_DESCRIPTOR_CONTINUOUS,
*PUSB_VIDEO_UNCOMPRESSED_FRAME_DESCRIPTOR_CONTINUOUS;

// 3.1.2    Uncompressed Video Frame Descriptor - Discrete
//
typedef struct _USB_VIDEO_UNCOMPRESSED_FRAME_DESCRIPTOR_DISCRETE {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFrameIndex;
    UCHAR    bmCapabilities;
    USHORT   wWidth;
    USHORT   wHeight;
    ULONG32  dwMinBitRate;
    ULONG32  dwMaxBitRate;
    ULONG32  dwMaxVideoFrameBufferSize;
    ULONG32  dwDefaultFrameInterval;
    UCHAR    bFrameIntervalType;
    ULONG32  dwFrameInterval;                    // variable count
} USB_VIDEO_UNCOMPRESSED_FRAME_DESCRIPTOR_DISCRETE,
*PUSB_VIDEO_UNCOMPRESSED_FRAME_DESCRIPTOR_DISCRETE;

//
// USB Device Class Definition for Video Devices: Motion-JPEG Payload 0.8a Draft Revision
// 3.1.1    MJPEG Video Format Descriptor
//
typedef struct _USB_VIDEO_MJPEG_FORMAT_DESCRIPTOR {
    UCHAR  bLength;
    UCHAR  bDescriptorType;
    UCHAR  bDescriptorSubtype;
    UCHAR  bFormatIndex;
    UCHAR  bNumFrameDescriptors;
    UCHAR  bmFlags;
    UCHAR  bDefaultFrameIndex;
    UCHAR  bAspectRatioX;
    UCHAR  bAspectRatioY;
    UCHAR  bmInterlaceFlags;
    UCHAR  bCopyProtect;
} USB_VIDEO_MJPEG_FORMAT_DESCRIPTOR,
*PUSB_VIDEO_MJPEG_FORMAT_DESCRIPTOR;

// 3.1.2    MJPEG Video Frame Descriptors Common
//
typedef struct _USB_VIDEO_MJPEG_FRAME_DESCRIPTOR_COMMON {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFrameIndex;
    UCHAR    bmCapabilities;
    USHORT   wWidth;
    USHORT   wHeight;
    ULONG32  dwMinBitRate;
    ULONG32  dwMaxBitRate;
    ULONG32  dwMaxVideoFrameBufferSize;
    ULONG32  dwDefaultFrameInterval;
    UCHAR    bFrameIntervalType;
} USB_VIDEO_MJPEG_FRAME_DESCRIPTOR_COMMON,
*PUSB_VIDEO_MJPEG_FRAME_DESCRIPTOR_COMMON;

// 3.1.2    MJPEG Video Frame Descriptors - Continuous
//
typedef struct _USB_VIDEO_MJPEG_FRAME_DESCRIPTOR_CONTINUOUS {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFrameIndex;
    UCHAR    bmCapabilities;
    USHORT   wWidth;
    USHORT   wHeight;
    ULONG32  dwMinBitRate;
    ULONG32  dwMaxBitRate;
    ULONG32  dwMaxVideoFrameBufferSize;
    ULONG32  dwDefaultFrameInterval;
    UCHAR    bFrameIntervalType;
    ULONG32  dwMinFrameInterval;
    ULONG32  dwMaxFrameInterval;
    ULONG32  dwFrameIntervalStep;
} USB_VIDEO_MJPEG_FRAME_DESCRIPTOR_CONTINUOUS,
*PUSB_VIDEO_MJPEG_FRAME_DESCRIPTOR_CONTINUOUS;

// 3.1.2    MJPEG Video Frame Descriptors -Discrete
//
typedef struct _USB_VIDEO_MJPEG_FRAME_DESCRIPTOR_DISCRETE {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFrameIndex;
    UCHAR    bmCapabilities;
    USHORT   wWidth;
    USHORT   wHeight;
    ULONG32  dwMinBitRate;
    ULONG32  dwMaxBitRate;
    ULONG32  dwMaxVideoFrameBufferSize;
    ULONG32  dwDefaultFrameInterval;
    UCHAR    bFrameIntervalType;
    ULONG32  dwFrameInterval;                    // variable count
} USB_VIDEO_MJPEG_FRAME_DESCRIPTOR_DISCRETE,
*PUSB_VIDEO_MJPEG_FRAME_DESCRIPTOR_DISCRETE;

//
// USB Device Class Definition for Video Devices: MPEG1-SS, MPEG2-PS Payload 0.8a Draft Revision
// 3.1.1    MPEG1 System Stream Format Descriptor
//
typedef struct _USB_VIDEO_MPEG1_SS_FORMAT_DESCRIPTOR {
    UCHAR   bLength;
    UCHAR   bDescriptorType;
    UCHAR   bDescriptorSubtype;
    UCHAR   bFormatIndex;
    USHORT  wPacketLength;
    USHORT  wPackLength;
    UCHAR   bPackdataType;
} USB_VIDEO_MPEG1_SS_FORMAT_DESCRIPTOR,
*PUSB_VIDEO_MPEG1_SS_FORMAT_DESCRIPTOR;

// 3.1.2    MPEG2 PS Format Descriptor
//
typedef struct _USB_VIDEO_MPEG2_PS_FORMAT_DESCRIPTOR {
    UCHAR   bLength;
    UCHAR   bDescriptorType;
    UCHAR   bDescriptorSubtype;
    UCHAR   bFormatIndex;
    USHORT  wPacketLength;
    USHORT  wPackLength;
    UCHAR   bPackdataType;
} USB_VIDEO_MPEG2_PS_FORMAT_DESCRIPTOR,
*PUSB_VIDEO_MPEG2_PS_FORMAT_DESCRIPTOR;

//
// USB Device Class Definition for Video Devices: MPEG-2 TS Payload 0.8a Draft Revision
// 3.1.1    MPEG-2 TS Format Descriptor
//
typedef struct _USB_VIDEO_MPEG2_TS_FORMAT_DESCRIPTOR {
    UCHAR   bLength;
    UCHAR   bDescriptorType;
    UCHAR   bDescriptorSubtype;
    UCHAR   bFormatIndex;
    UCHAR   bDataOffset;
    UCHAR   bPacketLength;
    UCHAR   bStrideLength;
} USB_VIDEO_MPEG2_TS_FORMAT_DESCRIPTOR,
*PUSB_VIDEO_MPEG2_TS_FORMAT_DESCRIPTOR;

//
// USB Device Class Definition for Video Devices: MPEG4 SL Payload 0.8a Draft Revision
// 3.1.1    MPEG4 SL Format Descriptor
//
typedef struct _USB_VIDEO_MPEG4_SL_FORMAT_DESCRIPTOR {
    UCHAR   bLength;
    UCHAR   bDescriptorType;
    UCHAR   bDescriptorSubtype;
    UCHAR   bFormatIndex;
    USHORT  wPacketLength;
} USB_VIDEO_MPEG4_SL_FORMAT_DESCRIPTOR,
*PUSB_VIDEO_MPEG4_SL_FORMAT_DESCRIPTOR;

// USB Device Class Definition for Video Devices: DV Payload 0.8a Draft Revision
// 3.1.1    DV Format Descriptor
typedef struct _USB_VIDEO_DV_FORMAT_DESCRIPTOR {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFormatIndex;
    ULONG32  dwMaxVideoFrameBufferSize;
    UCHAR    bFormatType;
} USB_VIDEO_DV_FORMAT_DESCRIPTOR,
*PUSB_VIDEO_DV_FORMAT_DESCRIPTOR;

// USB Device Class Definition for Video Devices: Vendor Payload 0.8c Draft Revision
// 3.1.1    Vendor Video Format Descriptor
typedef struct _USB_VIDEO_VENDOR_VIDEO_FORMAT_DESCRIPTOR {
    UCHAR  bLength;
    UCHAR  bDescriptorType;
    UCHAR  bDescriptorSubtype;
    UCHAR  bFormatIndex;
    UCHAR  bNumFrameDescriptors;
    GUID   guidMajorFormat;
    GUID   guidSubFormat;
    GUID   guidSpecifier;
    UCHAR  bPayloadClass;
    UCHAR  bDefaultFrameIndex;
    UCHAR  bCopyProtect;
} USB_VIDEO_VENDOR_VIDEO_FORMAT_DESCRIPTOR,
*PUSB_VIDEO_VENDOR_VIDEO_FORMAT_DESCRIPTOR;

// USB Device Class Definition for Video Devices: Vendor Payload 0.8c Draft Revision
// 3.1.2    Vendor Video Frame Descriptor
typedef struct _USB_VIDEO_VENDOR_VIDEO_FRAME_DESCRIPTOR_COMMON {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFrameIndex;
    UCHAR    bmCapabilities;
    USHORT   wWidth;
    USHORT   wHeight;
    ULONG32  dwMinBitRate;
    ULONG32  dwMaxBitRate;
    ULONG32  dwMaxVideoFrameBufferSize;
    ULONG32  dwDefaultFrameInterval;
    UCHAR    bFrameIntervalType;
} USB_VIDEO_VENDOR_VIDEO_FRAME_DESCRIPTOR_COMMON,
*PUSB_VIDEO_VENDOR_VIDEO_FRAME_DESCRIPTOR_COMMON;

typedef struct _USB_VIDEO_VENDOR_VIDEO_FRAME_DESCRIPTOR_CONTINUOUS {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFrameIndex;
    UCHAR    bmCapabilities;
    USHORT   wWidth;
    USHORT   wHeight;
    ULONG32  dwMinBitRate;
    ULONG32  dwMaxBitRate;
    ULONG32  dwMaxVideoFrameBufferSize;
    ULONG32  dwDefaultFrameInterval;
    UCHAR    bFrameIntervalType;
    ULONG32  dwMinFrameInterval;
    ULONG32  dwMaxFrameInterval;
    ULONG32  dwFrameIntervalStep;
} USB_VIDEO_VENDOR_VIDEO_FRAME_DESCRIPTOR_CONTINUOUS,
*PUSB_VIDEO_VENDOR_VIDEO_FRAME_DESCRIPTOR_CONTINUOUS;

typedef struct _USB_VIDEO_VENDOR_VIDEO_FRAME_DESCRIPTOR_DISCRETE {
    UCHAR    bLength;
    UCHAR    bDescriptorType;
    UCHAR    bDescriptorSubtype;
    UCHAR    bFrameIndex;
    UCHAR    bmCapabilities;
    USHORT   wWidth;
    USHORT   wHeight;
    ULONG32  dwMinBitRate;
    ULONG32  dwMaxBitRate;
    ULONG32  dwMaxVideoFrameBufferSize;
    ULONG32  dwDefaultFrameInterval;
    UCHAR    bFrameIntervalType;
    ULONG32  dwFrameInterval;                    // variable count
} USB_VIDEO_VENDOR_VIDEO_FRAME_DESCRIPTOR_DISCRETE,
*PUSB_VIDEO_VENDOR_VIDEO_FRAME_DESCRIPTOR_DISCRETE;

// USB Device Class Definition for Video Devices: Media Transport Terminal 0.8a Draft Revision
// 3.1  Media Transport Input Descriptor
typedef struct _USB_VIDEO_MEDIA_TRANSPORT_INPUT_DESCRIPTOR {
    UCHAR   bLength;
    UCHAR   bDescriptorType;
    UCHAR   bDescriptorSubtype;
    UCHAR   bTerminalID;
    USHORT  wTerminalType;
    UCHAR   bAssocTerminal;
    UCHAR   iTerminal;
    UCHAR   bControlSize;
    UCHAR   bmControls;                          // variable size (min 1)
//    UCHAR   bTransportModeSize;                // variable count (min 0)
//    UCHAR   bmTransportModes;                  // variable count (min 0)
} USB_VIDEO_MEDIA_TRANSPORT_INPUT_DESCRIPTOR,
*PUSB_VIDEO_MEDIA_TRANSPORT_INPUT_DESCRIPTOR;

// 3.2  Media Transport Output Descriptor
typedef struct _USB_VIDEO_MEDIA_TRANSPORT_OUTPUT_DESCRIPTOR {
    UCHAR   bLength;
    UCHAR   bDescriptorType;
    UCHAR   bDescriptorSubtype;
    UCHAR   bTerminalID;
    USHORT  wTerminalType;
    UCHAR   bAssocTerminal;
    UCHAR   bSourceID;
    UCHAR   iTerminal;
    UCHAR   bControlSize;
    UCHAR   bmControls;                          // variable size (min 1)
//    UCHAR   bTransportModeSize;                // variable count (min 0)
//    UCHAR   bmTransportModes;                  // variable count (min 0)
} USB_VIDEO_MEDIA_TRANSPORT_OUTPUT_DESCRIPTOR,
*PUSB_VIDEO_MEDIA_TRANSPORT_OUTPUT_DESCRIPTOR;

#pragma pack(pop)

Our Services

  • What our customers say about us?

© 2011-2024 All Rights Reserved. Joya Systems. 4425 South Mopac Building II Suite 101 Austin, TX 78735 Tel: 800-DEV-KERNEL

Privacy Policy. Terms of use. Valid XHTML & CSS