usbx/common/usbx_host_classes/inc/ux_host_class_video.h
2021-07-28 07:25:46 +00:00

699 lines
41 KiB
C

/**************************************************************************/
/* */
/* Copyright (c) Microsoft Corporation. All rights reserved. */
/* */
/* This software is licensed under the Microsoft Software License */
/* Terms for Microsoft Azure RTOS. Full text of the license can be */
/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
/* and in the root directory of this software. */
/* */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** USBX Component */
/** */
/** Video Class */
/** */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/* */
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_host_class_video.h PORTABLE C */
/* 6.1.8 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
/* */
/* DESCRIPTION */
/* */
/* This file contains all the header and extern functions used by the */
/* USBX video class. */
/* */
/* RELEASE HISTORY */
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */
/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */
/* added new definition, field */
/* and functions for video */
/* control handling, used UX */
/* prefix to refer to TX */
/* symbols instead of using */
/* them directly, */
/* resulting in version 6.1 */
/* 08-02-2021 Wen Wang Modified comment(s), */
/* added extern "C" keyword */
/* for compatibility with C++, */
/* added new definitions */
/* according to UVC 1.5 Class */
/* specification, */
/* resulting in version 6.1.8 */
/* */
/**************************************************************************/
#ifndef UX_HOST_CLASS_VIDEO_H
#define UX_HOST_CLASS_VIDEO_H
/* Determine if a C++ compiler is being used. If so, ensure that standard
C is used to process the API information. */
#ifdef __cplusplus
/* Yes, C++ compiler is present. Use standard C. */
extern "C" {
#endif
/* Define external static data. */
extern UCHAR _ux_system_class_video_interface_descriptor_structure[];
extern UCHAR _ux_system_class_video_input_terminal_descriptor_structure[];
extern UCHAR _ux_system_class_video_input_header_descriptor_structure[];
extern UCHAR _ux_system_class_video_processing_unit_descriptor_structure[];
extern UCHAR _ux_system_class_video_streaming_interface_descriptor_structure[];
extern UCHAR _ux_system_class_video_streaming_endpoint_descriptor_structure[];
extern UCHAR _ux_system_class_video_frame_descriptor_structure[];
extern UCHAR _ux_system_host_class_video_name[];
/* Define Video Class IOCTL constants. */
#define UX_HOST_CLASS_VIDEO_IOCTL_GET_INPUT_TERMINAL 0x01
#define UX_HOST_CLASS_VIDEO_IOCTL_GET_FORMAT_NUMBER 0x02
#define UX_HOST_CLASS_VIDEO_IOCTL_GET_FORMAT_DATA 0x03
#define UX_HOST_CLASS_VIDEO_IOCTL_GET_FRAME_NUMBER 0x04
#define UX_HOST_CLASS_VIDEO_IOCTL_GET_FRAME_DATA 0x05
#define UX_HOST_CLASS_VIDEO_IOCTL_CHANNEL_START 0x06
#define UX_HOST_CLASS_VIDEO_IOCTL_CHANNEL_STOP 0x07
#define UX_HOST_CLASS_VIDEO_IOCTL_GET_FRAME_INTERVAL 0x08
#define UX_HOST_CLASS_VIDEO_IOCTL_ABORT_IN_PIPE 0x80
/* Define Video Class main constants. */
#define UX_HOST_CLASS_VIDEO_CLASS_TRANSFER_TIMEOUT 30
#define UX_HOST_CLASS_VIDEO_CLASS 0x0e
#define UX_HOST_CLASS_VIDEO_SUBCLASS_UNDEFINED 0
#define UX_HOST_CLASS_VIDEO_SUBCLASS_CONTROL 1
#define UX_HOST_CLASS_VIDEO_SUBCLASS_STREAMING 2
#define UX_HOST_CLASS_VIDEO_SUBCLASS_INTERFACE_COLLECTION 3
/* Define Video Class main descriptor types. */
#define UX_HOST_CLASS_VIDEO_CS_UNDEFINED 0x20
#define UX_HOST_CLASS_VIDEO_CS_DEVICE 0x21
#define UX_HOST_CLASS_VIDEO_CS_CONFIGURATION 0x22
#define UX_HOST_CLASS_VIDEO_CS_STRING 0x23
#define UX_HOST_CLASS_VIDEO_CS_INTERFACE 0x24
#define UX_HOST_CLASS_VIDEO_CS_ENDPOINT 0x25
/* Define Video Class specific VC . */
#define UX_HOST_CLASS_VIDEO_VC_DESCRIPTOR_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_VC_HEADER 0x01
#define UX_HOST_CLASS_VIDEO_VC_INPUT_TERMINAL 0x02
#define UX_HOST_CLASS_VIDEO_VC_OUTPUT_TERMINAL 0x03
#define UX_HOST_CLASS_VIDEO_VC_SELECTOR_UNIT 0x04
#define UX_HOST_CLASS_VIDEO_VC_PROCESSING_UNIT 0x05
#define UX_HOST_CLASS_VIDEO_VC_EXTENSION_UNIT 0x06
#define UX_HOST_CLASS_VIDEO_VC_ENCODING_UNIT 0x07
/* Define Video Class specific VS . */
#define UX_HOST_CLASS_VIDEO_VS_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_VS_INPUT_HEADER 0x01
#define UX_HOST_CLASS_VIDEO_VS_OUTPUT_HEADER 0x02
#define UX_HOST_CLASS_VIDEO_VS_STILL_IMAGE_FRAME 0x03
#define UX_HOST_CLASS_VIDEO_VS_FORMAT_UNCOMPRESSED 0x04
#define UX_HOST_CLASS_VIDEO_VS_FRAME_UNCOMPRESSED 0x05
#define UX_HOST_CLASS_VIDEO_VS_FORMAT_MJPEG 0x06
#define UX_HOST_CLASS_VIDEO_VS_FRAME_MJPEG 0x07
#define UX_HOST_CLASS_VIDEO_VS_FORMAT_MPEG2TS 0x0A
#define UX_HOST_CLASS_VIDEO_VS_FORMAT_DV 0x0C
#define UX_HOST_CLASS_VIDEO_VS_COLORFORMAT 0x0D
#define UX_HOST_CLASS_VIDEO_VS_FORMAT_FRAME_BASED 0x10
#define UX_HOST_CLASS_VIDEO_VS_FRAME_FRAME_BASED 0x11
#define UX_HOST_CLASS_VIDEO_VS_FORMAT_STREAM_BASED 0x12
#define UX_HOST_CLASS_VIDEO_VS_FORMAT_H264 0x13
#define UX_HOST_CLASS_VIDEO_VS_FRAME_H264 0x14
#define UX_HOST_CLASS_VIDEO_VS_FORMAT_H264_SIMULCAST 0x15
#define UX_HOST_CLASS_VIDEO_VS_FORMAT_VP8 0x16
#define UX_HOST_CLASS_VIDEO_VS_FRAME_VP8 0x17
#define UX_HOST_CLASS_VIDEO_VS_FORMAT_VP8_SIMULCAST 0x18
/* Define Video Class specific Control Selectors. */
#define UX_HOST_CLASS_VIDEO_CT_CONTROL_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_CT_SCANNING_MODE_CONTROL 0x01
#define UX_HOST_CLASS_VIDEO_CT_AE_MODE_CONTROL 0x02
#define UX_HOST_CLASS_VIDEO_CT_AE_PRIORITY_CONTROL 0x03
#define UX_HOST_CLASS_VIDEO_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04
#define UX_HOST_CLASS_VIDEO_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05
#define UX_HOST_CLASS_VIDEO_CT_FOCUS_ABSOLUTE_CONTROL 0x06
#define UX_HOST_CLASS_VIDEO_CT_FOCUS_RELATIVE_CONTROL 0x07
#define UX_HOST_CLASS_VIDEO_CT_FOCUS_AUTO_CONTROL 0x08
#define UX_HOST_CLASS_VIDEO_CT_IRIS_ABSOLUTE_CONTROL 0x09
#define UX_HOST_CLASS_VIDEO_CT_IRIS_RELATIVE_CONTROL 0x0A
#define UX_HOST_CLASS_VIDEO_CT_ZOOM_ABSOLUTE_CONTROL 0x0B
#define UX_HOST_CLASS_VIDEO_CT_ZOOM_RELATIVE_CONTROL 0x0C
#define UX_HOST_CLASS_VIDEO_CT_PANTILT_ABSOLUTE_CONTROL 0x0D
#define UX_HOST_CLASS_VIDEO_CT_PANTILT_RELATIVE_CONTROL 0x0E
#define UX_HOST_CLASS_VIDEO_CT_ROLL_ABSOLUTE_CONTROL 0x0F
#define UX_HOST_CLASS_VIDEO_CT_ROLL_RELATIVE_CONTROL 0x10
#define UX_HOST_CLASS_VIDEO_CT_PRIVACY_CONTROL 0x11
#define UX_HOST_CLASS_VIDEO_CT_FOCUS_SIMPLE_CONTROL 0x12
#define UX_HOST_CLASS_VIDEO_CT_WINDOW_CONTROL 0x13
#define UX_HOST_CLASS_VIDEO_CT_REGION_OF_INTEREST_CONTROL 0x14
#define UX_HOST_CLASS_VIDEO_PU_CONTROL_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01
#define UX_HOST_CLASS_VIDEO_PU_BRIGHTNESS_CONTROL 0x02
#define UX_HOST_CLASS_VIDEO_PU_CONTRAST_CONTROL 0x03
#define UX_HOST_CLASS_VIDEO_PU_GAIN_CONTROL 0x04
#define UX_HOST_CLASS_VIDEO_PU_POWER_LINE_FREQUENCY_CONTROL 0x05
#define UX_HOST_CLASS_VIDEO_PU_HUE_CONTROL 0x06
#define UX_HOST_CLASS_VIDEO_PU_SATURATION_CONTROL 0x07
#define UX_HOST_CLASS_VIDEO_PU_SHARPNESS_CONTROL 0x08
#define UX_HOST_CLASS_VIDEO_PU_GAMMA_CONTROL 0x09
#define UX_HOST_CLASS_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0A
#define UX_HOST_CLASS_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0B
#define UX_HOST_CLASS_VIDEO_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0C
#define UX_HOST_CLASS_VIDEO_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0D
#define UX_HOST_CLASS_VIDEO_PU_DIGITAL_MULTIPLIER_CONTROL 0x0E
#define UX_HOST_CLASS_VIDEO_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0F
#define UX_HOST_CLASS_VIDEO_PU_HUE_AUTO_CONTROL 0x10
#define UX_HOST_CLASS_VIDEO_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11
#define UX_HOST_CLASS_VIDEO_PU_ANALOG_LOCK_STATUS_CONTROL 0x12
#define UX_HOST_CLASS_VIDEO_PU_CONTRAST_AUTO_CONTROL 0x13
#define UX_HOST_CLASS_VIDEO_VS_CONTROL_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_VS_PROBE_CONTROL 0x01
#define UX_HOST_CLASS_VIDEO_VS_COMMIT_CONTROL 0x02
#define UX_HOST_CLASS_VIDEO_VS_STILL_PROBE_CONTROL 0x03
#define UX_HOST_CLASS_VIDEO_VS_STILL_COMMIT_CONTROL 0x04
#define UX_HOST_CLASS_VIDEO_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05
#define UX_HOST_CLASS_VIDEO_VS_STREAM_ERROR_CODE_CONTROL 0x06
#define UX_HOST_CLASS_VIDEO_VS_GENERATE_KEY_FRAME_CONTROL 0x07
#define UX_HOST_CLASS_VIDEO_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08
#define UX_HOST_CLASS_VIDEO_VS_SYNCH_DELAY_CONTROL 0x09
/* Define USB Video Class terminal types. */
#define UX_HOST_CLASS_VIDEO_TT_VENDOR_SPECIFIC 0x0100
#define UX_HOST_CLASS_VIDEO_TT_STREAMING 0x0101
#define UX_HOST_CLASS_VIDEO_ITT_VENDOR_SPECIFIC 0x0200
#define UX_HOST_CLASS_VIDEO_ITT_CAMERA 0x0201
#define UX_HOST_CLASS_VIDEO_ITT_MEDIA_TRANSPORT_INPUT 0x0202
#define UX_HOST_CLASS_VIDEO_OTT_VENDOR_SPECIFIC 0x0300
#define UX_HOST_CLASS_VIDEO_OTT_CAMERA 0x0301
#define UX_HOST_CLASS_VIDEO_OTT_MEDIA_TRANSPORT_INPUT 0x0302
/* Define USB Video Class Request Error Code Control. */
#define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_NO_ERROR 0x00
#define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_NOT_READY 0x01
#define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_WRONG_STATE 0x02
#define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_POWER 0x03
#define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_OUT_OF_RANGE 0x04
#define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_INPUT 0x05
#define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_CONTROL 0x06
#define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_REQUEST 0x07
#define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_VALUE_WITHIN_RANGE 0x08
#define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_UNKNOWN 0xFF
/* Define Video Class encoding format types. */
#define UX_HOST_CLASS_VIDEO_INTERFACE_DESCRIPTOR_ENTRIES 8
#define UX_HOST_CLASS_VIDEO_INTERFACE_DESCRIPTOR_LENGTH 8
#define UX_HOST_CLASS_VIDEO_INPUT_TERMINAL_DESCRIPTOR_ENTRIES 7
#define UX_HOST_CLASS_VIDEO_INPUT_TERMINAL_DESCRIPTOR_LENGTH 8
#define UX_HOST_CLASS_VIDEO_INPUT_HEADER_DESCRIPTOR_ENTRIES 12
#define UX_HOST_CLASS_VIDEO_INPUT_HEADER_DESCRIPTOR_LENGTH 13
#define UX_HOST_CLASS_VIDEO_PROCESSING_UNIT_DESCRIPTOR_ENTRIES 8
#define UX_HOST_CLASS_VIDEO_PROCESSING_UNIT_DESCRIPTOR_LENGTH 9
#define UX_HOST_CLASS_VIDEO_STREAMING_INTERFACE_DESCRIPTOR_ENTRIES 6
#define UX_HOST_CLASS_VIDEO_STREAMING_INTERFACE_DESCRIPTOR_LENGTH 6
#define UX_HOST_CLASS_VIDEO_STREAMING_ENDPOINT_DESCRIPTOR_ENTRIES 6
#define UX_HOST_CLASS_VIDEO_STREAMING_ENDPOINT_DESCRIPTOR_LENGTH 6
#define UX_HOST_CLASS_VIDEO_FRAME_DESCRIPTOR_ENTRIES 12
#define UX_HOST_CLASS_VIDEO_FRAME_DESCRIPTOR_LENGTH 30
/* Define Video Class specific interface descriptor. */
#define UX_HOST_CLASS_VIDEO_MAX_CHANNEL 8
#define UX_HOST_CLASS_VIDEO_NAME_LENGTH 64
/* Define Video Class specific request codes. */
#define UX_HOST_CLASS_VIDEO_REQUEST_CODE_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_SET_CUR 0x01
#define UX_HOST_CLASS_VIDEO_GET_CUR 0x81
#define UX_HOST_CLASS_VIDEO_GET_MIN 0x82
#define UX_HOST_CLASS_VIDEO_GET_MAX 0x83
#define UX_HOST_CLASS_VIDEO_GET_RES 0x84
#define UX_HOST_CLASS_VIDEO_GET_INFO 0x86
#define UX_HOST_CLASS_VIDEO_GET_DEF 0x87
#define UX_HOST_CLASS_VIDEO_GET_CUR_ALL 0x91
#define UX_HOST_CLASS_VIDEO_GET_MIN_ALL 0x92
#define UX_HOST_CLASS_VIDEO_GET_MAX_ALL 0x93
#define UX_HOST_CLASS_VIDEO_GET_RES_ALL 0x94
#define UX_HOST_CLASS_VIDEO_GET_GET_DEF_ALL 0x97
/* Define Video Class error codes. */
#define UX_HOST_CLASS_VIDEO_WRONG_TYPE 0x90
#define UX_HOST_CLASS_VIDEO_WRONG_INTERFACE 0x91
#define UX_HOST_CLASS_VIDEO_PARAMETER_ERROR 0x92
#define UX_HOST_CLASS_VIDEO_DEVICE_NOT_READY 0x93
/* Define Video Class Terminal Control Selectors. */
#define UX_HOST_CLASS_VIDEO_TCS_VC_CONTROL_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_TCS_VC_VIDEO_POWER_MODE_CONTROL 0x01
#define UX_HOST_CLASS_VIDEO_TCS_VC_REQUEST_ERROR_CODE_CONTROL 0x02
#define UX_HOST_CLASS_VIDEO_TCS_TE_CONTROL_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_TCS_SU_CONTROL_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_TCS_SU_INPUT_SELECT_CONTROL 0x01
#define UX_HOST_CLASS_VIDEO_TCS_CT_CONTROL_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_TCS_CT_SCANNING_MODE_CONTROL 0x01
#define UX_HOST_CLASS_VIDEO_TCS_CT_AE_MODE_CONTROL 0x02
#define UX_HOST_CLASS_VIDEO_TCS_CT_AE_PRIORITY_CONTROL 0x03
#define UX_HOST_CLASS_VIDEO_TCS_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04
#define UX_HOST_CLASS_VIDEO_TCS_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05
#define UX_HOST_CLASS_VIDEO_TCS_CT_FOCUS_ABSOLUTE_CONTROL 0x06
#define UX_HOST_CLASS_VIDEO_TCS_CT_FOCUS_RELATIVE_CONTROL 0x07
#define UX_HOST_CLASS_VIDEO_TCS_CT_FOCUS_AUTO_CONTROL 0x08
#define UX_HOST_CLASS_VIDEO_TCS_CT_IRIS_ABSOLUTE_CONTROL 0x09
#define UX_HOST_CLASS_VIDEO_TCS_CT_IRIS_RELATIVE_CONTROL 0x0A
#define UX_HOST_CLASS_VIDEO_TCS_CT_ZOOM_ABSOLUTE_CONTROL 0x0B
#define UX_HOST_CLASS_VIDEO_TCS_CT_ZOOM_RELATIVE_CONTROL 0x0C
#define UX_HOST_CLASS_VIDEO_TCS_CT_PANTILT_ABSOLUTE_CONTROL 0x0D
#define UX_HOST_CLASS_VIDEO_TCS_CT_PANTILT_RELATIVE_CONTROL 0x0E
#define UX_HOST_CLASS_VIDEO_TCS_CT_ROLL_ABSOLUTE_CONTROL 0x0F
#define UX_HOST_CLASS_VIDEO_TCS_CT_ROLL_RELATIVE_CONTROL 0x10
#define UX_HOST_CLASS_VIDEO_TCS_CT_PRIVACY_CONTROL 0x11
#define UX_HOST_CLASS_VIDEO_TCS_PU_CONTROL_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_TCS_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01
#define UX_HOST_CLASS_VIDEO_TCS_PU_BRIGHTNESS_CONTROL 0x02
#define UX_HOST_CLASS_VIDEO_TCS_PU_CONTRAST_CONTROL 0x03
#define UX_HOST_CLASS_VIDEO_TCS_PU_GAIN_CONTROL 0x04
#define UX_HOST_CLASS_VIDEO_TCS_PU_POWER_LINE_FREQUENCY_CONTROL 0x05
#define UX_HOST_CLASS_VIDEO_TCS_PU_HUE_CONTROL 0x06
#define UX_HOST_CLASS_VIDEO_TCS_PU_SATURATION_CONTROL 0x07
#define UX_HOST_CLASS_VIDEO_TCS_PU_SHARPNESS_CONTROL 0x08
#define UX_HOST_CLASS_VIDEO_TCS_PU_GAMMA_CONTROL 0x09
#define UX_HOST_CLASS_VIDEO_TCS_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0A
#define UX_HOST_CLASS_VIDEO_TCS_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0B
#define UX_HOST_CLASS_VIDEO_TCS_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0C
#define UX_HOST_CLASS_VIDEO_TCS_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0D
#define UX_HOST_CLASS_VIDEO_TCS_PU_DIGITAL_MULTIPLIER_CONTROL 0x0E
#define UX_HOST_CLASS_VIDEO_TCS_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0F
#define UX_HOST_CLASS_VIDEO_TCS_PU_HUE_AUTO_CONTROL 0x10
#define UX_HOST_CLASS_VIDEO_TCS_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11
#define UX_HOST_CLASS_VIDEO_TCS_PU_ANALOG_LOCK_STATUS_CONTROL 0x12
#define UX_HOST_CLASS_VIDEO_TCS_PU_CONTRAST_AUTO_CONTROL 0x13
#define UX_HOST_CLASS_VIDEO_TCS_XU_CONTROL_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_TCS_VS_CONTROL_UNDEFINED 0x00
#define UX_HOST_CLASS_VIDEO_TCS_VS_PROBE_CONTROL 0x01
#define UX_HOST_CLASS_VIDEO_TCS_VS_COMMIT_CONTROL 0x02
#define UX_HOST_CLASS_VIDEO_TCS_VS_STILL_PROBE_CONTROL 0x03
#define UX_HOST_CLASS_VIDEO_TCS_VS_STILL_COMMIT_CONTROL 0x04
#define UX_HOST_CLASS_VIDEO_TCS_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05
#define UX_HOST_CLASS_VIDEO_TCS_VS_STREAM_ERROR_CODE_CONTROL 0x06
#define UX_HOST_CLASS_VIDEO_TCS_VS_GENERATE_KEY_FRAME_CONTROL 0x07
#define UX_HOST_CLASS_VIDEO_TCS_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08
#define UX_HOST_CLASS_VIDEO_TCS_VS_SYNCH_DELAY_CONTROL 0x09
/* Define Video Class Probe and Commit Controls */
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_LENGTH 34
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_HINT 0
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_FORMAT_INDEX 2
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_FRAME_INDEX 3
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_FRAME_INTERVAL 4
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_KEY_FRAME_RATE 8
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_PFRAME_RAE 10
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_COMP_QUALITY 12
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_COMP_WINDOW_SIZE 14
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_DELAY 16
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_MAX_VIDEO_FRAME_SIZE 18
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_MAX_PAYLOAD_TRANSFER_SIZE 22
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_CLOCK_FREQUENCY 26
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_FRAMING_INFO 30
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_PREFERED_VERSION 31
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_MIN_VERSION 32
#define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_MAX_VERSION 33
#ifndef UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_COUNT
#define UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_COUNT 8
#endif
typedef struct UX_HOST_CLASS_VIDEO_INTERFACE_HEADER_DESCRIPTOR_STRUCT
{
ULONG bLength;
ULONG bDescriptorType;
ULONG bDescriptorSubType;
ULONG bcdUVC;
ULONG wTotalLength;
ULONG dwClockFrequency;
ULONG bInCollection;
ULONG baInterfaceNr;
} UX_HOST_CLASS_VIDEO_INTERFACE_HEADER_DESCRIPTOR;
/* Define Video Class specific input header interface descriptor. */
typedef struct UX_HOST_CLASS_VIDEO_INPUT_TERMINAL_DESCRIPTOR_STRUCT
{
ULONG bLength;
ULONG bDescriptorType;
ULONG bDescriptorSubType;
ULONG bTerminalID;
ULONG wTerminalType;
ULONG bAssocTerminal;
ULONG iTerminal;
} UX_HOST_CLASS_VIDEO_INPUT_TERMINAL_DESCRIPTOR;
/* Define Video Class specific input header interface descriptor. */
typedef struct UX_HOST_CLASS_VIDEO_INPUT_HEADER_DESCRIPTOR_STRUCT
{
ULONG bLength;
ULONG bDescriptorType;
ULONG bDescriptorSubType;
ULONG bNumFormats;
ULONG wTotalLength;
ULONG bEndpointAddress;
ULONG bmInfo;
ULONG bTerminalLink;
ULONG bStillCaptureMethod;
ULONG bTriggerSupport;
ULONG bTriggerUsage;
ULONG bControlSize;
ULONG bmaControls;
} UX_HOST_CLASS_VIDEO_INPUT_HEADER_DESCRIPTOR;
/* Define Video Class Selector descriptor. */
typedef struct UX_HOST_CLASS_VIDEO_SELECTOR_UNIT_DESCRIPTOR_STRUCT
{
ULONG bLength;
ULONG bDescriptorType;
ULONG bDescriptorSubtype;
ULONG bUnitID;
ULONG bNrInPins;
ULONG baSourceID;
} UX_HOST_CLASS_VIDEO_SELECTOR_UNIT_DESCRIPTOR;
/* Define Video Class Camera Terminal descriptor. */
typedef struct UX_HOST_CLASS_VIDEO_CAMERA_TERMINAL_DESCRIPTOR_STRUCT
{
ULONG bLength;
ULONG bDescriptorType;
ULONG bDescriptorSubtype;
ULONG bTerminalID;
ULONG wTerminalType;
ULONG bAssocTerminal;
ULONG iTerminal;
ULONG wObjectiveFocalLengthMin;
ULONG wObjectiveFocalLengthMax;
ULONG wOcularFocalLength;
ULONG bControlSize;
ULONG bmControls;
} UX_HOST_CLASS_VIDEO_CAMERA_TERMINAL_DESCRIPTOR;
/* Define Video Class Frame descriptor. */
typedef struct UX_HOST_CLASS_VIDEO_FRAME_DESCRIPTOR_STRUCT
{
ULONG bLength;
ULONG bDescriptorType;
ULONG bDescriptorSubtype;
ULONG bFrameIndex;
ULONG bmCapabilities;
ULONG wWidth;
ULONG wHeight;
ULONG dwMinBitRate;
ULONG dwMaxBitRate;
ULONG dwMaxVideoFrameBufferSize;
ULONG dwDefaultFrameInterval;
ULONG bFrameIntervalType;
} UX_HOST_CLASS_VIDEO_FRAME_DESCRIPTOR;
/* Define Video Class Processing Unit descriptor. */
typedef struct UX_HOST_CLASS_VIDEO_PROCESSING_UNIT_DESCRIPTOR_STRUCT
{
ULONG bLength;
ULONG bDescriptorType;
ULONG bDescriptorSubtype;
ULONG bUnitID;
ULONG bSourceID;
ULONG wMaxMultiplier;
ULONG bControlSize;
ULONG bmControls;
ULONG iProcessing;
ULONG bmVideoStandards;
} UX_HOST_CLASS_VIDEO_PROCESSING_UNIT_DESCRIPTOR;
/* Define Video Class instance structure. */
typedef struct UX_HOST_CLASS_VIDEO_STRUCT
{
struct UX_HOST_CLASS_VIDEO_STRUCT
*ux_host_class_video_next_instance;
UX_HOST_CLASS *ux_host_class_video_class;
UX_DEVICE *ux_host_class_video_device;
UX_INTERFACE *ux_host_class_video_streaming_interface;
ULONG ux_host_class_video_control_interface_number;
UX_ENDPOINT *ux_host_class_video_isochronous_endpoint;
UINT ux_host_class_video_state;
ULONG ux_host_class_video_feature_unit_id;
ULONG ux_host_class_video_terminal_id;
ULONG ux_host_class_video_terminal_type;
UCHAR *ux_host_class_video_configuration_descriptor;
ULONG ux_host_class_video_configuration_descriptor_length;
UCHAR ux_host_class_video_name[UX_HOST_CLASS_VIDEO_NAME_LENGTH];
ULONG ux_host_class_video_number_formats;
ULONG ux_host_class_video_length_formats;
UCHAR *ux_host_class_video_format_address;
UCHAR *ux_host_class_video_current_format_address;
ULONG ux_host_class_video_current_format;
ULONG ux_host_class_video_number_frames;
ULONG ux_host_class_video_current_frame;
UCHAR *ux_host_class_video_current_frame_address;
ULONG ux_host_class_video_current_frame_interval;
ULONG ux_host_class_video_current_max_payload_size;
UX_TRANSFER ux_host_class_video_transfer_requests[UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_COUNT];
ULONG ux_host_class_video_transfer_request_start_index;
ULONG ux_host_class_video_transfer_request_end_index;
UX_SEMAPHORE ux_host_class_video_semaphore;
UX_SEMAPHORE ux_host_class_video_semaphore_control_request;
VOID (*ux_host_class_video_transfer_completion_function)(UX_TRANSFER*);
} UX_HOST_CLASS_VIDEO;
/* Define Video Class isochronous USB transfer request structure. */
typedef struct UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_STRUCT
{
ULONG ux_host_class_video_transfer_request_status;
UCHAR * ux_host_class_video_transfer_request_data_pointer;
ULONG ux_host_class_video_transfer_request_requested_length;
ULONG ux_host_class_video_transfer_request_actual_length;
VOID (*ux_host_class_video_transfer_request_completion_function) (struct UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_STRUCT *);
UX_SEMAPHORE ux_host_class_video_transfer_request_semaphore;
VOID *ux_host_class_video_transfer_request_class_instance;
UINT ux_host_class_video_transfer_request_completion_code;
struct UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_STRUCT
*ux_host_class_video_transfer_request_next_video_transfer_request;
UX_TRANSFER ux_host_class_video_transfer_request;
} UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST;
/* Define Video Class channel/value control structures. */
typedef struct UX_HOST_CLASS_VIDEO_CONTROL_STRUCT
{
ULONG ux_host_class_video_control;
LONG ux_host_class_video_control_min;
LONG ux_host_class_video_control_max;
LONG ux_host_class_video_control_res;
LONG ux_host_class_video_control_cur;
} UX_HOST_CLASS_VIDEO_CONTROL;
/* Define Video Class input terminal structures. */
typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_INPUT_TERMINAL_STRUCT
{
ULONG ux_host_class_video_parameter_input_terminal_id;
ULONG ux_host_class_video_parameter_input_terminal_type;
} UX_HOST_CLASS_VIDEO_PARAMETER_INPUT_TERMINAL;
/* Define Video Class format number structure. */
typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_NUMBER_FORMATS_STRUCT
{
ULONG ux_host_class_video_parameter_number_formats;
} UX_HOST_CLASS_VIDEO_PARAMETER_NUMBER_FORMATS;
/* Define Video Class format data structure. */
typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_FORMAT_DATA_STRUCT
{
ULONG ux_host_class_video_parameter_format_requested;
ULONG ux_host_class_video_parameter_format_subtype;
ULONG ux_host_class_video_parameter_number_frame_descriptors;
} UX_HOST_CLASS_VIDEO_PARAMETER_FORMAT_DATA;
typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_DATA_STRUCT
{
ULONG ux_host_class_video_parameter_frame_requested;
ULONG ux_host_class_video_parameter_frame_subtype;
ULONG ux_host_class_video_parameter_frame_width;
ULONG ux_host_class_video_parameter_frame_height;
ULONG ux_host_class_video_parameter_default_frame_interval;
ULONG ux_host_class_video_parameter_frame_interval_type;
} UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_DATA;
typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_CHANNEL_STRUCT
{
ULONG ux_host_class_video_parameter_channel_bandwidth_selection;
ULONG ux_host_class_video_parameter_format_requested;
ULONG ux_host_class_video_parameter_frame_requested;
ULONG ux_host_class_video_parameter_frame_interval_requested;
} UX_HOST_CLASS_VIDEO_PARAMETER_CHANNEL;
typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_INTERVAL_STRUCT
{
ULONG ux_host_class_video_parameter_frame_requested;
ULONG *ux_host_class_video_parameter_frame_interval_buffer;
ULONG ux_host_class_video_parameter_frame_interval_buffer_length;
ULONG ux_host_class_video_parameter_frame_interval_buffer_length_written;
} UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_INTERVAL;
/* Define Video Class function prototypes. */
UINT _ux_host_class_video_activate(UX_HOST_CLASS_COMMAND *command);
UINT _ux_host_class_video_configure(UX_HOST_CLASS_VIDEO *video);
UINT _ux_host_class_video_control_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_CONTROL *video_control);
UINT _ux_host_class_video_control_value_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_CONTROL *video_control);
UINT _ux_host_class_video_control_value_set(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_CONTROL *video_control);
UINT _ux_host_class_video_deactivate(UX_HOST_CLASS_COMMAND *command);
UINT _ux_host_class_video_descriptor_get(UX_HOST_CLASS_VIDEO *video);
UINT _ux_host_class_video_endpoints_get(UX_HOST_CLASS_VIDEO *video);
UINT _ux_host_class_video_entry(UX_HOST_CLASS_COMMAND *command);
UINT _ux_host_class_video_read(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST *video_transfer_request);
UINT _ux_host_class_video_transfer_request(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST *video_transfer_request);
VOID _ux_host_class_video_transfer_request_completed(UX_TRANSFER *transfer_request);
VOID _ux_host_class_video_transfer_request_callback(UX_TRANSFER *transfer_request);
UINT _ux_host_class_video_control_list_get(UX_HOST_CLASS_VIDEO *video);
UINT _ux_host_class_video_input_format_get(UX_HOST_CLASS_VIDEO *video);
UINT _ux_host_class_video_input_terminal_get(UX_HOST_CLASS_VIDEO *video);
UINT _ux_host_class_video_alternate_setting_locate(UX_HOST_CLASS_VIDEO *video, UINT max_payload_size, UINT *alternate_setting);
UINT _ux_host_class_video_ioctl(UX_HOST_CLASS_VIDEO *video, ULONG ioctl_function, VOID *parameter);
UINT _ux_host_class_video_format_data_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_PARAMETER_FORMAT_DATA *format_parameter);
UINT _ux_host_class_video_frame_data_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_DATA *frame_parameter);
UINT _ux_host_class_video_frame_interval_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_INTERVAL *interval_parameter);
UINT _ux_host_class_video_channel_start(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_PARAMETER_CHANNEL *video_parameter);
UINT _ux_host_class_video_stop(UX_HOST_CLASS_VIDEO *video);
UINT _ux_host_class_video_start(UX_HOST_CLASS_VIDEO *video);
UINT _ux_host_class_video_frame_parameters_set(UX_HOST_CLASS_VIDEO *video, ULONG frame_format, ULONG width, ULONG height, ULONG frame_interval);
ULONG _ux_host_class_video_max_payload_get(UX_HOST_CLASS_VIDEO *video);
UINT _ux_host_class_video_transfer_buffer_add(UX_HOST_CLASS_VIDEO *video, UCHAR* buffer);
UINT _ux_host_class_video_transfer_buffers_add(UX_HOST_CLASS_VIDEO *video, UCHAR** buffers, ULONG num_buffers);
VOID _ux_host_class_video_transfer_callback_set(UX_HOST_CLASS_VIDEO *video, VOID (*callback_function)(UX_TRANSFER*));
UINT _ux_host_class_video_entities_parse(UX_HOST_CLASS_VIDEO *video,
UINT(*parse_function)(VOID *arg,
UCHAR *packed_interface_descriptor,
UCHAR *packed_entity_descriptor),
VOID* arg);
UINT _ux_host_class_video_control_request(UX_HOST_CLASS_VIDEO *video,
UINT request, UCHAR interface_index,
UINT entity_id, UINT control_selector,
UCHAR *parameter, UINT parameter_size);
/* Define Video Class API prototypes. */
#define ux_host_class_video_entry _ux_host_class_video_entry
#define ux_host_class_video_control_get _ux_host_class_video_control_get
#define ux_host_class_video_control_value_get _ux_host_class_video_control_value_get
#define ux_host_class_video_control_value_set _ux_host_class_video_control_value_set
#define ux_host_class_video_read _ux_host_class_video_read
#define ux_host_class_video_ioctl _ux_host_class_video_ioctl
#define ux_host_class_video_start _ux_host_class_video_start
#define ux_host_class_video_stop _ux_host_class_video_stop
#define ux_host_class_video_frame_parameters_set _ux_host_class_video_frame_parameters_set
#define ux_host_class_video_max_payload_get _ux_host_class_video_max_payload_get
#define ux_host_class_video_transfer_buffer_add _ux_host_class_video_transfer_buffer_add
#define ux_host_class_video_transfer_buffers_add _ux_host_class_video_transfer_buffers_add
#define ux_host_class_video_transfer_callback_set _ux_host_class_video_transfer_callback_set
#define ux_host_class_video_entities_parse _ux_host_class_video_entities_parse
#define ux_host_class_video_control_request _ux_host_class_video_control_request
/* Determine if a C++ compiler is being used. If so, complete the standard
C conditional started above. */
#ifdef __cplusplus
}
#endif
#endif