usbx/common/usbx_device_classes/inc/ux_device_class_video.h
Bo Chen (from Dev Box) a6087c2efa Update copyright.
2024-01-29 14:21:32 +08:00

751 lines
47 KiB
C

/***************************************************************************
* Copyright (c) 2024 Microsoft Corporation
*
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
*
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** USBX Component */
/** */
/** Video Class */
/** */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/* */
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_video.h PORTABLE C */
/* 6.3.0 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
/* */
/* DESCRIPTION */
/* */
/* This file contains all the header and extern functions used by the */
/* USBX device video class. */
/* */
/* RELEASE HISTORY */
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
/* 10-31-2023 Yajun xia, CQ Xiao Modified comment(s), */
/* added a new mode to manage */
/* endpoint buffer in classes */
/* with zero copy enabled, */
/* added error checks support, */
/* resulting in version 6.3.0 */
/* */
/**************************************************************************/
#ifndef UX_DEVICE_CLASS_VIDEO_H
#define UX_DEVICE_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
/* Internal option: enable the basic USBX error checking. This define is typically used
while debugging application. */
#if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING)
#define UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING
#endif
/* Define options. */
#define UX_DEVICE_CLASS_VIDEO_THREAD_STACK_SIZE UX_THREAD_STACK_SIZE
/* Define external static data. */
extern UCHAR _ux_system_device_class_video_name[];
/* Define IOCTL code.
ux_device_class_video_ioctl(video, IOCTL_CODE, parameter).
*/
#define UX_DEVICE_CLASS_VIDEO_IOCTL_GET_ARG 0x01
/* Define Video Class main constants. */
#define UX_DEVICE_CLASS_VIDEO_CLASS 0x0e
#define UX_DEVICE_CLASS_VIDEO_SUBCLASS_UNDEFINED 0
#define UX_DEVICE_CLASS_VIDEO_SUBCLASS_CONTROL 1
#define UX_DEVICE_CLASS_VIDEO_SUBCLASS_STREAMING 2
#define UX_DEVICE_CLASS_VIDEO_SUBCLASS_INTERFACE_COLLECTION 3
/* Class Code (CC). */
#define UX_DEVICE_CLASS_VIDEO_CC_VIDEO 0x0e
/* Subclass Code (SC). */
#define UX_DEVICE_CLASS_VIDEO_SC_UNDEFINED 0
#define UX_DEVICE_CLASS_VIDEO_SC_CONTROL 1
#define UX_DEVICE_CLASS_VIDEO_SC_STREAMING 2
#define UX_DEVICE_CLASS_VIDEO_SC_INTERFACE_COLLECTION 3
/* Protocol Code. */
#define UX_DEVICE_CLASS_VIDEO_PC_PROTOCOL_UNDEFINED 0
#define UX_DEVICE_CLASS_VIDEO_PC_PROTOCOL_15 0
/* Define Video Class-Specific (CS) descriptor types. */
#define UX_DEVICE_CLASS_VIDEO_CS_UNDEFINED 0x20
#define UX_DEVICE_CLASS_VIDEO_CS_DEVICE 0x21
#define UX_DEVICE_CLASS_VIDEO_CS_CONFIGURATION 0x22
#define UX_DEVICE_CLASS_VIDEO_CS_STRING 0x23
#define UX_DEVICE_CLASS_VIDEO_CS_INTERFACE 0x24
#define UX_DEVICE_CLASS_VIDEO_CS_ENDPOINT 0x25
/* Define Video Class specific Video Control (VC) interface descriptor subtypes. */
#define UX_DEVICE_CLASS_VIDEO_VC_DESCRIPTOR_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_VC_HEADER 0x01
#define UX_DEVICE_CLASS_VIDEO_VC_INPUT_TERMINAL 0x02
#define UX_DEVICE_CLASS_VIDEO_VC_OUTPUT_TERMINAL 0x03
#define UX_DEVICE_CLASS_VIDEO_VC_SELECTOR_UNIT 0x04
#define UX_DEVICE_CLASS_VIDEO_VC_PROCESSING_UNIT 0x05
#define UX_DEVICE_CLASS_VIDEO_VC_EXTENSION_UNIT 0x06
#define UX_DEVICE_CLASS_VIDEO_VC_ENCODING_UNIT 0x07
/* Define Video Class specific Video Stream (VS) interface descriptor subtypes. */
#define UX_DEVICE_CLASS_VIDEO_VS_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_VS_INPUT_HEADER 0x01
#define UX_DEVICE_CLASS_VIDEO_VS_OUTPUT_HEADER 0x02
#define UX_DEVICE_CLASS_VIDEO_VS_STILL_IMAGE_FRAME 0x03
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_UNCOMPRESSED 0x04
#define UX_DEVICE_CLASS_VIDEO_VS_FRAME_UNCOMPRESSED 0x05
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_MJPEG 0x06
#define UX_DEVICE_CLASS_VIDEO_VS_FRAME_MJPEG 0x07
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_MPEG2TS 0x0A
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_DV 0x0C
#define UX_DEVICE_CLASS_VIDEO_VS_COLORFORMAT 0x0D
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_FRAME_BASED 0x10
#define UX_DEVICE_CLASS_VIDEO_VS_FRAME_FRAME_BASED 0x11
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_STREAM_BASED 0x12
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_H264 0x13
#define UX_DEVICE_CLASS_VIDEO_VS_FRAME_H264 0x14
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_H264_SIMULCAST 0x15
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_VP8 0x16
#define UX_DEVICE_CLASS_VIDEO_VS_FRAME_VP8 0x17
#define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_VP8_SIMULCAST 0x18
/* Define Video Class specific Endpoint (EP) descriptor subtypes. */
#define UX_DEVICE_CLASS_VIDEO_EP_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_EP_GENERAL 0x01
#define UX_DEVICE_CLASS_VIDEO_EP_ENDPOINT 0x02
#define UX_DEVICE_CLASS_VIDEO_EP_INTERRUPT 0x03
/* Define Video Control Selector Codes. */
/* Define VideoControl (VC) Interface Control Selector Codes. */
#define UX_DEVICE_CLASS_VIDEO_VC_CONTROL_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_VC_VIDEO_POWER_MODE_CONTROL 0x01
#define UX_DEVICE_CLASS_VIDEO_VC_REQUEST_ERROR_CODE_CONTROL 0x02
/* Define Terminal Control (TE) Selectors. */
#define UX_DEVICE_CLASS_VIDEO_TE_CONTROL_UNDEFINED 0x00
/* Define Selector Unit (SU) Control Selectors. */
#define UX_DEVICE_CLASS_VIDEO_SU_CONTROL_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_SU_INPUT_SELECT_CONTROL 0x01
/* Define Camera Terminal (CT) Control Selectors. */
#define UX_DEVICE_CLASS_VIDEO_CT_CONTROL_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_CT_SCANNING_MODE_CONTROL 0x01
#define UX_DEVICE_CLASS_VIDEO_CT_AE_MODE_CONTROL 0x02
#define UX_DEVICE_CLASS_VIDEO_CT_AE_PRIORITY_CONTROL 0x03
#define UX_DEVICE_CLASS_VIDEO_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04
#define UX_DEVICE_CLASS_VIDEO_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05
#define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_ABSOLUTE_CONTROL 0x06
#define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_RELATIVE_CONTROL 0x07
#define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_AUTO_CONTROL 0x08
#define UX_DEVICE_CLASS_VIDEO_CT_IRIS_ABSOLUTE_CONTROL 0x09
#define UX_DEVICE_CLASS_VIDEO_CT_IRIS_RELATIVE_CONTROL 0x0A
#define UX_DEVICE_CLASS_VIDEO_CT_ZOOM_ABSOLUTE_CONTROL 0x0B
#define UX_DEVICE_CLASS_VIDEO_CT_ZOOM_RELATIVE_CONTROL 0x0C
#define UX_DEVICE_CLASS_VIDEO_CT_PANTILT_ABSOLUTE_CONTROL 0x0D
#define UX_DEVICE_CLASS_VIDEO_CT_PANTILT_RELATIVE_CONTROL 0x0E
#define UX_DEVICE_CLASS_VIDEO_CT_ROLL_ABSOLUTE_CONTROL 0x0F
#define UX_DEVICE_CLASS_VIDEO_CT_ROLL_RELATIVE_CONTROL 0x10
#define UX_DEVICE_CLASS_VIDEO_CT_PRIVACY_CONTROL 0x11
#define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_SIMPLE_CONTROL 0x12
#define UX_DEVICE_CLASS_VIDEO_CT_WINDOW_CONTROL 0x13
#define UX_DEVICE_CLASS_VIDEO_CT_REGION_OF_INTEREST_CONTROL 0x14
/* Define Processing Unit (PU) Control Selectors. */
#define UX_DEVICE_CLASS_VIDEO_PU_CONTROL_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01
#define UX_DEVICE_CLASS_VIDEO_PU_BRIGHTNESS_CONTROL 0x02
#define UX_DEVICE_CLASS_VIDEO_PU_CONTRAST_CONTROL 0x03
#define UX_DEVICE_CLASS_VIDEO_PU_GAIN_CONTROL 0x04
#define UX_DEVICE_CLASS_VIDEO_PU_POWER_LINE_FREQUENCY_CONTROL 0x05
#define UX_DEVICE_CLASS_VIDEO_PU_HUE_CONTROL 0x06
#define UX_DEVICE_CLASS_VIDEO_PU_SATURATION_CONTROL 0x07
#define UX_DEVICE_CLASS_VIDEO_PU_SHARPNESS_CONTROL 0x08
#define UX_DEVICE_CLASS_VIDEO_PU_GAMMA_CONTROL 0x09
#define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0A
#define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0B
#define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0C
#define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0D
#define UX_DEVICE_CLASS_VIDEO_PU_DIGITAL_MULTIPLIER_CONTROL 0x0E
#define UX_DEVICE_CLASS_VIDEO_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0F
#define UX_DEVICE_CLASS_VIDEO_PU_HUE_AUTO_CONTROL 0x10
#define UX_DEVICE_CLASS_VIDEO_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11
#define UX_DEVICE_CLASS_VIDEO_PU_ANALOG_LOCK_STATUS_CONTROL 0x12
#define UX_DEVICE_CLASS_VIDEO_PU_CONTRAST_AUTO_CONTROL 0x13
/* Define eXtension Unit (XU) Control Selectors. */
#define UX_DEVICE_CLASS_VIDEO_XU_CONTROL_UNDEFINED 0x00
/* Define VideoStreaming (VS) Interface Control Selectors. */
#define UX_DEVICE_CLASS_VIDEO_VS_CONTROL_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_VS_PROBE_CONTROL 0x01
#define UX_DEVICE_CLASS_VIDEO_VS_COMMIT_CONTROL 0x02
#define UX_DEVICE_CLASS_VIDEO_VS_STILL_PROBE_CONTROL 0x03
#define UX_DEVICE_CLASS_VIDEO_VS_STILL_COMMIT_CONTROL 0x04
#define UX_DEVICE_CLASS_VIDEO_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05
#define UX_DEVICE_CLASS_VIDEO_VS_STREAM_ERROR_CODE_CONTROL 0x06
#define UX_DEVICE_CLASS_VIDEO_VS_GENERATE_KEY_FRAME_CONTROL 0x07
#define UX_DEVICE_CLASS_VIDEO_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08
#define UX_DEVICE_CLASS_VIDEO_VS_SYNCH_DELAY_CONTROL 0x09
/* Define USB Video Class terminal types. */
/* Define USB Terminal Types (TT). */
#define UX_DEVICE_CLASS_VIDEO_TT_VENDOR_SPECIFIC 0x0100
#define UX_DEVICE_CLASS_VIDEO_TT_STREAMING 0x0101
/* Define USB Input Terminal Types (ITT). */
#define UX_DEVICE_CLASS_VIDEO_ITT_VENDOR_SPECIFIC 0x0200
#define UX_DEVICE_CLASS_VIDEO_ITT_CAMERA 0x0201
#define UX_DEVICE_CLASS_VIDEO_ITT_MEDIA_TRANSPORT_INPUT 0x0202
/* Define USB Output Terminal Types (OTT). */
#define UX_DEVICE_CLASS_VIDEO_OTT_VENDOR_SPECIFIC 0x0300
#define UX_DEVICE_CLASS_VIDEO_OTT_DISPLAY 0x0301
#define UX_DEVICE_CLASS_VIDEO_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302
/* Define USB External Terminal Types (XTT). */
#define UX_DEVICE_CLASS_VIDEO_XTT_EXTERNAL_VENDOR_SPECIFIC 0x0400
#define UX_DEVICE_CLASS_VIDEO_XTT_COMPOSITE_CONNECTOR 0x0401
#define UX_DEVICE_CLASS_VIDEO_XTT_SVIDEO_CONNECTOR 0x0402
#define UX_DEVICE_CLASS_VIDEO_XTT_COMPONENT_CONNECTOR 0x0403
/* Video Class GET_INFO Capabilities and status structs and definitions. */
#define UX_DEVICE_CLASS_VIDEO_INFO_GET_REQUEST_SUPPORT (1u << 0)
#define UX_DEVICE_CLASS_VIDEO_INFO_SET_REQUEST_SUPPORT (1u << 1)
#define UX_DEVICE_CLASS_VIDEO_INFO_DISABLED_DUE_TO_AUTO_MODE (1u << 2)
#define UX_DEVICE_CLASS_VIDEO_INFO_AUTOUPDATE_CONTROL (1u << 3)
#define UX_DEVICE_CLASS_VIDEO_INFO_ASYNCHRONOUS_CONTROL (1u << 4)
#define UX_DEVICE_CLASS_VIDEO_INFO_DISABLED_DUE_TO_STATE (1u << 5)
/* Video Class Probe and Commit Controls structs and definitions. */
typedef struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_STRUCT
{
union UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmHint_UNION {
USHORT value;
struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmHint_STRUCT {
USHORT dwFrameInterval:1;
USHORT wKeyFrameRate:1;
USHORT wPFrameRate:1;
USHORT wCompQuality:1;
USHORT wCompWindowSize:1;
} bm;
} bmHint;
UCHAR bFormatIndex;
UCHAR bFrameIndex;
ULONG dwFrameInterval;
USHORT wKeyFrameRate;
USHORT wPFrameRate;
USHORT wCompQuality;
USHORT wCompWindowSize;
USHORT wDelay;
UCHAR dwMaxVideoFrameSize[4]; /* Not alignend from now on. */
UCHAR dwMaxPayloadTransferSize[4];
UCHAR dwClockFrequency[4];
union UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmFramingInfo_UNION {
UCHAR value;
struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmFramingInfo_STRUCT {
UCHAR FID_required:1;
UCHAR EOF_may_present:1;
UCHAR EOS_may_present:1;
} bm;
} bmFramingInfo;
UCHAR bPreferedVersion;
UCHAR bMinVersion;
UCHAR bMaxVersion;
/* Start from offset 34, additional fields introduced in UVC 1.5. */
UCHAR bUsage;
UCHAR bBitDepthLuma;
UCHAR bmSettings;
UCHAR bMaxNumberOfRefFramesPlus1;
union UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmRateControlModes_UNION {
USHORT value;
struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmRateControlModes_STRUCT {
USHORT rate_ctrl_mode_0:4;
USHORT rate_ctrl_mode_1:4;
USHORT rate_ctrl_mode_2:4;
USHORT rate_ctrl_mode_3:4;
} bm;
} bmRateControlModes;
UCHAR bmLayoutPerStream;
} UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL;
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_OFFSET 0
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_FRAME_INTERVAL (1U<<0)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_KEY_FRAME_RATE (1U<<1)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_KEY_P_FRAME_RATE (1U<<2)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_COMP_QUALITY (1U<<3)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_COMP_WINDOW_SIZE (1U<<4)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FORMAT_INDEX_OFFSET 2
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAME_INDEX_OFFSET 3
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAME_INTERVAL_OFFSET 4
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_KEY_FRAME_RATE_OFFSET 8
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_P_FRAME_RATE_OFFSET 10
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_COMP_QUALITY_OFFSET 12
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_COMP_WINDOW_SIZE_OFFSET 14
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_DELAY_OFFSET 16
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_VIDEO_FRAME_SIZE_OFFSET 18
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_PAYLOAD_TRANSFER_SIZE_OFFSET 22
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_CLOCK_FREQUENCY_OFFSET 26
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_OFFSET 30
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_FID_REQUIRED (1U<<0)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_EOF_MAY_PRESENT (1U<<1)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_EOS_MAY_PRESENT (1U<<2)
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_PREFERED_VERSION_OFFSET 31
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MIN_VERSION_OFFSET 32
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_VERSION_OFFSET 33
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_USAGE_OFFSET 34
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_BIT_DEPTH_LUMA_OFFSET 35
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_SETTINGS_OFFSET 36
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_N_OF_FRAMES_PLUS1_OFFSET 37
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODES_OFFSET 38
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_NOT_APPLICABLE 0U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_VBR_WITH_UNDERFLOW 1U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_CBR 2U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_CONSTANT_QP 3U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_GLOBAL_VBR_WITH_UNDERFLOW 4U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_VBR 5U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_GLOBAL_VBR 6U
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_LAYOUT_PER_STREAM_OFFSET 40
/* Video Class Still Probe and Commit Controls structs and definitions. */
typedef struct UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_STRUCT
{
UCHAR bFormatIndex;
UCHAR bFrameIndex;
UCHAR bCompressionIndex;
UCHAR dwMaxVideoFrameSize[4]; /* Not aligned from now. */
UCHAR dwMaxPayloadTransferSize[4];
} UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL;
#define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_FORMAT_INDEX_OFFSET 0
#define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_FRAME_INDEX_OFFSET 1
#define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_COMPRESSION_INDEX_OFFSET 2
#define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_MAX_VIDEO_FRAME_SIZE_OFFSET 3
#define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_MAX_PAYLOAD_TRANSFER_SIZE_OFFSET 7
/* Video Class Status Packet structs and definitions. */
/* Offsets and possible values. */
typedef struct UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_HEADER_STRUCT
{
UCHAR bStatusType;
UCHAR bOriginator;
} UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_HEADER;
typedef struct UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_STRUCT
{
UCHAR bStatusType;
UCHAR bOriginator;
UCHAR bEvent;
UCHAR bSelector;
UCHAR bAttribute;
UCHAR bValue[1]; /* varies on bAttribute. */
} UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC;
typedef struct UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VS_STRUCT
{
UCHAR bStatusType;
UCHAR bOriginator;
UCHAR bEvent;
UCHAR bValue[1]; /* varies on bEvent. */
} UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VS;
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_TYPE_OFFSET 0
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_TYPE_VC 1
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_TYPE_VS 2
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_ORIGINATOR_OFFSET 1
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_EVENT_OFFSET 2
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_SELECTOR_OFFSET 3
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_ATTRIBUTE_OFFSET 4
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_VALUE_OFFSET 5
#define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VS_VALUE_OFFSET 3
/* Define Video Class Payload Header structs and definitions. */
typedef struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_STRUCT
{
UCHAR bHeaderLength;
union UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_INFO_UNION {
UCHAR value;
struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_INFO_STRUCT {
UCHAR bFID:1; /* Frame ID. */
UCHAR bEOF:1; /* End of Frame. */
UCHAR bPTS:1; /* Presentation Time. */
UCHAR bSCR:1; /* Source Clock Reference. */
UCHAR bRES:1; /* Reserved, Payload Specific. */
UCHAR bSTI:1; /* Still Image. */
UCHAR bERR:1; /* Error. */
UCHAR bEOH:1; /* End of Header. */
} bm;
} bmHeaderInfo;
UCHAR dwPresentationTime[4];
union UX_DEVICE_CLASS_VIDEO_PAYLOAD_SCR_UNION {
UCHAR byte_array[6];
struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_SCR_STRUCT {
UCHAR STC[4]; /* SourceTimeClock. */
USHORT SCR; /* 1KHz SOF token counter. */
} bm;
} scrSourceClock;
} UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER;
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_LENGTH_OFFSET 0
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_INFO_OFFSET 1
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_PRESENTATION_TIME_OFFSET 4
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_PTS_OFFSET 4
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_SCR_SOURCE_CLOCK_OFFSET 6
#define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_SCR_OFFSET 6
/* Define Video Class specific request codes. */
#define UX_DEVICE_CLASS_VIDEO_REQUEST_CODE_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_RC_UNDEFINED 0x00
#define UX_DEVICE_CLASS_VIDEO_SET_CUR 0x01
#define UX_DEVICE_CLASS_VIDEO_GET_CUR 0x81
#define UX_DEVICE_CLASS_VIDEO_GET_MIN 0x82
#define UX_DEVICE_CLASS_VIDEO_GET_MAX 0x83
#define UX_DEVICE_CLASS_VIDEO_GET_RES 0x84
#define UX_DEVICE_CLASS_VIDEO_GET_INFO 0x86
#define UX_DEVICE_CLASS_VIDEO_GET_DEF 0x87
#define UX_DEVICE_CLASS_VIDEO_GET_CUR_ALL 0x91
#define UX_DEVICE_CLASS_VIDEO_GET_MIN_ALL 0x92
#define UX_DEVICE_CLASS_VIDEO_GET_MAX_ALL 0x93
#define UX_DEVICE_CLASS_VIDEO_GET_RES_ALL 0x94
#define UX_DEVICE_CLASS_VIDEO_GET_GET_DEF_ALL 0x97
/* Define Video Class Device Power Modes. */
#define UX_DEVICE_CLASS_VIDEO_POWER_MODE_MASK 0x0Fu
#define UX_DEVICE_CLASS_VIDEO_POWER_MODE_FULL 0x00u
#define UX_DEVICE_CLASS_VIDEO_POWER_MODE_DEVICE_DEPENDENT 0x01u
#define UX_DEVICE_CLASS_VIDEO_POWER_DEPENDENT_MODE_SUPPORTED 0x10u
#define UX_DEVICE_CLASS_VIDEO_POWER_USES_USB 0x20u
#define UX_DEVICE_CLASS_VIDEO_POWER_USES_BATTERY 0x40u
#define UX_DEVICE_CLASS_VIDEO_POWER_USES_AC 0x80u
/* Define Video Class Request Error Codes. */
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_NO_ERROR 0x00
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_NOT_READY 0x01
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_WRONG_STATE 0x02
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_POWER 0x03
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_OUT_OF_RANGE 0x04
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_INPUT 0x05
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_CONTROL 0x06
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_REQUEST 0x07
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_VALUE_WITHIN_RANGE 0x08
#define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_UNKNOWN 0xFF
/* Define Video Class Probe and Commit Controls */
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_LENGTH_1_1 34
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_LENGTH_1_5 48
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_HINT_OFFSET 0
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FORMAT_INDEX_OFFSET 2
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FRAME_INDEX_OFFSET 3
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FRAME_INTERVAL_OFFSET 4
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_KEY_FRAME_RATE_OFFSET 8
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_PFRAME_RAE_OFFSET 10
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_COMP_QUALITY_OFFSET 12
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_COMP_WINDOW_SIZE_OFFSET 14
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_DELAY_OFFSET 16
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_VIDEO_FRAME_SIZE_OFFSET 18
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_PAYLOAD_TRANSFER_SIZE_OFFSET 22
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CLOCK_FREQUENCY_OFFSET 26
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FRAMING_INFO_OFFSET 30
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_PREFERED_VERSION_OFFSET 31
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MIN_VERSION_OFFSET 32
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_VERSION_OFFSET 33
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_USAGE_OFFSET 34
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_BIT_DEPTH_LUMA_OFFSET 35
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_SETTINGS_OFFSET 36
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_NUMBER_OF_REF_FRAMES_PLUS1_OFFSET 37
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_RATE_CONTROL_MODES_OFFSET 38
#define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_LAYOUT_PER_STREAM_OFFSET 40
/* Define Video Class Stream Error Codes. */
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_NO_ERROR 0
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_PROTECTED_CONTENT 1
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_INPUT_BUFFER_UNDERRUN 2
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_DATA_DISCONTINUITY 3
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_OUTPUT_BUFFER_UNDERRUN 4
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_OUTPUT_BUFFER_OVERRUN 5
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_FORMAT_CHANGE 6
#define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_STILL_IMAGE_CAPTURE_ERROR 7
/* Define Video Class Task states. */
#define UX_DEVICE_CLASS_VIDEO_STREAM_RW_STOP (UX_STATE_RESET)
#define UX_DEVICE_CLASS_VIDEO_STREAM_RW_START (UX_STATE_STEP + 1)
#define UX_DEVICE_CLASS_VIDEO_STREAM_RW_WAIT (UX_STATE_STEP + 2)
/* Define Video Class callback structure. */
struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT;
struct UX_DEVICE_CLASS_VIDEO_STRUCT;
typedef struct UX_DEVICE_CLASS_VIDEO_CALLBACKS_STRUCT
{
VOID (*ux_slave_class_video_instance_activate)(VOID *);
VOID (*ux_slave_class_video_instance_deactivate)(VOID *);
UINT (*ux_device_class_video_request)(struct UX_DEVICE_CLASS_VIDEO_STRUCT *, UX_SLAVE_TRANSFER *);
VOID *ux_device_class_video_arg;
} UX_DEVICE_CLASS_VIDEO_CALLBACKS;
typedef struct UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS_STRUCT
{
VOID (*ux_device_class_video_stream_change)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT *, ULONG);
UINT (*ux_device_class_video_stream_request)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT *, UX_SLAVE_TRANSFER *);
VOID (*ux_device_class_video_stream_payload_done)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT *, ULONG);
} UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS;
/* Define Video Class Calling Parameter structure */
typedef struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_STRUCT
{
ULONG ux_device_class_video_payload_length;
UCHAR ux_device_class_video_payload_data[4]; /* Actually size of length. */
} UX_DEVICE_CLASS_VIDEO_PAYLOAD;
typedef struct UX_DEVICE_CLASS_VIDEO_STREAM_PARAMETER_STRUCT
{
#if defined(UX_DEVICE_STANDALONE)
UINT (*ux_device_class_video_stream_parameter_task_function)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT*);
#else
ULONG ux_device_class_video_stream_parameter_thread_stack_size;
VOID (*ux_device_class_video_stream_parameter_thread_entry)(ULONG id);
#endif
UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS ux_device_class_video_stream_parameter_callbacks;
ULONG ux_device_class_video_stream_parameter_max_payload_buffer_size;
ULONG ux_device_class_video_stream_parameter_max_payload_buffer_nb;
} UX_DEVICE_CLASS_VIDEO_STREAM_PARAMETER;
typedef struct UX_DEVICE_CLASS_VIDEO_PARAMETER_STRUCT
{
ULONG ux_device_class_video_parameter_master_interface;
UX_DEVICE_CLASS_VIDEO_CALLBACKS ux_device_class_video_parameter_callbacks;
ULONG ux_device_class_video_parameter_streams_nb;
UX_DEVICE_CLASS_VIDEO_STREAM_PARAMETER *ux_device_class_video_parameter_streams;
} UX_DEVICE_CLASS_VIDEO_PARAMETER;
typedef struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT
{
struct UX_DEVICE_CLASS_VIDEO_STRUCT *ux_device_class_video_stream_video;
UX_SLAVE_INTERFACE *ux_device_class_video_stream_interface;
UX_SLAVE_ENDPOINT *ux_device_class_video_stream_endpoint;
ULONG ux_device_class_video_stream_error;
UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS ux_device_class_video_stream_callbacks;
#if !defined(UX_DEVICE_STANDALONE)
UCHAR *ux_device_class_video_stream_thread_stack;
UX_THREAD ux_device_class_video_stream_thread;
#else
UINT (*ux_device_class_video_stream_task_function)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT*);
UINT ux_device_class_video_stream_task_state;
UINT ux_device_class_video_stream_task_status;
#endif
ULONG ux_device_class_video_stream_buffer_error_count;
UCHAR *ux_device_class_video_stream_buffer;
ULONG ux_device_class_video_stream_buffer_size;
ULONG ux_device_class_video_stream_payload_buffer_size;
UX_DEVICE_CLASS_VIDEO_PAYLOAD *ux_device_class_video_stream_transfer_pos;
UX_DEVICE_CLASS_VIDEO_PAYLOAD *ux_device_class_video_stream_access_pos;
} UX_DEVICE_CLASS_VIDEO_STREAM;
#define _ux_device_class_video_stream_error_set(s,e) do { \
(s)->ux_device_class_video_stream_error = (e); \
} while(0)
typedef struct UX_DEVICE_CLASS_VIDEO_STRUCT
{
UX_SLAVE_CLASS *ux_device_class_video_class;
UX_SLAVE_DEVICE *ux_device_class_video_device;
UX_SLAVE_INTERFACE *ux_device_class_video_interface;
ULONG ux_device_class_video_error;
UX_DEVICE_CLASS_VIDEO_CALLBACKS ux_device_class_video_callbacks;
ULONG ux_device_class_video_streams_nb;
UX_DEVICE_CLASS_VIDEO_STREAM *ux_device_class_video_streams;
} UX_DEVICE_CLASS_VIDEO;
#define _ux_device_class_video_request_error_set(v,e) do { \
(v)->ux_device_class_video_error = (e); \
} while(0)
/* Define Video Class function prototypes. */
UINT _ux_device_class_video_initialize(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_uninitialize(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_activate(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_change(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_deactivate(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_control_request(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_entry(UX_SLAVE_CLASS_COMMAND *command);
UINT _ux_device_class_video_ioctl(UX_DEVICE_CLASS_VIDEO *video, ULONG ioctl_function,
VOID *parameter);
UINT _ux_device_class_video_stream_get(UX_DEVICE_CLASS_VIDEO *video, ULONG stream_index, UX_DEVICE_CLASS_VIDEO_STREAM **stream);
VOID _ux_device_class_video_write_thread_entry(ULONG video_stream);
VOID _ux_device_class_video_read_thread_entry(ULONG video_stream);
ULONG _ux_device_class_video_max_payload_length(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _ux_device_class_video_reception_start(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _ux_device_class_video_read_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **payload_data, ULONG *payload_length);
UINT _ux_device_class_video_read_payload_free(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _ux_device_class_video_transmission_start(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _ux_device_class_video_write_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **buffer, ULONG *max_length);
UINT _ux_device_class_video_write_payload_commit(UX_DEVICE_CLASS_VIDEO_STREAM *video, ULONG length);
UINT _ux_device_class_video_tasks_run(VOID *instance);
UINT _ux_device_class_video_read_task_function(UX_DEVICE_CLASS_VIDEO_STREAM *stream);
UINT _ux_device_class_video_write_task_function(UX_DEVICE_CLASS_VIDEO_STREAM *stream);
UINT _uxe_device_class_video_initialize(UX_SLAVE_CLASS_COMMAND *command);
ULONG _uxe_device_class_video_max_payload_length(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _uxe_device_class_video_reception_start(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _uxe_device_class_video_read_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **payload_data, ULONG *payload_length);
UINT _uxe_device_class_video_read_payload_free(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _uxe_device_class_video_transmission_start(UX_DEVICE_CLASS_VIDEO_STREAM *video);
UINT _uxe_device_class_video_write_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **buffer, ULONG *max_length);
UINT _uxe_device_class_video_write_payload_commit(UX_DEVICE_CLASS_VIDEO_STREAM *video, ULONG length);
UINT _uxe_device_class_video_ioctl(UX_DEVICE_CLASS_VIDEO *video, ULONG ioctl_function, VOID *parameter);
/* Define Video Class API prototypes. */
#if defined(UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING)
#define ux_device_class_video_entry _ux_device_class_video_entry
#define ux_device_class_video_read_thread_entry _ux_device_class_video_read_thread_entry
#define ux_device_class_video_write_thread_entry _ux_device_class_video_write_thread_entry
#define ux_device_class_video_request_error_set _ux_device_class_video_request_error_set
#define ux_device_class_video_stream_error_set _ux_device_class_video_stream_error_set
#define ux_device_class_video_stream_get _ux_device_class_video_stream_get
#define ux_device_class_video_max_payload_length _uxe_device_class_video_max_payload_length
#define ux_device_class_video_reception_start _uxe_device_class_video_reception_start
#define ux_device_class_video_read_payload_get _uxe_device_class_video_read_payload_get
#define ux_device_class_video_read_payload_free _uxe_device_class_video_read_payload_free
#define ux_device_class_video_transmission_start _uxe_device_class_video_transmission_start
#define ux_device_class_video_write_payload_get _uxe_device_class_video_write_payload_get
#define ux_device_class_video_write_payload_commit _uxe_device_class_video_write_payload_commit
#define ux_device_class_video_ioctl _uxe_device_class_video_ioctl
#define ux_device_class_video_read_task_function _ux_device_class_video_read_task_function
#define ux_device_class_video_write_task_function _ux_device_class_video_write_task_function
#else
#define ux_device_class_video_entry _ux_device_class_video_entry
#define ux_device_class_video_read_thread_entry _ux_device_class_video_read_thread_entry
#define ux_device_class_video_write_thread_entry _ux_device_class_video_write_thread_entry
#define ux_device_class_video_request_error_set _ux_device_class_video_request_error_set
#define ux_device_class_video_stream_error_set _ux_device_class_video_stream_error_set
#define ux_device_class_video_stream_get _ux_device_class_video_stream_get
#define ux_device_class_video_max_payload_length _ux_device_class_video_max_payload_length
#define ux_device_class_video_reception_start _ux_device_class_video_reception_start
#define ux_device_class_video_read_payload_get _ux_device_class_video_read_payload_get
#define ux_device_class_video_read_payload_free _ux_device_class_video_read_payload_free
#define ux_device_class_video_transmission_start _ux_device_class_video_transmission_start
#define ux_device_class_video_write_payload_get _ux_device_class_video_write_payload_get
#define ux_device_class_video_write_payload_commit _ux_device_class_video_write_payload_commit
#define ux_device_class_video_ioctl _ux_device_class_video_ioctl
#define ux_device_class_video_read_task_function _ux_device_class_video_read_task_function
#define ux_device_class_video_write_task_function _ux_device_class_video_write_task_function
#endif /* UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING */
/* Determine if a C++ compiler is being used. If so, complete the standard
C conditional started above. */
#ifdef __cplusplus
}
#endif
#endif