usbx/common/usbx_device_classes/inc/ux_device_class_video.h

751 lines
47 KiB
C
Raw Normal View History

2024-01-29 14:21:32 +08:00
/***************************************************************************
* 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
**************************************************************************/
2022-04-20 05:09:21 +00:00
/**************************************************************************/
/**************************************************************************/
/** */
/** USBX Component */
/** */
/** Video Class */
/** */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/* */
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_device_class_video.h PORTABLE C */
Update on 23 Oct 2023. Expand to see details. 52c60057 Update headers and readme for 6.3.0 release. 5360ad52 Host H264 frame support. 4b097e80 Add javascript to codeql detection 70278ae3 Fixed use after free issues. 5560620e Improved standalone enum transfer flow. Turn off ASIX in standalone build. Im... 39a01206 Improved host HID clients (mouse/keyboard/remote control) deactivation sequence. be2c7fd5 Improved standalone host CDC ACM control and data instance link management (MSRC 81489,81570) c2368eb2 Improved AC AS management and error handing. b9c23b38 PIMA Host/device optional interrupt endpoint support and host unused semaphore removal. 34ca3af9 Removed interface link in class linked to device. 5d3c9dd0 Improved endpoints get error handling (host CDC-ECM/ACM, storage). Moved stor... 71b08ad1 Improved host audio descriptors validation 4717e3f1 Enable weekly pipeline build to avoid CodeQL expiration ca408b54 Checked XML tag nesting depth in Pictbridge object parsing c300a00c Limited pictbridge array element to hexa output array size. 0e644aaa Reject fake CDC-ECM data interface not located next to its control interface. 911007a9 Improved host HID usage handling. d0576877 Enable dummy check of python for CodeQL 2761e105 Fixed some split transfer issue. db0dbeda Added packet length validation for received nx packet. f5007249 Fix PIMA issues on data set extraction 3ec66399 Fixing device RNDIS bugs with zero copy 1ec77d6b Fix device HID issue when adding class memory man and zero copy. d52e55c0 Add zero copy support in device printer a5cb883f Added zero copy support in device CDC_ECM and RNDIS 1f967ae2 Enable codeql in onebranch pipeline de265dbc Enable zero copy for device audio and video 53aee275 Refined memory management to reduce overhead.
2023-10-23 05:31:40 +00:00
/* 6.3.0 */
2022-04-20 05:09:21 +00:00
/* 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 */
2022-10-26 23:43:22 +00:00
/* 10-31-2022 Chaoqiong Xiao Modified comment(s), */
/* added standalone support, */
/* resulting in version 6.2.0 */
Update on 23 Oct 2023. Expand to see details. 52c60057 Update headers and readme for 6.3.0 release. 5360ad52 Host H264 frame support. 4b097e80 Add javascript to codeql detection 70278ae3 Fixed use after free issues. 5560620e Improved standalone enum transfer flow. Turn off ASIX in standalone build. Im... 39a01206 Improved host HID clients (mouse/keyboard/remote control) deactivation sequence. be2c7fd5 Improved standalone host CDC ACM control and data instance link management (MSRC 81489,81570) c2368eb2 Improved AC AS management and error handing. b9c23b38 PIMA Host/device optional interrupt endpoint support and host unused semaphore removal. 34ca3af9 Removed interface link in class linked to device. 5d3c9dd0 Improved endpoints get error handling (host CDC-ECM/ACM, storage). Moved stor... 71b08ad1 Improved host audio descriptors validation 4717e3f1 Enable weekly pipeline build to avoid CodeQL expiration ca408b54 Checked XML tag nesting depth in Pictbridge object parsing c300a00c Limited pictbridge array element to hexa output array size. 0e644aaa Reject fake CDC-ECM data interface not located next to its control interface. 911007a9 Improved host HID usage handling. d0576877 Enable dummy check of python for CodeQL 2761e105 Fixed some split transfer issue. db0dbeda Added packet length validation for received nx packet. f5007249 Fix PIMA issues on data set extraction 3ec66399 Fixing device RNDIS bugs with zero copy 1ec77d6b Fix device HID issue when adding class memory man and zero copy. d52e55c0 Add zero copy support in device printer a5cb883f Added zero copy support in device CDC_ECM and RNDIS 1f967ae2 Enable codeql in onebranch pipeline de265dbc Enable zero copy for device audio and video 53aee275 Refined memory management to reduce overhead.
2023-10-23 05:31:40 +00:00
/* 10-31-2023 Yajun xia, CQ Xiao Modified comment(s), */
/* added a new mode to manage */
Update on 23 Oct 2023. Expand to see details. 52c60057 Update headers and readme for 6.3.0 release. 5360ad52 Host H264 frame support. 4b097e80 Add javascript to codeql detection 70278ae3 Fixed use after free issues. 5560620e Improved standalone enum transfer flow. Turn off ASIX in standalone build. Im... 39a01206 Improved host HID clients (mouse/keyboard/remote control) deactivation sequence. be2c7fd5 Improved standalone host CDC ACM control and data instance link management (MSRC 81489,81570) c2368eb2 Improved AC AS management and error handing. b9c23b38 PIMA Host/device optional interrupt endpoint support and host unused semaphore removal. 34ca3af9 Removed interface link in class linked to device. 5d3c9dd0 Improved endpoints get error handling (host CDC-ECM/ACM, storage). Moved stor... 71b08ad1 Improved host audio descriptors validation 4717e3f1 Enable weekly pipeline build to avoid CodeQL expiration ca408b54 Checked XML tag nesting depth in Pictbridge object parsing c300a00c Limited pictbridge array element to hexa output array size. 0e644aaa Reject fake CDC-ECM data interface not located next to its control interface. 911007a9 Improved host HID usage handling. d0576877 Enable dummy check of python for CodeQL 2761e105 Fixed some split transfer issue. db0dbeda Added packet length validation for received nx packet. f5007249 Fix PIMA issues on data set extraction 3ec66399 Fixing device RNDIS bugs with zero copy 1ec77d6b Fix device HID issue when adding class memory man and zero copy. d52e55c0 Add zero copy support in device printer a5cb883f Added zero copy support in device CDC_ECM and RNDIS 1f967ae2 Enable codeql in onebranch pipeline de265dbc Enable zero copy for device audio and video 53aee275 Refined memory management to reduce overhead.
2023-10-23 05:31:40 +00:00
/* endpoint buffer in classes */
/* with zero copy enabled, */
/* added error checks support, */
Update on 23 Oct 2023. Expand to see details. 52c60057 Update headers and readme for 6.3.0 release. 5360ad52 Host H264 frame support. 4b097e80 Add javascript to codeql detection 70278ae3 Fixed use after free issues. 5560620e Improved standalone enum transfer flow. Turn off ASIX in standalone build. Im... 39a01206 Improved host HID clients (mouse/keyboard/remote control) deactivation sequence. be2c7fd5 Improved standalone host CDC ACM control and data instance link management (MSRC 81489,81570) c2368eb2 Improved AC AS management and error handing. b9c23b38 PIMA Host/device optional interrupt endpoint support and host unused semaphore removal. 34ca3af9 Removed interface link in class linked to device. 5d3c9dd0 Improved endpoints get error handling (host CDC-ECM/ACM, storage). Moved stor... 71b08ad1 Improved host audio descriptors validation 4717e3f1 Enable weekly pipeline build to avoid CodeQL expiration ca408b54 Checked XML tag nesting depth in Pictbridge object parsing c300a00c Limited pictbridge array element to hexa output array size. 0e644aaa Reject fake CDC-ECM data interface not located next to its control interface. 911007a9 Improved host HID usage handling. d0576877 Enable dummy check of python for CodeQL 2761e105 Fixed some split transfer issue. db0dbeda Added packet length validation for received nx packet. f5007249 Fix PIMA issues on data set extraction 3ec66399 Fixing device RNDIS bugs with zero copy 1ec77d6b Fix device HID issue when adding class memory man and zero copy. d52e55c0 Add zero copy support in device printer a5cb883f Added zero copy support in device CDC_ECM and RNDIS 1f967ae2 Enable codeql in onebranch pipeline de265dbc Enable zero copy for device audio and video 53aee275 Refined memory management to reduce overhead.
2023-10-23 05:31:40 +00:00
/* resulting in version 6.3.0 */
2022-04-20 05:09:21 +00:00
/* */
/**************************************************************************/
#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
2022-04-20 05:09:21 +00:00
/* 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
2022-10-26 23:43:22 +00:00
/* 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)
2022-04-20 05:09:21 +00:00
/* 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
{
2022-10-26 23:43:22 +00:00
#if defined(UX_DEVICE_STANDALONE)
UINT (*ux_device_class_video_stream_parameter_task_function)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT*);
#else
2022-04-20 05:09:21 +00:00
ULONG ux_device_class_video_stream_parameter_thread_stack_size;
VOID (*ux_device_class_video_stream_parameter_thread_entry)(ULONG id);
2022-10-26 23:43:22 +00:00
#endif
2022-04-20 05:09:21 +00:00
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;
2022-10-26 23:43:22 +00:00
#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;
2022-04-20 05:09:21 +00:00
#endif
2022-10-26 23:43:22 +00:00
ULONG ux_device_class_video_stream_buffer_error_count;
2022-04-20 05:09:21 +00:00
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);
2022-10-26 23:43:22 +00:00
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);
2022-04-20 05:09:21 +00:00
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);
2022-04-20 05:09:21 +00:00
/* 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
2022-04-20 05:09:21 +00:00
#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
2022-10-26 23:43:22 +00:00
#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 */
2022-04-20 05:09:21 +00:00
/* Determine if a C++ compiler is being used. If so, complete the standard
C conditional started above. */
#ifdef __cplusplus
}
#endif
#endif