g1g2hardwarechecker/USB/uvcdesc.h

1107 lines
36 KiB
C
Raw Normal View History

2024-01-08 10:06:47 +00:00
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1999 - 2008
//
// File: uvcdesc.h
//
// This header is from the UVC 1.1 USBVideo driver
//
//--------------------------------------------------------------------------
#ifndef ___UVCDESC_H___
#define ___UVCDESC_H___
// USB Video Device Class Code
#define USB_DEVICE_CLASS_VIDEO 0x0E
// Video sub-classes
#define SUBCLASS_UNDEFINED 0x00
#define VIDEO_SUBCLASS_CONTROL 0x01
#define VIDEO_SUBCLASS_STREAMING 0x02
// Video Class-Specific Descriptor Types
#define CS_UNDEFINED 0x20
#define CS_DEVICE 0x21
#define CS_CONFIGURATION 0x22
#define CS_STRING 0x23
#define CS_INTERFACE 0x24
#define CS_ENDPOINT 0x25
// Video Class-Specific VC Interface Descriptor Subtypes
#define VC_HEADER 0x01
#define INPUT_TERMINAL 0x02
#define OUTPUT_TERMINAL 0x03
#define SELECTOR_UNIT 0x04
#define PROCESSING_UNIT 0x05
#define EXTENSION_UNIT 0x06
#define MAX_TYPE_UNIT 0x07
// Video Class-Specific VS Interface Descriptor Subtypes
#define VS_DESCRIPTOR_UNDEFINED 0x00
#define VS_INPUT_HEADER 0x01
#define VS_OUTPUT_HEADER 0x02
#define VS_STILL_IMAGE_FRAME 0x03
#define VS_FORMAT_UNCOMPRESSED 0x04
#define VS_FRAME_UNCOMPRESSED 0x05
#define VS_FORMAT_MJPEG 0x06
#define VS_FRAME_MJPEG 0x07
#define VS_FORMAT_MPEG1 0x08
#define VS_FORMAT_MPEG2PS 0x09
#define VS_FORMAT_MPEG2TS 0x0A
#define VS_FORMAT_MPEG4SL 0x0B
#define VS_FORMAT_DV 0x0C
#define VS_COLORFORMAT 0x0D
#define VS_FORMAT_VENDOR 0x0E
#define VS_FRAME_VENDOR 0x0F
// Video Class-Specific Endpoint Descriptor Subtypes
#define EP_UNDEFINED 0x00
#define EP_GENERAL 0x01
#define EP_ENDPOINT 0x02
#define EP_INTERRUPT 0x03
// Video Class-Specific Terminal Types
#define TERMINAL_TYPE_VENDOR_SPECIFIC 0x0100
#define TERMINAL_TYPE_USB_STREAMING 0x0101
#define TERMINAL_TYPE_INPUT_MASK 0x0200
#define TERMINAL_TYPE_INPUT_VENDOR_SPECIFIC 0x0200
#define TERMINAL_TYPE_INPUT_CAMERA 0x0201
#define TERMINAL_TYPE_INPUT_MEDIA_TRANSPORT 0x0202
#define TERMINAL_TYPE_OUTPUT_MASK 0x0300
#define TERMINAL_TYPE_OUTPUT_VENDOR_SPECIFIC 0x0300
#define TERMINAL_TYPE_OUTPUT_DISPLAY 0x0301
#define TERMINAL_TYPE_OUTPUT_MEDIA_TRANSPORT 0x0302
#define TERMINAL_TYPE_EXTERNAL_VENDOR_SPECIFIC 0x0400
#define TERMINAL_TYPE_EXTERNAL_UNDEFINED 0x0400
#define TERMINAL_TYPE_EXTERNAL_COMPOSITE 0x0401
#define TERMINAL_TYPE_EXTERNAL_SVIDEO 0x0402
#define TERMINAL_TYPE_EXTERNAL_COMPONENT 0x0403
// Controls for error checking only
#define DEV_SPECIFIC_CONTROL 0x1001
// Map KSNODE_TYPE GUIDs to Indexes
#define NODE_TYPE_NONE 0
#define NODE_TYPE_STREAMING 1
#define NODE_TYPE_INPUT_TERMINAL 2
#define NODE_TYPE_OUTPUT_TERMINAL 3
#define NODE_TYPE_SELECTOR 4
#define NODE_TYPE_PROCESSING 5
#define NODE_TYPE_CAMERA_TERMINAL 6
#define NODE_TYPE_INPUT_MTT 7
#define NODE_TYPE_OUTPUT_MTT 8
#define NODE_TYPE_DEV_SPEC 9
#define NODE_TYPE_MAX 9
// USB bmRequestType values
#define USBVIDEO_INTERFACE_SET 0x21
#define USBVIDEO_ENDPOINT_SET 0x22
#define USBVIDEO_INTERFACE_GET 0xA1
#define USBVIDEO_ENDPOINT_GET 0xA2
// Video Class-specific specific requests
#define CLASS_SPECIFIC_GET_MASK 0x80
#define RC_UNDEFINED 0x00
#define SET_CUR 0x01
#define GET_CUR 0x81
#define GET_MIN 0x82
#define GET_MAX 0x83
#define GET_RES 0x84
#define GET_LEN 0x85
#define GET_INFO 0x86
#define GET_DEF 0x87
// Power Mode Control constants
#define POWER_MODE_CONTROL_FULL 0x0
#define POWER_MODE_CONTROL_DEV_DEPENDENT 0x1
// Video Class-specific Processing Unit Controls
#define PU_CONTROL_UNDEFINED 0x00
#define PU_BACKLIGHT_COMPENSATION_CONTROL 0x01
#define PU_BRIGHTNESS_CONTROL 0x02
#define PU_CONTRAST_CONTROL 0x03
#define PU_GAIN_CONTROL 0x04
#define PU_POWER_LINE_FREQUENCY_CONTROL 0x05
#define PU_HUE_CONTROL 0x06
#define PU_SATURATION_CONTROL 0x07
#define PU_SHARPNESS_CONTROL 0x08
#define PU_GAMMA_CONTROL 0x09
#define PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0A
#define PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0B
#define PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0C
#define PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0D
#define PU_DIGITAL_MULTIPLIER_CONTROL 0x0E
#define PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0F
#define PU_HUE_AUTO_CONTROL 0x10
#define PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11
#define PU_ANALOG_LOCK_STATUS_CONTROL 0x12
// Video Class-specific Camera Terminal Controls
#define CT_CONTROL_UNDEFINED 0x00
#define CT_SCANNING_MODE_CONTROL 0x01
#define CT_AE_MODE_CONTROL 0x02
#define CT_AE_PRIORITY_CONTROL 0x03
#define CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04
#define CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05
#define CT_FOCUS_ABSOLUTE_CONTROL 0x06
#define CT_FOCUS_RELATIVE_CONTROL 0x07
#define CT_FOCUS_AUTO_CONTROL 0x08
#define CT_IRIS_ABSOLUTE_CONTROL 0x09
#define CT_IRIS_RELATIVE_CONTROL 0x0A
#define CT_ZOOM_ABSOLUTE_CONTROL 0x0B
#define CT_ZOOM_RELATIVE_CONTROL 0x0C
#define CT_PANTILT_ABSOLUTE_CONTROL 0x0D
#define CT_PANTILT_RELATIVE_CONTROL 0x0E
#define CT_ROLL_ABSOLUTE_CONTROL 0x0F
#define CT_ROLL_RELATIVE_CONTROL 0x10
#define CT_PRIVACY_CONTROL 0x11
#define CT_RELATIVE_INCREASE 0x01
#define CT_RELATIVE_DECREASE 0xff
#define CT_RELATIVE_STOP 0x00
// Selector Unit Control Selector
#define SU_INPUT_SELECT_CONTROL 0x01
// Media Tape Transport Control Selector
#define MTT_CONTROL_UNDEFINED 0x00
#define MTT_TRANSPORT_CONTROL 0x01
#define MTT_ATN_INFORMATION_CONTROL 0x02
#define MTT_MEDIA_INFORMATION_CONTROL 0x03
#define MTT_TIME_CODE_INFORMATION_CONTROL 0x04
// Media Transport Terminal States
#define MTT_STATE_PLAY_NEXT_FRAME 0x00
#define MTT_STATE_PLAY_FWD_SLOWEST 0x01
#define MTT_STATE_PLAY_SLOW_FWD_4 0x02
#define MTT_STATE_PLAY_SLOW_FWD_3 0x03
#define MTT_STATE_PLAY_SLOW_FWD_2 0x04
#define MTT_STATE_PLAY_SLOW_FWD_1 0x05
#define MTT_STATE_PLAY_X1 0x06
#define MTT_STATE_PLAY_FAST_FWD_1 0x07
#define MTT_STATE_PLAY_FAST_FWD_2 0x08
#define MTT_STATE_PLAY_FAST_FWD_3 0x09
#define MTT_STATE_PLAY_FAST_FWD_4 0x0A
#define MTT_STATE_PLAY_FASTEST_FWD 0x0B
#define MTT_STATE_PLAY_PREV_FRAME 0x0C
#define MTT_STATE_PLAY_SLOWEST_REV 0x0D
#define MTT_STATE_PLAY_SLOW_REV_4 0x0E
#define MTT_STATE_PLAY_SLOW_REV_3 0x0F
#define MTT_STATE_PLAY_SLOW_REV_2 0x10
#define MTT_STATE_PLAY_SLOW_REV_1 0x11
#define MTT_STATE_PLAY_REV 0x12
#define MTT_STATE_PLAY_FAST_REV_1 0x13
#define MTT_STATE_PLAY_FAST_REV_2 0x14
#define MTT_STATE_PLAY_FAST_REV_3 0x15
#define MTT_STATE_PLAY_FAST_REV_4 0x16
#define MTT_STATE_PLAY_FASTEST_REV 0x17
#define MTT_STATE_PLAY 0x18
#define MTT_STATE_PAUSE 0x19
#define MTT_STATE_PLAY_REVERSE_PAUSE 0x1A
#define MTT_STATE_STOP 0x40
#define MTT_STATE_FAST_FORWARD 0x41
#define MTT_STATE_REWIND 0x42
#define MTT_STATE_HIGH_SPEED_REWIND 0x43
#define MTT_STATE_RECORD_START 0x50
#define MTT_STATE_RECORD_PAUSE 0x51
#define MTT_STATE_EJECT 0x60
#define MTT_STATE_PLAY_SLOW_FWD_X 0x70
#define MTT_STATE_PLAY_FAST_FWD_X 0x71
#define MTT_STATE_PLAY_SLOW_REV_X 0x72
#define MTT_STATE_PLAY_FAST_REV_X 0x73
#define MTT_STATE_STOP_START 0x74
#define MTT_STATE_STOP_END 0x75
#define MTT_STATE_STOP_EMERGENCY 0x76
#define MTT_STATE_STOP_CONDENSATION 0x77
#define MTT_STATE_UNSPECIFIED 0x7F
// Video Control Interface Control Selectors
#define VC_UNDEFINED_CONTROL 0x00
#define VC_VIDEO_POWER_MODE_CONTROL 0x01
#define VC_REQUEST_ERROR_CODE_CONTROL 0x02
// VideoStreaming Interface Control Selectors
#define VS_CONTROL_UNDEFINED 0x00
#define VS_PROBE_CONTROL 0x01
#define VS_COMMIT_CONTROL 0x02
#define VS_STILL_PROBE_CONTROL 0x03
#define VS_STILL_COMMIT_CONTROL 0x04
#define VS_STILL_IMAGE_TRIGGER_CONTROL 0x05
#define VS_STREAM_ERROR_CODE_CONTROL 0x06
#define VS_GENERATE_KEY_FRAME_CONTROL 0x07
#define VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08
#define VS_SYNC_DELAY_CONTROL 0x09
// Probe commit bitmap framing info
#define VS_PROBE_COMMIT_BIT_FID 0x01
#define VS_PROBE_COMMIT_BIT_EOF 0x02
// Stream payload header Bit Field Header bits
#define BFH_FID 0x01 // Frame ID bit
#define BFH_EOF 0x02 // End of Frame bit
#define BFH_PTS 0x04 // Presentation Time Stamp bit
#define BFH_SCR 0x08 // Source Clock Reference bit
#define BFH_RES 0x10 // Reserved bit
#define BFH_STI 0x20 // Still image bit
#define BFH_ERR 0x40 // Error bit
#define BFH_EOH 0x80 // End of header bit
#define HDR_LENGTH 1 // Length of header length field in bytes
#define BFH_LENGTH 1 // Length of BFH field in bytes
#define PTS_LENGTH 4 // Length of PTS field in bytes
#define SCR_LENGTH 6 // Length of SCR field in bytes
// USB Video Status Codes (Request Error Code Control)
#define USBVIDEO_RE_STATUS_NOERROR 0x00
#define USBVIDEO_RE_STATUS_NOT_READY 0x01
#define USBVIDEO_RE_STATUS_WRONG_STATE 0x02
#define USBVIDEO_RE_STATUS_POWER 0x03
#define USBVIDEO_RE_STATUS_OUT_OF_RANGE 0x04
#define USBVIDEO_RE_STATUS_INVALID_UNIT 0x05
#define USBVIDEO_RE_STATUS_INVALID_CONTROL 0x06
#define USBVIDEO_RE_STATUS_UNKNOWN 0x07
// USB Video Device Status Codes (Stream Error Code Control)
#define USBVIDEO_SE_STATUS_NOERROR 0x00
#define USBVIDEO_SE_STATUS_PROTECTED_CONTENT 0x01
#define USBVIDEO_SE_STATUS_INPUT_BUFFER_UNDERRUN 0x02
#define USBVIDEO_SE_STATUS_DATA_DICONTINUITY 0x03
#define USBVIDEO_SE_STATUS_OUTPUT_BUFFER_UNDERRUN 0x04
#define USBVIDEO_SE_STATUS_OUTPUT_BUFFER_OVERRUN 0x05
#define USBVIDEO_SE_STATUS_FORMAT_CHANGE 0x06
#define USBVIDEO_SE_STATUS_STILL_IMAGE_ERROR 0x07
#define USBVIDEO_SE_STATUS_UNKNOWN 0x08
// Status Interrupt Types
#define STATUS_INTERRUPT_VC 1
#define STATUS_INTERRUPT_VS 2
// Status Interrupt Attributes
#define STATUS_INTERRUPT_ATTRIBUTE_VALUE 0x00
#define STATUS_INTERRUPT_ATTRIBUTE_INFO 0x01
#define STATUS_INTERRUPT_ATTRIBUTE_FAILURE 0x02
// VideoStreaming interface interrupt types
#define VS_INTERRUPT_EVENT_BUTTON_PRESS 0x00
#define VS_INTERRUPT_VALUE_BUTTON_RELEASE 0x00
#define VS_INTERRUPT_VALUE_BUTTON_PRESS 0x01
// Get Info Values
#define USBVIDEO_ASYNC_CONTROL 0x10
#define USBVIDEO_SETTABLE_CONTROL 0x2
#define MAX_INTERRUPT_PACKET_VALUE_SIZE 8
// Frame descriptor frame interval array offsets
#define MIN_FRAME_INTERVAL_OFFSET 0
#define MAX_FRAME_INTERVAL_OFFSET 1
#define FRAME_INTERVAL_STEP_OFFSET 2
// Still image capture methods
#define STILL_CAPTURE_METHOD_NONE 0
#define STILL_CAPTURE_METHOD_1 1
#define STILL_CAPTURE_METHOD_2 2
#define STILL_CAPTURE_METHOD_3 3
// Still image trigger control states
#define STILL_IMAGE_TRIGGER_NORMAL 0
#define STILL_IMAGE_TRIGGER_TRANSMIT 1
#define STILL_IMAGE_TRIGGER_TRANSMIT_BULK 2
#define STILL_IMAGE_TRIGGER_TRANSMIT_ABORT 3
// Endpoint descriptor masks
#define EP_DESCRIPTOR_TRANSACTION_SIZE_MASK 0x07ff
#define EP_DESCRIPTOR_NUM_TRANSACTION_MASK 0x1800
#define EP_DESCRIPTOR_NUM_TRANSACTION_OFFSET 11
// Copy protection flag defined in the Uncompressed Payload Spec
#define USB_VIDEO_UNCOMPRESSED_RESTRICT_DUPLICATION 1
// Interlace flags
#define INTERLACE_FLAGS_SUPPORTED_MASK 0x01
#define INTERLACE_FLAGS_FIELDS_PER_FRAME_MASK 0x02
#define INTERLACE_FLAGS_FIELDS_PER_FRAME_2 0x00
#define INTERLACE_FLAGS_FIELDS_PER_FRAME_1 0x02
#define INTERLACE_FLAGS_FIELD_1_FIRST_MASK 0x04
#define INTERLACE_FLAGS_FIELD_PATTERN_MASK 0x30
#define INTERLACE_FLAGS_FIELD_PATTERN_FIELD1 0x00
#define INTERLACE_FLAGS_FIELD_PATTERN_FIELD2 0x10
#define INTERLACE_FLAGS_FIELD_PATTERN_REGULAR 0x20
#define INTERLACE_FLAGS_FIELD_PATTERN_RANDOM 0x30
#define INTERLACE_FLAGS_DISPLAY_MODE_MASK 0xC0
#define INTERLACE_FLAGS_DISPLAY_MODE_BOB 0x00
#define INTERLACE_FLAGS_DISPLAY_MODE_WEAVE 0x40
#define INTERLACE_FLAGS_DISPLAY_MODE_BOB_WEAVE 0x80
// Color Matching Flags
#define UVC_PRIMARIES_UNKNOWN 0x0
#define UVC_PRIMARIES_BT709 0x1
#define UVC_PRIMARIES_BT470_2M 0x2
#define UVC_PRIMARIES_BT470_2BG 0x3
#define UVC_PRIMARIES_SMPTE_170M 0x4
#define UVC_PRIMARIES_SMPTE_240M 0x5
#define UVC_GAMMA_UNKNOWN 0x0
#define UVC_GAMMA_BT709 0x1
#define UVC_GAMMA_BT470_2M 0x2
#define UVC_GAMMA_BT470_2BG 0x3
#define UVC_GAMMA_SMPTE_170M 0x4
#define UVC_GAMMA_SMPTE_240M 0x5
#define UVC_GAMMA_LINEAR 0x6
#define UVC_GAMMA_sRGB 0x7
#define UVC_TRANSFER_MATRIX_UNKNOWN 0x0
#define UVC_TRANSFER_MATRIX_BT709 0x1
#define UVC_TRANSFER_MATRIX_FCC 0x2
#define UVC_TRANSFER_MATRIX_BT470_2BG 0x3
#define UVC_TRANSFER_MATRIX_BT601 0x4
#define UVC_TRANSFER_MATRIX_SMPTE_240M 0x5
//
// BEGIN - VDC Descriptor and Control Structures
//
#pragma warning( disable : 4200 ) // Allow zero-sized arrays at end of structs
#pragma pack( push, vdc_descriptor_structs, 1)
// Video Specific Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // descriptor subtype
} VIDEO_SPECIFIC, *PVIDEO_SPECIFIC;
#define SIZEOF_VIDEO_SPECIFIC(pDesc) sizeof(VIDEO_SPECIFIC)
// Video Unit Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // descriptor subtype
UCHAR bUnitID; // Constant uniquely identifying the Unit
} VIDEO_UNIT, *PVIDEO_UNIT;
#define SIZEOF_VIDEO_UNIT(pDesc) sizeof(VIDEO_UNIT)
// VideoControl Header Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // VC_HEADER descriptor subtype
USHORT bcdVideoSpec; // USB video class spec revision number
USHORT wTotalLength; // Total length, including all units and terminals
ULONG dwClockFreq; // Device clock frequency in Hz
UCHAR bInCollection; // number of video streaming interfaces
UCHAR baInterfaceNr[]; // interface number array
} VIDEO_CONTROL_HEADER_UNIT, *PVIDEO_CONTROL_HEADER_UNIT;
#define SIZEOF_VIDEO_CONTROL_HEADER_UNIT(pDesc) \
((sizeof(VIDEO_CONTROL_HEADER_UNIT) + (pDesc)->bInCollection))
// VideoControl Input Terminal Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // INPUT_TERMINAL descriptor subtype
UCHAR bTerminalID; // Constant uniquely identifying the Terminal
USHORT wTerminalType; // Constant characterizing the terminal type
UCHAR bAssocTerminal; // ID of associated output terminal
UCHAR iTerminal; // Index of string descriptor
} VIDEO_INPUT_TERMINAL, *PVIDEO_INPUT_TERMINAL;
#define SIZEOF_VIDEO_INPUT_TERMINAL(pDesc) sizeof(VIDEO_INPUT_TERMINAL)
// VideoControl Output Terminal Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // OUTPUT_TERMINAL descriptor subtype
UCHAR bTerminalID; // Constant uniquely identifying the Terminal
USHORT wTerminalType; // Constant characterizing the terminal type
UCHAR bAssocTerminal; // ID of associated input terminal
UCHAR bSourceID; // ID of source unit/terminal
UCHAR iTerminal; // Index of string descriptor
} VIDEO_OUTPUT_TERMINAL, *PVIDEO_OUTPUT_TERMINAL;
#define SIZEOF_VIDEO_OUTPUT_TERMINAL(pDesc) sizeof(VIDEO_OUTPUT_TERMINAL)
// VideoControl Camera Terminal Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // INPUT_TERMINAL descriptor subtype
UCHAR bTerminalID; // Constant uniquely identifying the Terminal
USHORT wTerminalType; // Sensor type
UCHAR bAssocTerminal; // ID of associated output terminal
UCHAR iTerminal; // Index of string descriptor
USHORT wObjectiveFocalLengthMin; // Min focal length for zoom
USHORT wObjectiveFocalLengthMax; // Max focal length for zoom
USHORT wOcularFocalLength; // Ocular focal length for zoom
UCHAR bControlSize; // Size of bmControls field
UCHAR bmControls[]; // Bitmap of controls supported
} VIDEO_CAMERA_TERMINAL, *PVIDEO_CAMERA_TERMINAL;
#define SIZEOF_VIDEO_CAMERA_TERMINAL(pDesc) \
(sizeof(VIDEO_CAMERA_TERMINAL) + (pDesc)->bControlSize)
// Media Transport Input Terminal Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // INPUT_TERMINAL descriptor subtype
UCHAR bTerminalID; // Constant uniquely identifying the Terminal
USHORT wTerminalType; // Media Transport type
UCHAR bAssocTerminal; // ID of associated output terminal
UCHAR iTerminal; // Index of string descriptor
UCHAR bControlSize; // Size of bmControls field
UCHAR bmControls[]; // Bitmap of controls supported
} VIDEO_INPUT_MTT, *PVIDEO_INPUT_MTT;
__inline size_t SizeOfVideoInputMTT(_In_ PVIDEO_INPUT_MTT pDesc)
{
UCHAR bTransportModeSize;
PUCHAR pbCurr;
pbCurr = pDesc->bmControls + pDesc->bControlSize;
bTransportModeSize = *pbCurr;
return sizeof(VIDEO_INPUT_MTT) + pDesc->bControlSize + 1 + bTransportModeSize;
}
#define SIZEOF_VIDEO_INPUT_MTT(pDesc) SizeOfVideoInputMTT(pDesc)
// Media Transport Output Terminal Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // OUTPUT_TERMINAL descriptor subtype
UCHAR bTerminalID; // Constant uniquely identifying the Terminal
USHORT wTerminalType; // Media Transport type
UCHAR bAssocTerminal; // ID of associated output terminal
UCHAR bSourceID; // ID of source unit/terminal
UCHAR iTerminal; // Index of string descriptor
UCHAR bControlSize; // Size of bmControls field
UCHAR bmControls[]; // Bitmap of controls supported
} VIDEO_OUTPUT_MTT, *PVIDEO_OUTPUT_MTT;
__inline size_t SizeOfVideoOutputMTT(_In_ PVIDEO_OUTPUT_MTT pDesc)
{
UCHAR bTransportModeSize;
PUCHAR pbCurr;
pbCurr = pDesc->bmControls + pDesc->bControlSize;
bTransportModeSize = *pbCurr;
return sizeof(VIDEO_OUTPUT_MTT) + pDesc->bControlSize + 1+ bTransportModeSize;
}
#define SIZEOF_VIDEO_OUTPUT_MTT(pDesc) SizeOfVideoOutputMTT(pDesc)
// VideoControl Selector Unit Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // SELECTOR_UNIT descriptor subtype
UCHAR bUnitID; // Constant uniquely identifying the Unit
UCHAR bNrInPins; // Number of input pins
UCHAR baSourceID[]; // IDs of connected units/terminals
} VIDEO_SELECTOR_UNIT, *PVIDEO_SELECTOR_UNIT;
#define SIZEOF_VIDEO_SELECTOR_UNIT(pDesc) \
(sizeof(VIDEO_SELECTOR_UNIT) + (pDesc)->bNrInPins + 1)
// VideoControl Processing Unit Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // PROCESSING_UNIT descriptor subtype
UCHAR bUnitID; // Constant uniquely identifying the Unit
UCHAR bSourceID; // ID of connected unit/terminal
USHORT wMaxMultiplier; // Maximum digital magnification
UCHAR bControlSize; // Size of bmControls field
UCHAR bmControls[]; // Bitmap of controls supported
} VIDEO_PROCESSING_UNIT, *PVIDEO_PROCESSING_UNIT;
#define SIZEOF_VIDEO_PROCESSING_UNIT(pDesc) \
(sizeof(VIDEO_PROCESSING_UNIT) + 1 + (pDesc)->bControlSize)
// VideoControl Extension Unit Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // EXTENSION_UNIT descriptor subtype
UCHAR bUnitID; // Constant uniquely identifying the Unit
GUID guidExtensionCode; // Vendor-specific code identifying extension unit
UCHAR bNumControls; // Number of controls in Extension Unit
UCHAR bNrInPins; // Number of input pins
UCHAR baSourceID[]; // IDs of connected units/terminals
} VIDEO_EXTENSION_UNIT, *PVIDEO_EXTENSION_UNIT;
// this is followed by bControlSize, bmControls and iExtension (1 byte)
__inline size_t SizeOfVideoExtensionUnit(PVIDEO_EXTENSION_UNIT pDesc)
{
UCHAR bControlSize;
PUCHAR pbCurr;
// baSourceID is an array, and hence understood to be an address
pbCurr = pDesc->baSourceID + pDesc->bNrInPins;
if (((ULONG_PTR) pbCurr < (ULONG_PTR) pDesc->baSourceID) ||
(ULONG_PTR) pbCurr >= (ULONG_PTR)((UCHAR *) pDesc + pDesc->bLength))
return 0;
bControlSize = *pbCurr;
return 24 + pDesc->bNrInPins + bControlSize;
}
#define SIZEOF_VIDEO_EXTENSION_UNIT(pDesc) SizeOfVideoExtensionUnit(pDesc)
// Class-specific Interrupt Endpoint Descriptor
typedef struct {
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_ENDPOINT descriptor type
UCHAR bDescriptorSubtype; // EP_INTERRUPT descriptor subtype
USHORT wMaxTransferSize; // Max interrupt payload size
} VIDEO_CS_INTERRUPT, *PVIDEO_CS_INTERRUPT;
#define SIZEOF_VIDEO_CS_INTERRUPT(pDesc) sizeof(VIDEO_CS_INTERRUPT)
// VideoStreaming Input Header Descriptor
typedef struct _VIDEO_STREAMING_INPUT_HEADER
{
UCHAR bLength; // Size of this descriptor in bytes
UCHAR bDescriptorType; // CS_INTERFACE descriptor type
UCHAR bDescriptorSubtype; // VS_INPUT_HEADER descriptor subtype
UCHAR bNumFormats;
USHORT wTotalLength;
UCHAR bEndpointAddress;
UCHAR bmInfo;
UCHAR bTerminalLink;
UCHAR bStillCaptureMethod;
UCHAR bTriggerSupport;
UCHAR bTriggerUsage;
UCHAR bControlSize;
UCHAR bmaControls[];
} VIDEO_STREAMING_INPUT_HEADER, *PVIDEO_STREAMING_INPUT_HEADER;
#define SIZEOF_VIDEO_STREAMING_INPUT_HEADER(pDesc) \
(sizeof(VIDEO_STREAMING_INPUT_HEADER) + (pDesc->bNumFormats * pDesc->bControlSize))
// VideoStreaming Output Header Descriptor
typedef struct _VIDEO_STREAMING_OUTPUT_HEADER
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bNumFormats;
USHORT wTotalLength;
UCHAR bEndpointAddress;
UCHAR bTerminalLink;
} VIDEO_STREAMING_OUTPUT_HEADER, *PVIDEO_STREAMING_OUTPUT_HEADER;
#define SIZEOF_VIDEO_STREAMING_OUTPUT_HEADER(pDesc) sizeof(VIDEO_STREAMING_OUTPUT_HEADER)
typedef struct _VIDEO_STILL_IMAGE_RECT
{
USHORT wWidth;
USHORT wHeight;
} VIDEO_STILL_IMAGE_RECT;
// VideoStreaming Still Image Frame Descriptor
typedef struct _VIDEO_STILL_IMAGE_FRAME
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bEndpointAddress;
UCHAR bNumImageSizePatterns;
VIDEO_STILL_IMAGE_RECT aStillRect[];
} VIDEO_STILL_IMAGE_FRAME, *PVIDEO_STILL_IMAGE_FRAME;
__inline size_t SizeOfVideoStillImageFrame(PVIDEO_STILL_IMAGE_FRAME pDesc)
{
UCHAR bNumCompressionPatterns;
PUCHAR pbCurr;
pbCurr = (PUCHAR) pDesc->aStillRect + (sizeof(VIDEO_STILL_IMAGE_RECT) * pDesc->bNumImageSizePatterns);
bNumCompressionPatterns = *pbCurr;
return (sizeof(VIDEO_STILL_IMAGE_FRAME) +
(sizeof(VIDEO_STILL_IMAGE_RECT) * pDesc->bNumImageSizePatterns) +
1 + bNumCompressionPatterns);
}
#define SIZEOF_VIDEO_STILL_IMAGE_FRAME(pDesc) SizeOfVideoStillImageFrame(pDesc)
// VideoStreaming Color Matching Descriptor
typedef struct _VIDEO_COLORFORMAT
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bColorPrimaries;
UCHAR bTransferCharacteristics;
UCHAR bMatrixCoefficients;
} VIDEO_COLORFORMAT, *PVIDEO_COLORFORMAT;
#define SIZEOF_VIDEO_COLORFORMAT(pDesc) sizeof(VIDEO_COLORFORMAT)
// VideoStreaming Uncompressed Format Descriptor
typedef struct _VIDEO_FORMAT_UNCOMPRESSED
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bNumFrameDescriptors;
GUID guidFormat;
UCHAR bBitsPerPixel;
UCHAR bDefaultFrameIndex;
UCHAR bAspectRatioX;
UCHAR bAspectRatioY;
UCHAR bmInterlaceFlags;
UCHAR bCopyProtect;
} VIDEO_FORMAT_UNCOMPRESSED, *PVIDEO_FORMAT_UNCOMPRESSED;
#define SIZEOF_VIDEO_FORMAT_UNCOMPRESSED(pDesc) sizeof(VIDEO_FORMAT_UNCOMPRESSED)
// VideoStreaming Uncompressed Frame Descriptor
typedef struct _VIDEO_FRAME_UNCOMPRESSED
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFrameIndex;
UCHAR bmCapabilities;
USHORT wWidth;
USHORT wHeight;
ULONG dwMinBitRate;
ULONG dwMaxBitRate;
ULONG dwMaxVideoFrameBufferSize;
ULONG dwDefaultFrameInterval;
UCHAR bFrameIntervalType;
ULONG adwFrameInterval[];
} VIDEO_FRAME_UNCOMPRESSED, *PVIDEO_FRAME_UNCOMPRESSED;
__inline size_t SizeOfVideoFrameUncompressed(_In_ PVIDEO_FRAME_UNCOMPRESSED pDesc)
{
if (pDesc->bFrameIntervalType == 0) { // Continuous
return sizeof(VIDEO_FRAME_UNCOMPRESSED) + (3 * sizeof(ULONG));
}
else { // Discrete
return sizeof(VIDEO_FRAME_UNCOMPRESSED) + (pDesc->bFrameIntervalType * sizeof(ULONG));
}
}
#define SIZEOF_VIDEO_FRAME_UNCOMPRESSED(pDesc) SizeOfVideoFrameUncompressed(pDesc)
// VideoStreaming MJPEG Format Descriptor
typedef struct _VIDEO_FORMAT_MJPEG
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bNumFrameDescriptors;
UCHAR bmFlags;
UCHAR bDefaultFrameIndex;
UCHAR bAspectRatioX;
UCHAR bAspectRatioY;
UCHAR bmInterlaceFlags;
UCHAR bCopyProtect;
} VIDEO_FORMAT_MJPEG, *PVIDEO_FORMAT_MJPEG;
#define SIZEOF_VIDEO_FORMAT_MJPEG(pDesc) sizeof(VIDEO_FORMAT_MJPEG)
// VideoStreaming MJPEG Frame Descriptor
typedef struct _VIDEO_FRAME_MJPEG
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFrameIndex;
UCHAR bmCapabilities;
USHORT wWidth;
USHORT wHeight;
ULONG dwMinBitRate;
ULONG dwMaxBitRate;
ULONG dwMaxVideoFrameBufferSize;
ULONG dwDefaultFrameInterval;
UCHAR bFrameIntervalType;
ULONG adwFrameInterval[];
} VIDEO_FRAME_MJPEG, *PVIDEO_FRAME_MJPEG;
__inline size_t SizeOfVideoFrameMjpeg(_In_ PVIDEO_FRAME_MJPEG pDesc)
{
if (pDesc->bFrameIntervalType == 0) { // Continuous
return sizeof(VIDEO_FRAME_MJPEG) + (3 * sizeof(ULONG));
}
else { // Discrete
return sizeof(VIDEO_FRAME_MJPEG) + (pDesc->bFrameIntervalType * sizeof(ULONG));
}
}
#define SIZEOF_VIDEO_FRAME_MJPEG(pDesc) SizeOfVideoFrameMjpeg(pDesc)
// VideoStreaming Vendor Format Descriptor
typedef struct _VIDEO_FORMAT_VENDOR
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bNumFrameDescriptors;
GUID guidMajorFormat;
GUID guidSubFormat;
GUID guidSpecifier;
UCHAR bPayloadClass;
UCHAR bDefaultFrameIndex;
UCHAR bCopyProtect;
} VIDEO_FORMAT_VENDOR, *PVIDEO_FORMAT_VENDOR;
#define SIZEOF_VIDEO_FORMAT_VENDOR(pDesc) sizeof(VIDEO_FORMAT_VENDOR)
// VideoStreaming Vendor Frame Descriptor
typedef struct _VIDEO_FRAME_VENDOR
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFrameIndex;
UCHAR bmCapabilities;
USHORT wWidth;
USHORT wHeight;
ULONG dwMinBitRate;
ULONG dwMaxBitRate;
ULONG dwMaxVideoFrameBufferSize;
ULONG dwDefaultFrameInterval;
UCHAR bFrameIntervalType;
DWORD adwFrameInterval[];
} VIDEO_FRAME_VENDOR, *PVIDEO_FRAME_VENDOR;
__inline size_t SizeOfVideoFrameVendor(_In_ PVIDEO_FRAME_VENDOR pDesc)
{
if (pDesc->bFrameIntervalType == 0) { // Continuous
return sizeof(VIDEO_FRAME_VENDOR) + (3 * sizeof(ULONG));
}
else { // Discrete
return sizeof(VIDEO_FRAME_VENDOR) + (pDesc->bFrameIntervalType * sizeof(ULONG));
}
}
#define SIZEOF_VIDEO_FRAME_VENDOR(pDesc) SizeOfVideoFrameVendor(pDesc)
// VideoStreaming DV Format Descriptor
typedef struct _VIDEO_FORMAT_DV
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
ULONG dwMaxVideoFrameBufferSize;
UCHAR bFormatType;
} VIDEO_FORMAT_DV, *PVIDEO_FORMAT_DV;
#define SIZEOF_VIDEO_FORMAT_DV(pDesc) sizeof(VIDEO_FORMAT_DV)
// VideoStreaming MPEG2-TS Format Descriptor
typedef struct _VIDEO_FORMAT_MPEG2TS
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bDataOffset;
UCHAR bPacketLength;
UCHAR bStrideLength;
} VIDEO_FORMAT_MPEG2TS, *PVIDEO_FORMAT_MPEG2TS;
#define SIZEOF_VIDEO_FORMAT_MPEG2TS(pDesc) sizeof(VIDEO_FORMAT_MPEG2TS)
// VideoStreaming MPEG1 System Stream Format Descriptor
typedef struct _VIDEO_FORMAT_MPEG1SS
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bPacketLength;
UCHAR bPackLength;
UCHAR bPackDataType;
} VIDEO_FORMAT_MPEG1SS, *PVIDEO_FORMAT_MPEG1SS;
#define SIZEOF_VIDEO_FORMAT_MPEG1SS(pDesc) sizeof(VIDEO_FORMAT_MPEG1SS)
// VideoStreaming MPEG2-PS Format Descriptor
typedef struct _VIDEO_FORMAT_MPEG2PS
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bPacketLength;
UCHAR bPackLength;
UCHAR bPackDataType;
} VIDEO_FORMAT_MPEG2PS, *PVIDEO_FORMAT_MPEG2PS;
#define SIZEOF_VIDEO_FORMAT_MPEG2PS(pDesc) sizeof(VIDEO_FORMAT_MPEG2PS)
// VideoStreaming MPEG4-SL Format Descriptor
typedef struct _VIDEO_FORMAT_MPEG4SL
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bPacketLength;
} VIDEO_FORMAT_MPEG4SL, *PVIDEO_FORMAT_MPEG4SL;
#define SIZEOF_VIDEO_FORMAT_MPEG4SL(pDesc) sizeof(VIDEO_FORMAT_MPEG4SL)
// VideoStreaming Probe/Commit Control
typedef struct _VS_PROBE_COMMIT_CONTROL
{
USHORT bmHint;
UCHAR bFormatIndex;
UCHAR bFrameIndex;
ULONG dwFrameInterval;
USHORT wKeyFrameRate;
USHORT wPFrameRate;
USHORT wCompQuality;
USHORT wCompWindowSize;
USHORT wDelay;
ULONG dwMaxVideoFrameSize;
ULONG dwMaxPayloadTransferSize;
} VS_PROBE_COMMIT_CONTROL, *PVS_PROBE_COMMIT_CONTROL;
// VideoStreaming Still Probe/Commit Control
typedef struct _VS_STILL_PROBE_COMMIT_CONTROL
{
UCHAR bFormatIndex;
UCHAR bFrameIndex;
UCHAR bCompressionIndex;
ULONG dwMaxVideoFrameSize;
ULONG dwMaxPayloadTransferSize;
} VS_STILL_PROBE_COMMIT_CONTROL, *PVS_STILL_PROBE_COMMIT_CONTROL;
// Status Interrupt Packet (Video Control)
typedef struct _VC_INTERRUPT_PACKET
{
UCHAR bStatusType;
UCHAR bOriginator;
UCHAR bEvent;
UCHAR bSelector;
UCHAR bAttribute;
UCHAR bValue[1];
} VC_INTERRUPT_PACKET, *PVC_INTERRUPT_PACKET;
// Status Interrupt Packet (Video Control)
typedef struct _VC_INTERRUPT_PACKET_EX
{
UCHAR bStatusType;
UCHAR bOriginator;
UCHAR bEvent;
UCHAR bSelector;
UCHAR bAttribute;
UCHAR bValue[MAX_INTERRUPT_PACKET_VALUE_SIZE];
} VC_INTERRUPT_PACKET_EX, *PVC_INTERRUPT_PACKET_EX;
// Status Interrupt Packet (Video Streaming)
typedef struct _VS_INTERRUPT_PACKET
{
UCHAR bStatusType;
UCHAR bOriginator;
UCHAR bEvent;
UCHAR bValue[1];
} VS_INTERRUPT_PACKET, *PVS_INTERRUPT_PACKET;
// Status Interrupt Packet (Generic)
typedef struct _VIDEO_INTERRUPT_PACKET
{
UCHAR bStatusType;
UCHAR bOriginator;
} VIDEO_INTERRUPT_PACKET, *PVIDEO_INTERRUPT_PACKET;
// Relative property struct
typedef struct _VIDEO_RELATIVE_PROPERTY
{
UCHAR bValue;
UCHAR bSpeed;
} VIDEO_RELATIVE_PROPERTY, *PVIDEO_RELATIVE_PROPERTY;
// Relative Zoom control struct
typedef struct _ZOOM_RELATIVE_PROPERTY
{
UCHAR bZoom;
UCHAR bDigitalZoom;
UCHAR bSpeed;
} ZOOM_RELATIVE_PROPERTY, *PZOOM_RELATIVE_PROPERTY;
// Relative pan-tilt struct
typedef struct _PANTILT_RELATIVE_PROPERTY
{
UCHAR bPanRelative;
UCHAR bPanSpeed;
UCHAR bTiltRelative;
UCHAR bTiltSpeed;
} PANTILT_RELATIVE_PROPERTY, *PPANTILT_RELATIVE_PROPERTY;
typedef struct _MEDIA_INFORMATION_CONTROL
{
UCHAR bmMediaType;
UCHAR bmWriteProtect;
} MEDIA_INFORMATION_CONTROL, *PMEDIA_INFORMATION_CONTROL;
typedef struct _TIME_CODE_INFORMATION_CONTROL
{
UCHAR bcdFrame;
UCHAR bcdSecond;
UCHAR bcdMinute;
UCHAR bcdHour;
} TIME_CODE_INFORMATION_CONTROL, *PTIME_CODE_INFORMATION_CONTROL;
typedef struct _ATN_INFORMATION_CONTROL
{
UCHAR bmMediaType;
DWORD dwATN_Data;
} ATN_INFORMATION_CONTROL, *PATN_INFORMATION_CONTROL;
#define VS_FORMAT_FRAME_BASED 0x10
#define VS_FRAME_FRAME_BASED 0x11
#define VS_FORMAT_STREAM_BASED 0x12
// Format Descriptor for UVC 1.1 frame based format
typedef struct _VIDEO_FORMAT_FRAME
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bNumFrameDescriptors;
GUID guidFormat;
UCHAR bBitsPerPixel;
UCHAR bDefaultFrameIndex;
UCHAR bAspectRatioX;
UCHAR bAspectRatioY;
UCHAR bmInterlaceFlags;
UCHAR bCopyProtect;
UCHAR bVariableSize;
} VIDEO_FORMAT_FRAME, *PVIDEO_FORMAT_FRAME;
#define SIZEOF_VIDEO_FORMAT_FRAME(pDesc) sizeof(VIDEO_FORMAT_FRAME)
// Frame Descriptor for UVC 1.1 frame based format
typedef struct _VIDEO_FRAME_FRAME
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFrameIndex;
UCHAR bmCapabilities;
USHORT wWidth;
USHORT wHeight;
ULONG dwMinBitRate;
ULONG dwMaxBitRate;
ULONG dwDefaultFrameInterval;
UCHAR bFrameIntervalType;
ULONG dwBytesPerLine;
ULONG adwFrameInterval[];
} VIDEO_FRAME_FRAME, *PVIDEO_FRAME_FRAME;
__inline size_t SizeOfVideoFrameFrame(_In_ PVIDEO_FRAME_FRAME pDesc)
{
if (pDesc->bFrameIntervalType == 0) { // Continuous
return sizeof(VIDEO_FRAME_FRAME) + (3 * sizeof(ULONG));
}
else { // Discrete
return sizeof(VIDEO_FRAME_FRAME) + (pDesc->bFrameIntervalType * sizeof(ULONG));
}
}
#define SIZEOF_VIDEO_FRAME_FRAME(pDesc) SizeOfVideoFrameFrame(pDesc)
// VideoStreaming Stream Based Format Descriptor
typedef struct _VIDEO_FORMAT_STREAM
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
GUID guidFormat;
ULONG dwPacketLength;
} VIDEO_FORMAT_STREAM, *PVIDEO_FORMAT_STREAM;
#define SIZEOF_VIDEO_FORMAT_STREAM(pDesc) sizeof(VIDEO_FORMAT_STREAM)
// VideoStreaming Probe/Commit Control
typedef struct _VS_PROBE_COMMIT_CONTROL2
{
USHORT bmHint;
UCHAR bFormatIndex;
UCHAR bFrameIndex;
ULONG dwFrameInterval;
USHORT wKeyFrameRate;
USHORT wPFrameRate;
USHORT wCompQuality;
USHORT wCompWindowSize;
USHORT wDelay;
ULONG dwMaxVideoFrameSize;
ULONG dwMaxPayloadTransferSize;
ULONG dwClockFrequency;
UCHAR bmFramingInfo;
UCHAR bPreferredVersion;
UCHAR bMinVersion;
UCHAR bMaxVersion;
} VS_PROBE_COMMIT_CONTROL2, *PVS_PROBE_COMMIT_CONTROL2;
#pragma pack( pop, vdc_descriptor_structs )
#pragma warning( default : 4200 )
//
// END - VDC Descriptor and Control Structures
//
#endif // ___UVCDESC_H___