1 /*************************************************************************** 2 * Copyright (c) 2024 Microsoft Corporation 3 * 4 * This program and the accompanying materials are made available under the 5 * terms of the MIT License which is available at 6 * https://opensource.org/licenses/MIT. 7 * 8 * SPDX-License-Identifier: MIT 9 **************************************************************************/ 10 11 12 /**************************************************************************/ 13 /**************************************************************************/ 14 /** */ 15 /** USBX Component */ 16 /** */ 17 /** Video Class */ 18 /** */ 19 /**************************************************************************/ 20 /**************************************************************************/ 21 22 23 /**************************************************************************/ 24 /* */ 25 /* COMPONENT DEFINITION RELEASE */ 26 /* */ 27 /* ux_device_class_video.h PORTABLE C */ 28 /* 6.3.0 */ 29 /* AUTHOR */ 30 /* */ 31 /* Chaoqiong Xiao, Microsoft Corporation */ 32 /* */ 33 /* DESCRIPTION */ 34 /* */ 35 /* This file contains all the header and extern functions used by the */ 36 /* USBX device video class. */ 37 /* */ 38 /* RELEASE HISTORY */ 39 /* */ 40 /* DATE NAME DESCRIPTION */ 41 /* */ 42 /* 04-25-2022 Chaoqiong Xiao Initial Version 6.1.11 */ 43 /* 10-31-2022 Chaoqiong Xiao Modified comment(s), */ 44 /* added standalone support, */ 45 /* resulting in version 6.2.0 */ 46 /* 10-31-2023 Yajun xia, CQ Xiao Modified comment(s), */ 47 /* added a new mode to manage */ 48 /* endpoint buffer in classes */ 49 /* with zero copy enabled, */ 50 /* added error checks support, */ 51 /* resulting in version 6.3.0 */ 52 /* */ 53 /**************************************************************************/ 54 55 #ifndef UX_DEVICE_CLASS_VIDEO_H 56 #define UX_DEVICE_CLASS_VIDEO_H 57 58 /* Determine if a C++ compiler is being used. If so, ensure that standard 59 C is used to process the API information. */ 60 61 #ifdef __cplusplus 62 63 /* Yes, C++ compiler is present. Use standard C. */ 64 extern "C" { 65 66 #endif 67 68 /* Internal option: enable the basic USBX error checking. This define is typically used 69 while debugging application. */ 70 #if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING) 71 #define UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING 72 #endif 73 74 /* Define options. */ 75 76 #define UX_DEVICE_CLASS_VIDEO_THREAD_STACK_SIZE UX_THREAD_STACK_SIZE 77 78 /* Define external static data. */ 79 80 extern UCHAR _ux_system_device_class_video_name[]; 81 82 83 /* Define IOCTL code. 84 ux_device_class_video_ioctl(video, IOCTL_CODE, parameter). 85 */ 86 87 #define UX_DEVICE_CLASS_VIDEO_IOCTL_GET_ARG 0x01 88 89 90 /* Define Video Class main constants. */ 91 92 #define UX_DEVICE_CLASS_VIDEO_CLASS 0x0e 93 #define UX_DEVICE_CLASS_VIDEO_SUBCLASS_UNDEFINED 0 94 #define UX_DEVICE_CLASS_VIDEO_SUBCLASS_CONTROL 1 95 #define UX_DEVICE_CLASS_VIDEO_SUBCLASS_STREAMING 2 96 #define UX_DEVICE_CLASS_VIDEO_SUBCLASS_INTERFACE_COLLECTION 3 97 98 /* Class Code (CC). */ 99 #define UX_DEVICE_CLASS_VIDEO_CC_VIDEO 0x0e 100 101 /* Subclass Code (SC). */ 102 #define UX_DEVICE_CLASS_VIDEO_SC_UNDEFINED 0 103 #define UX_DEVICE_CLASS_VIDEO_SC_CONTROL 1 104 #define UX_DEVICE_CLASS_VIDEO_SC_STREAMING 2 105 #define UX_DEVICE_CLASS_VIDEO_SC_INTERFACE_COLLECTION 3 106 107 /* Protocol Code. */ 108 #define UX_DEVICE_CLASS_VIDEO_PC_PROTOCOL_UNDEFINED 0 109 #define UX_DEVICE_CLASS_VIDEO_PC_PROTOCOL_15 0 110 111 112 /* Define Video Class-Specific (CS) descriptor types. */ 113 #define UX_DEVICE_CLASS_VIDEO_CS_UNDEFINED 0x20 114 #define UX_DEVICE_CLASS_VIDEO_CS_DEVICE 0x21 115 #define UX_DEVICE_CLASS_VIDEO_CS_CONFIGURATION 0x22 116 #define UX_DEVICE_CLASS_VIDEO_CS_STRING 0x23 117 #define UX_DEVICE_CLASS_VIDEO_CS_INTERFACE 0x24 118 #define UX_DEVICE_CLASS_VIDEO_CS_ENDPOINT 0x25 119 120 121 /* Define Video Class specific Video Control (VC) interface descriptor subtypes. */ 122 #define UX_DEVICE_CLASS_VIDEO_VC_DESCRIPTOR_UNDEFINED 0x00 123 #define UX_DEVICE_CLASS_VIDEO_VC_HEADER 0x01 124 #define UX_DEVICE_CLASS_VIDEO_VC_INPUT_TERMINAL 0x02 125 #define UX_DEVICE_CLASS_VIDEO_VC_OUTPUT_TERMINAL 0x03 126 #define UX_DEVICE_CLASS_VIDEO_VC_SELECTOR_UNIT 0x04 127 #define UX_DEVICE_CLASS_VIDEO_VC_PROCESSING_UNIT 0x05 128 #define UX_DEVICE_CLASS_VIDEO_VC_EXTENSION_UNIT 0x06 129 #define UX_DEVICE_CLASS_VIDEO_VC_ENCODING_UNIT 0x07 130 131 132 /* Define Video Class specific Video Stream (VS) interface descriptor subtypes. */ 133 #define UX_DEVICE_CLASS_VIDEO_VS_UNDEFINED 0x00 134 #define UX_DEVICE_CLASS_VIDEO_VS_INPUT_HEADER 0x01 135 #define UX_DEVICE_CLASS_VIDEO_VS_OUTPUT_HEADER 0x02 136 #define UX_DEVICE_CLASS_VIDEO_VS_STILL_IMAGE_FRAME 0x03 137 #define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_UNCOMPRESSED 0x04 138 #define UX_DEVICE_CLASS_VIDEO_VS_FRAME_UNCOMPRESSED 0x05 139 #define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_MJPEG 0x06 140 #define UX_DEVICE_CLASS_VIDEO_VS_FRAME_MJPEG 0x07 141 #define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_MPEG2TS 0x0A 142 #define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_DV 0x0C 143 #define UX_DEVICE_CLASS_VIDEO_VS_COLORFORMAT 0x0D 144 #define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_FRAME_BASED 0x10 145 #define UX_DEVICE_CLASS_VIDEO_VS_FRAME_FRAME_BASED 0x11 146 #define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_STREAM_BASED 0x12 147 #define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_H264 0x13 148 #define UX_DEVICE_CLASS_VIDEO_VS_FRAME_H264 0x14 149 #define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_H264_SIMULCAST 0x15 150 #define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_VP8 0x16 151 #define UX_DEVICE_CLASS_VIDEO_VS_FRAME_VP8 0x17 152 #define UX_DEVICE_CLASS_VIDEO_VS_FORMAT_VP8_SIMULCAST 0x18 153 154 155 /* Define Video Class specific Endpoint (EP) descriptor subtypes. */ 156 #define UX_DEVICE_CLASS_VIDEO_EP_UNDEFINED 0x00 157 #define UX_DEVICE_CLASS_VIDEO_EP_GENERAL 0x01 158 #define UX_DEVICE_CLASS_VIDEO_EP_ENDPOINT 0x02 159 #define UX_DEVICE_CLASS_VIDEO_EP_INTERRUPT 0x03 160 161 162 /* Define Video Control Selector Codes. */ 163 164 /* Define VideoControl (VC) Interface Control Selector Codes. */ 165 #define UX_DEVICE_CLASS_VIDEO_VC_CONTROL_UNDEFINED 0x00 166 #define UX_DEVICE_CLASS_VIDEO_VC_VIDEO_POWER_MODE_CONTROL 0x01 167 #define UX_DEVICE_CLASS_VIDEO_VC_REQUEST_ERROR_CODE_CONTROL 0x02 168 169 /* Define Terminal Control (TE) Selectors. */ 170 #define UX_DEVICE_CLASS_VIDEO_TE_CONTROL_UNDEFINED 0x00 171 172 /* Define Selector Unit (SU) Control Selectors. */ 173 #define UX_DEVICE_CLASS_VIDEO_SU_CONTROL_UNDEFINED 0x00 174 #define UX_DEVICE_CLASS_VIDEO_SU_INPUT_SELECT_CONTROL 0x01 175 176 /* Define Camera Terminal (CT) Control Selectors. */ 177 #define UX_DEVICE_CLASS_VIDEO_CT_CONTROL_UNDEFINED 0x00 178 #define UX_DEVICE_CLASS_VIDEO_CT_SCANNING_MODE_CONTROL 0x01 179 #define UX_DEVICE_CLASS_VIDEO_CT_AE_MODE_CONTROL 0x02 180 #define UX_DEVICE_CLASS_VIDEO_CT_AE_PRIORITY_CONTROL 0x03 181 #define UX_DEVICE_CLASS_VIDEO_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04 182 #define UX_DEVICE_CLASS_VIDEO_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05 183 #define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_ABSOLUTE_CONTROL 0x06 184 #define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_RELATIVE_CONTROL 0x07 185 #define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_AUTO_CONTROL 0x08 186 #define UX_DEVICE_CLASS_VIDEO_CT_IRIS_ABSOLUTE_CONTROL 0x09 187 #define UX_DEVICE_CLASS_VIDEO_CT_IRIS_RELATIVE_CONTROL 0x0A 188 #define UX_DEVICE_CLASS_VIDEO_CT_ZOOM_ABSOLUTE_CONTROL 0x0B 189 #define UX_DEVICE_CLASS_VIDEO_CT_ZOOM_RELATIVE_CONTROL 0x0C 190 #define UX_DEVICE_CLASS_VIDEO_CT_PANTILT_ABSOLUTE_CONTROL 0x0D 191 #define UX_DEVICE_CLASS_VIDEO_CT_PANTILT_RELATIVE_CONTROL 0x0E 192 #define UX_DEVICE_CLASS_VIDEO_CT_ROLL_ABSOLUTE_CONTROL 0x0F 193 #define UX_DEVICE_CLASS_VIDEO_CT_ROLL_RELATIVE_CONTROL 0x10 194 #define UX_DEVICE_CLASS_VIDEO_CT_PRIVACY_CONTROL 0x11 195 #define UX_DEVICE_CLASS_VIDEO_CT_FOCUS_SIMPLE_CONTROL 0x12 196 #define UX_DEVICE_CLASS_VIDEO_CT_WINDOW_CONTROL 0x13 197 #define UX_DEVICE_CLASS_VIDEO_CT_REGION_OF_INTEREST_CONTROL 0x14 198 199 /* Define Processing Unit (PU) Control Selectors. */ 200 #define UX_DEVICE_CLASS_VIDEO_PU_CONTROL_UNDEFINED 0x00 201 #define UX_DEVICE_CLASS_VIDEO_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01 202 #define UX_DEVICE_CLASS_VIDEO_PU_BRIGHTNESS_CONTROL 0x02 203 #define UX_DEVICE_CLASS_VIDEO_PU_CONTRAST_CONTROL 0x03 204 #define UX_DEVICE_CLASS_VIDEO_PU_GAIN_CONTROL 0x04 205 #define UX_DEVICE_CLASS_VIDEO_PU_POWER_LINE_FREQUENCY_CONTROL 0x05 206 #define UX_DEVICE_CLASS_VIDEO_PU_HUE_CONTROL 0x06 207 #define UX_DEVICE_CLASS_VIDEO_PU_SATURATION_CONTROL 0x07 208 #define UX_DEVICE_CLASS_VIDEO_PU_SHARPNESS_CONTROL 0x08 209 #define UX_DEVICE_CLASS_VIDEO_PU_GAMMA_CONTROL 0x09 210 #define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0A 211 #define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0B 212 #define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0C 213 #define UX_DEVICE_CLASS_VIDEO_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0D 214 #define UX_DEVICE_CLASS_VIDEO_PU_DIGITAL_MULTIPLIER_CONTROL 0x0E 215 #define UX_DEVICE_CLASS_VIDEO_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0F 216 #define UX_DEVICE_CLASS_VIDEO_PU_HUE_AUTO_CONTROL 0x10 217 #define UX_DEVICE_CLASS_VIDEO_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11 218 #define UX_DEVICE_CLASS_VIDEO_PU_ANALOG_LOCK_STATUS_CONTROL 0x12 219 #define UX_DEVICE_CLASS_VIDEO_PU_CONTRAST_AUTO_CONTROL 0x13 220 221 /* Define eXtension Unit (XU) Control Selectors. */ 222 #define UX_DEVICE_CLASS_VIDEO_XU_CONTROL_UNDEFINED 0x00 223 224 /* Define VideoStreaming (VS) Interface Control Selectors. */ 225 #define UX_DEVICE_CLASS_VIDEO_VS_CONTROL_UNDEFINED 0x00 226 #define UX_DEVICE_CLASS_VIDEO_VS_PROBE_CONTROL 0x01 227 #define UX_DEVICE_CLASS_VIDEO_VS_COMMIT_CONTROL 0x02 228 #define UX_DEVICE_CLASS_VIDEO_VS_STILL_PROBE_CONTROL 0x03 229 #define UX_DEVICE_CLASS_VIDEO_VS_STILL_COMMIT_CONTROL 0x04 230 #define UX_DEVICE_CLASS_VIDEO_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05 231 #define UX_DEVICE_CLASS_VIDEO_VS_STREAM_ERROR_CODE_CONTROL 0x06 232 #define UX_DEVICE_CLASS_VIDEO_VS_GENERATE_KEY_FRAME_CONTROL 0x07 233 #define UX_DEVICE_CLASS_VIDEO_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08 234 #define UX_DEVICE_CLASS_VIDEO_VS_SYNCH_DELAY_CONTROL 0x09 235 236 237 /* Define USB Video Class terminal types. */ 238 239 /* Define USB Terminal Types (TT). */ 240 #define UX_DEVICE_CLASS_VIDEO_TT_VENDOR_SPECIFIC 0x0100 241 #define UX_DEVICE_CLASS_VIDEO_TT_STREAMING 0x0101 242 243 /* Define USB Input Terminal Types (ITT). */ 244 #define UX_DEVICE_CLASS_VIDEO_ITT_VENDOR_SPECIFIC 0x0200 245 #define UX_DEVICE_CLASS_VIDEO_ITT_CAMERA 0x0201 246 #define UX_DEVICE_CLASS_VIDEO_ITT_MEDIA_TRANSPORT_INPUT 0x0202 247 248 /* Define USB Output Terminal Types (OTT). */ 249 #define UX_DEVICE_CLASS_VIDEO_OTT_VENDOR_SPECIFIC 0x0300 250 #define UX_DEVICE_CLASS_VIDEO_OTT_DISPLAY 0x0301 251 #define UX_DEVICE_CLASS_VIDEO_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302 252 253 /* Define USB External Terminal Types (XTT). */ 254 #define UX_DEVICE_CLASS_VIDEO_XTT_EXTERNAL_VENDOR_SPECIFIC 0x0400 255 #define UX_DEVICE_CLASS_VIDEO_XTT_COMPOSITE_CONNECTOR 0x0401 256 #define UX_DEVICE_CLASS_VIDEO_XTT_SVIDEO_CONNECTOR 0x0402 257 #define UX_DEVICE_CLASS_VIDEO_XTT_COMPONENT_CONNECTOR 0x0403 258 259 260 /* Video Class GET_INFO Capabilities and status structs and definitions. */ 261 262 #define UX_DEVICE_CLASS_VIDEO_INFO_GET_REQUEST_SUPPORT (1u << 0) 263 #define UX_DEVICE_CLASS_VIDEO_INFO_SET_REQUEST_SUPPORT (1u << 1) 264 #define UX_DEVICE_CLASS_VIDEO_INFO_DISABLED_DUE_TO_AUTO_MODE (1u << 2) 265 #define UX_DEVICE_CLASS_VIDEO_INFO_AUTOUPDATE_CONTROL (1u << 3) 266 #define UX_DEVICE_CLASS_VIDEO_INFO_ASYNCHRONOUS_CONTROL (1u << 4) 267 #define UX_DEVICE_CLASS_VIDEO_INFO_DISABLED_DUE_TO_STATE (1u << 5) 268 269 270 /* Video Class Probe and Commit Controls structs and definitions. */ 271 typedef struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_STRUCT 272 { 273 union UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmHint_UNION { 274 USHORT value; 275 struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmHint_STRUCT { 276 USHORT dwFrameInterval:1; 277 USHORT wKeyFrameRate:1; 278 USHORT wPFrameRate:1; 279 USHORT wCompQuality:1; 280 USHORT wCompWindowSize:1; 281 } bm; 282 } bmHint; 283 UCHAR bFormatIndex; 284 UCHAR bFrameIndex; 285 ULONG dwFrameInterval; 286 USHORT wKeyFrameRate; 287 USHORT wPFrameRate; 288 USHORT wCompQuality; 289 USHORT wCompWindowSize; 290 USHORT wDelay; 291 UCHAR dwMaxVideoFrameSize[4]; /* Not alignend from now on. */ 292 UCHAR dwMaxPayloadTransferSize[4]; 293 UCHAR dwClockFrequency[4]; 294 union UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmFramingInfo_UNION { 295 UCHAR value; 296 struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmFramingInfo_STRUCT { 297 UCHAR FID_required:1; 298 UCHAR EOF_may_present:1; 299 UCHAR EOS_may_present:1; 300 } bm; 301 } bmFramingInfo; 302 UCHAR bPreferedVersion; 303 UCHAR bMinVersion; 304 UCHAR bMaxVersion; 305 306 /* Start from offset 34, additional fields introduced in UVC 1.5. */ 307 UCHAR bUsage; 308 UCHAR bBitDepthLuma; 309 UCHAR bmSettings; 310 UCHAR bMaxNumberOfRefFramesPlus1; 311 union UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmRateControlModes_UNION { 312 USHORT value; 313 struct UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_bmRateControlModes_STRUCT { 314 USHORT rate_ctrl_mode_0:4; 315 USHORT rate_ctrl_mode_1:4; 316 USHORT rate_ctrl_mode_2:4; 317 USHORT rate_ctrl_mode_3:4; 318 } bm; 319 } bmRateControlModes; 320 UCHAR bmLayoutPerStream; 321 } UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL; 322 323 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_OFFSET 0 324 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_FRAME_INTERVAL (1U<<0) 325 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_KEY_FRAME_RATE (1U<<1) 326 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_KEY_P_FRAME_RATE (1U<<2) 327 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_COMP_QUALITY (1U<<3) 328 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_HINT_COMP_WINDOW_SIZE (1U<<4) 329 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FORMAT_INDEX_OFFSET 2 330 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAME_INDEX_OFFSET 3 331 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAME_INTERVAL_OFFSET 4 332 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_KEY_FRAME_RATE_OFFSET 8 333 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_P_FRAME_RATE_OFFSET 10 334 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_COMP_QUALITY_OFFSET 12 335 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_COMP_WINDOW_SIZE_OFFSET 14 336 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_DELAY_OFFSET 16 337 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_VIDEO_FRAME_SIZE_OFFSET 18 338 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_PAYLOAD_TRANSFER_SIZE_OFFSET 22 339 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_CLOCK_FREQUENCY_OFFSET 26 340 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_OFFSET 30 341 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_FID_REQUIRED (1U<<0) 342 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_EOF_MAY_PRESENT (1U<<1) 343 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_FRAMING_INFO_EOS_MAY_PRESENT (1U<<2) 344 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_PREFERED_VERSION_OFFSET 31 345 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MIN_VERSION_OFFSET 32 346 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_VERSION_OFFSET 33 347 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_USAGE_OFFSET 34 348 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_BIT_DEPTH_LUMA_OFFSET 35 349 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_SETTINGS_OFFSET 36 350 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_MAX_N_OF_FRAMES_PLUS1_OFFSET 37 351 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODES_OFFSET 38 352 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_NOT_APPLICABLE 0U 353 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_VBR_WITH_UNDERFLOW 1U 354 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_CBR 2U 355 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_CONSTANT_QP 3U 356 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_GLOBAL_VBR_WITH_UNDERFLOW 4U 357 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_VBR 5U 358 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_RATE_CONTROL_MODE_GLOBAL_VBR 6U 359 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CONTROL_LAYOUT_PER_STREAM_OFFSET 40 360 361 362 /* Video Class Still Probe and Commit Controls structs and definitions. */ 363 typedef struct UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_STRUCT 364 { 365 UCHAR bFormatIndex; 366 UCHAR bFrameIndex; 367 UCHAR bCompressionIndex; 368 UCHAR dwMaxVideoFrameSize[4]; /* Not aligned from now. */ 369 UCHAR dwMaxPayloadTransferSize[4]; 370 } UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL; 371 #define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_FORMAT_INDEX_OFFSET 0 372 #define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_FRAME_INDEX_OFFSET 1 373 #define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_COMPRESSION_INDEX_OFFSET 2 374 #define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_MAX_VIDEO_FRAME_SIZE_OFFSET 3 375 #define UX_DEVICE_CLASS_VIDEO_STILL_PROBE_COMMIT_CONTROL_MAX_PAYLOAD_TRANSFER_SIZE_OFFSET 7 376 377 378 /* Video Class Status Packet structs and definitions. */ 379 380 /* Offsets and possible values. */ 381 typedef struct UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_HEADER_STRUCT 382 { 383 UCHAR bStatusType; 384 UCHAR bOriginator; 385 } UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_HEADER; 386 typedef struct UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_STRUCT 387 { 388 UCHAR bStatusType; 389 UCHAR bOriginator; 390 UCHAR bEvent; 391 UCHAR bSelector; 392 UCHAR bAttribute; 393 UCHAR bValue[1]; /* varies on bAttribute. */ 394 } UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC; 395 typedef struct UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VS_STRUCT 396 { 397 UCHAR bStatusType; 398 UCHAR bOriginator; 399 UCHAR bEvent; 400 UCHAR bValue[1]; /* varies on bEvent. */ 401 } UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VS; 402 #define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_TYPE_OFFSET 0 403 #define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_TYPE_VC 1 404 #define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_TYPE_VS 2 405 #define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_ORIGINATOR_OFFSET 1 406 #define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_EVENT_OFFSET 2 407 #define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_SELECTOR_OFFSET 3 408 #define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_ATTRIBUTE_OFFSET 4 409 #define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VC_VALUE_OFFSET 5 410 #define UX_DEVICE_CLASS_VIDEO_STATUS_PACKET_VS_VALUE_OFFSET 3 411 412 413 /* Define Video Class Payload Header structs and definitions. */ 414 typedef struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_STRUCT 415 { 416 UCHAR bHeaderLength; 417 union UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_INFO_UNION { 418 UCHAR value; 419 struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_INFO_STRUCT { 420 UCHAR bFID:1; /* Frame ID. */ 421 UCHAR bEOF:1; /* End of Frame. */ 422 UCHAR bPTS:1; /* Presentation Time. */ 423 UCHAR bSCR:1; /* Source Clock Reference. */ 424 UCHAR bRES:1; /* Reserved, Payload Specific. */ 425 UCHAR bSTI:1; /* Still Image. */ 426 UCHAR bERR:1; /* Error. */ 427 UCHAR bEOH:1; /* End of Header. */ 428 } bm; 429 } bmHeaderInfo; 430 UCHAR dwPresentationTime[4]; 431 union UX_DEVICE_CLASS_VIDEO_PAYLOAD_SCR_UNION { 432 UCHAR byte_array[6]; 433 struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_SCR_STRUCT { 434 UCHAR STC[4]; /* SourceTimeClock. */ 435 USHORT SCR; /* 1KHz SOF token counter. */ 436 } bm; 437 } scrSourceClock; 438 } UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER; 439 #define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_LENGTH_OFFSET 0 440 #define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_INFO_OFFSET 1 441 #define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_PRESENTATION_TIME_OFFSET 4 442 #define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_PTS_OFFSET 4 443 #define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_SCR_SOURCE_CLOCK_OFFSET 6 444 #define UX_DEVICE_CLASS_VIDEO_PAYLOAD_HEADER_SCR_OFFSET 6 445 446 447 /* Define Video Class specific request codes. */ 448 #define UX_DEVICE_CLASS_VIDEO_REQUEST_CODE_UNDEFINED 0x00 449 #define UX_DEVICE_CLASS_VIDEO_RC_UNDEFINED 0x00 450 #define UX_DEVICE_CLASS_VIDEO_SET_CUR 0x01 451 #define UX_DEVICE_CLASS_VIDEO_GET_CUR 0x81 452 #define UX_DEVICE_CLASS_VIDEO_GET_MIN 0x82 453 #define UX_DEVICE_CLASS_VIDEO_GET_MAX 0x83 454 #define UX_DEVICE_CLASS_VIDEO_GET_RES 0x84 455 #define UX_DEVICE_CLASS_VIDEO_GET_INFO 0x86 456 #define UX_DEVICE_CLASS_VIDEO_GET_DEF 0x87 457 #define UX_DEVICE_CLASS_VIDEO_GET_CUR_ALL 0x91 458 #define UX_DEVICE_CLASS_VIDEO_GET_MIN_ALL 0x92 459 #define UX_DEVICE_CLASS_VIDEO_GET_MAX_ALL 0x93 460 #define UX_DEVICE_CLASS_VIDEO_GET_RES_ALL 0x94 461 #define UX_DEVICE_CLASS_VIDEO_GET_GET_DEF_ALL 0x97 462 463 464 /* Define Video Class Device Power Modes. */ 465 #define UX_DEVICE_CLASS_VIDEO_POWER_MODE_MASK 0x0Fu 466 #define UX_DEVICE_CLASS_VIDEO_POWER_MODE_FULL 0x00u 467 #define UX_DEVICE_CLASS_VIDEO_POWER_MODE_DEVICE_DEPENDENT 0x01u 468 #define UX_DEVICE_CLASS_VIDEO_POWER_DEPENDENT_MODE_SUPPORTED 0x10u 469 #define UX_DEVICE_CLASS_VIDEO_POWER_USES_USB 0x20u 470 #define UX_DEVICE_CLASS_VIDEO_POWER_USES_BATTERY 0x40u 471 #define UX_DEVICE_CLASS_VIDEO_POWER_USES_AC 0x80u 472 473 474 /* Define Video Class Request Error Codes. */ 475 #define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_NO_ERROR 0x00 476 #define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_NOT_READY 0x01 477 #define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_WRONG_STATE 0x02 478 #define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_POWER 0x03 479 #define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_OUT_OF_RANGE 0x04 480 #define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_INPUT 0x05 481 #define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_CONTROL 0x06 482 #define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_REQUEST 0x07 483 #define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_VALUE_WITHIN_RANGE 0x08 484 #define UX_DEVICE_CLASS_VIDEO_REQUEST_ERROR_CODE_UNKNOWN 0xFF 485 486 487 /* Define Video Class Probe and Commit Controls */ 488 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_LENGTH_1_1 34 489 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_LENGTH_1_5 48 490 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_HINT_OFFSET 0 491 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FORMAT_INDEX_OFFSET 2 492 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FRAME_INDEX_OFFSET 3 493 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FRAME_INTERVAL_OFFSET 4 494 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_KEY_FRAME_RATE_OFFSET 8 495 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_PFRAME_RAE_OFFSET 10 496 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_COMP_QUALITY_OFFSET 12 497 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_COMP_WINDOW_SIZE_OFFSET 14 498 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_DELAY_OFFSET 16 499 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_VIDEO_FRAME_SIZE_OFFSET 18 500 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_PAYLOAD_TRANSFER_SIZE_OFFSET 22 501 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_CLOCK_FREQUENCY_OFFSET 26 502 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_FRAMING_INFO_OFFSET 30 503 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_PREFERED_VERSION_OFFSET 31 504 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MIN_VERSION_OFFSET 32 505 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_VERSION_OFFSET 33 506 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_USAGE_OFFSET 34 507 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_BIT_DEPTH_LUMA_OFFSET 35 508 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_SETTINGS_OFFSET 36 509 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_MAX_NUMBER_OF_REF_FRAMES_PLUS1_OFFSET 37 510 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_RATE_CONTROL_MODES_OFFSET 38 511 #define UX_DEVICE_CLASS_VIDEO_PROBE_COMMIT_LAYOUT_PER_STREAM_OFFSET 40 512 513 514 /* Define Video Class Stream Error Codes. */ 515 #define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_NO_ERROR 0 516 #define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_PROTECTED_CONTENT 1 517 #define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_INPUT_BUFFER_UNDERRUN 2 518 #define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_DATA_DISCONTINUITY 3 519 #define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_OUTPUT_BUFFER_UNDERRUN 4 520 #define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_OUTPUT_BUFFER_OVERRUN 5 521 #define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_FORMAT_CHANGE 6 522 #define UX_DEVICE_CLASS_VIDEO_STREAM_ERROR_CODE_STILL_IMAGE_CAPTURE_ERROR 7 523 524 525 /* Define Video Class Task states. */ 526 #define UX_DEVICE_CLASS_VIDEO_STREAM_RW_STOP (UX_STATE_RESET) 527 #define UX_DEVICE_CLASS_VIDEO_STREAM_RW_START (UX_STATE_STEP + 1) 528 #define UX_DEVICE_CLASS_VIDEO_STREAM_RW_WAIT (UX_STATE_STEP + 2) 529 530 531 /* Define Video Class callback structure. */ 532 533 struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT; 534 struct UX_DEVICE_CLASS_VIDEO_STRUCT; 535 536 typedef struct UX_DEVICE_CLASS_VIDEO_CALLBACKS_STRUCT 537 { 538 539 VOID (*ux_slave_class_video_instance_activate)(VOID *); 540 VOID (*ux_slave_class_video_instance_deactivate)(VOID *); 541 UINT (*ux_device_class_video_request)(struct UX_DEVICE_CLASS_VIDEO_STRUCT *, UX_SLAVE_TRANSFER *); 542 VOID *ux_device_class_video_arg; 543 } UX_DEVICE_CLASS_VIDEO_CALLBACKS; 544 545 typedef struct UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS_STRUCT 546 { 547 VOID (*ux_device_class_video_stream_change)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT *, ULONG); 548 UINT (*ux_device_class_video_stream_request)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT *, UX_SLAVE_TRANSFER *); 549 VOID (*ux_device_class_video_stream_payload_done)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT *, ULONG); 550 } UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS; 551 552 553 /* Define Video Class Calling Parameter structure */ 554 555 typedef struct UX_DEVICE_CLASS_VIDEO_PAYLOAD_STRUCT 556 { 557 558 ULONG ux_device_class_video_payload_length; 559 UCHAR ux_device_class_video_payload_data[4]; /* Actually size of length. */ 560 } UX_DEVICE_CLASS_VIDEO_PAYLOAD; 561 562 typedef struct UX_DEVICE_CLASS_VIDEO_STREAM_PARAMETER_STRUCT 563 { 564 #if defined(UX_DEVICE_STANDALONE) 565 UINT (*ux_device_class_video_stream_parameter_task_function)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT*); 566 #else 567 ULONG ux_device_class_video_stream_parameter_thread_stack_size; 568 VOID (*ux_device_class_video_stream_parameter_thread_entry)(ULONG id); 569 #endif 570 UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS ux_device_class_video_stream_parameter_callbacks; 571 572 ULONG ux_device_class_video_stream_parameter_max_payload_buffer_size; 573 ULONG ux_device_class_video_stream_parameter_max_payload_buffer_nb; 574 } UX_DEVICE_CLASS_VIDEO_STREAM_PARAMETER; 575 576 typedef struct UX_DEVICE_CLASS_VIDEO_PARAMETER_STRUCT 577 { 578 ULONG ux_device_class_video_parameter_master_interface; 579 UX_DEVICE_CLASS_VIDEO_CALLBACKS ux_device_class_video_parameter_callbacks; 580 581 ULONG ux_device_class_video_parameter_streams_nb; 582 UX_DEVICE_CLASS_VIDEO_STREAM_PARAMETER *ux_device_class_video_parameter_streams; 583 } UX_DEVICE_CLASS_VIDEO_PARAMETER; 584 585 typedef struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT 586 { 587 588 struct UX_DEVICE_CLASS_VIDEO_STRUCT *ux_device_class_video_stream_video; 589 UX_SLAVE_INTERFACE *ux_device_class_video_stream_interface; 590 UX_SLAVE_ENDPOINT *ux_device_class_video_stream_endpoint; 591 592 ULONG ux_device_class_video_stream_error; 593 594 UX_DEVICE_CLASS_VIDEO_STREAM_CALLBACKS ux_device_class_video_stream_callbacks; 595 596 #if !defined(UX_DEVICE_STANDALONE) 597 UCHAR *ux_device_class_video_stream_thread_stack; 598 UX_THREAD ux_device_class_video_stream_thread; 599 #else 600 UINT (*ux_device_class_video_stream_task_function)(struct UX_DEVICE_CLASS_VIDEO_STREAM_STRUCT*); 601 UINT ux_device_class_video_stream_task_state; 602 UINT ux_device_class_video_stream_task_status; 603 #endif 604 605 ULONG ux_device_class_video_stream_buffer_error_count; 606 UCHAR *ux_device_class_video_stream_buffer; 607 ULONG ux_device_class_video_stream_buffer_size; 608 ULONG ux_device_class_video_stream_payload_buffer_size; 609 610 UX_DEVICE_CLASS_VIDEO_PAYLOAD *ux_device_class_video_stream_transfer_pos; 611 UX_DEVICE_CLASS_VIDEO_PAYLOAD *ux_device_class_video_stream_access_pos; 612 } UX_DEVICE_CLASS_VIDEO_STREAM; 613 #define _ux_device_class_video_stream_error_set(s,e) do { \ 614 (s)->ux_device_class_video_stream_error = (e); \ 615 } while(0) 616 617 typedef struct UX_DEVICE_CLASS_VIDEO_STRUCT 618 { 619 620 UX_SLAVE_CLASS *ux_device_class_video_class; 621 UX_SLAVE_DEVICE *ux_device_class_video_device; 622 UX_SLAVE_INTERFACE *ux_device_class_video_interface; 623 624 ULONG ux_device_class_video_error; 625 626 UX_DEVICE_CLASS_VIDEO_CALLBACKS ux_device_class_video_callbacks; 627 628 ULONG ux_device_class_video_streams_nb; 629 UX_DEVICE_CLASS_VIDEO_STREAM *ux_device_class_video_streams; 630 631 } UX_DEVICE_CLASS_VIDEO; 632 #define _ux_device_class_video_request_error_set(v,e) do { \ 633 (v)->ux_device_class_video_error = (e); \ 634 } while(0) 635 636 637 /* Define Video Class function prototypes. */ 638 639 UINT _ux_device_class_video_initialize(UX_SLAVE_CLASS_COMMAND *command); 640 UINT _ux_device_class_video_uninitialize(UX_SLAVE_CLASS_COMMAND *command); 641 UINT _ux_device_class_video_activate(UX_SLAVE_CLASS_COMMAND *command); 642 UINT _ux_device_class_video_change(UX_SLAVE_CLASS_COMMAND *command); 643 UINT _ux_device_class_video_deactivate(UX_SLAVE_CLASS_COMMAND *command); 644 UINT _ux_device_class_video_control_request(UX_SLAVE_CLASS_COMMAND *command); 645 646 UINT _ux_device_class_video_entry(UX_SLAVE_CLASS_COMMAND *command); 647 648 UINT _ux_device_class_video_ioctl(UX_DEVICE_CLASS_VIDEO *video, ULONG ioctl_function, 649 VOID *parameter); 650 651 UINT _ux_device_class_video_stream_get(UX_DEVICE_CLASS_VIDEO *video, ULONG stream_index, UX_DEVICE_CLASS_VIDEO_STREAM **stream); 652 653 VOID _ux_device_class_video_write_thread_entry(ULONG video_stream); 654 VOID _ux_device_class_video_read_thread_entry(ULONG video_stream); 655 656 ULONG _ux_device_class_video_max_payload_length(UX_DEVICE_CLASS_VIDEO_STREAM *video); 657 658 UINT _ux_device_class_video_reception_start(UX_DEVICE_CLASS_VIDEO_STREAM *video); 659 660 UINT _ux_device_class_video_read_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **payload_data, ULONG *payload_length); 661 UINT _ux_device_class_video_read_payload_free(UX_DEVICE_CLASS_VIDEO_STREAM *video); 662 663 UINT _ux_device_class_video_transmission_start(UX_DEVICE_CLASS_VIDEO_STREAM *video); 664 665 UINT _ux_device_class_video_write_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **buffer, ULONG *max_length); 666 UINT _ux_device_class_video_write_payload_commit(UX_DEVICE_CLASS_VIDEO_STREAM *video, ULONG length); 667 668 UINT _ux_device_class_video_tasks_run(VOID *instance); 669 UINT _ux_device_class_video_read_task_function(UX_DEVICE_CLASS_VIDEO_STREAM *stream); 670 UINT _ux_device_class_video_write_task_function(UX_DEVICE_CLASS_VIDEO_STREAM *stream); 671 672 UINT _uxe_device_class_video_initialize(UX_SLAVE_CLASS_COMMAND *command); 673 ULONG _uxe_device_class_video_max_payload_length(UX_DEVICE_CLASS_VIDEO_STREAM *video); 674 UINT _uxe_device_class_video_reception_start(UX_DEVICE_CLASS_VIDEO_STREAM *video); 675 UINT _uxe_device_class_video_read_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **payload_data, ULONG *payload_length); 676 UINT _uxe_device_class_video_read_payload_free(UX_DEVICE_CLASS_VIDEO_STREAM *video); 677 UINT _uxe_device_class_video_transmission_start(UX_DEVICE_CLASS_VIDEO_STREAM *video); 678 UINT _uxe_device_class_video_write_payload_get(UX_DEVICE_CLASS_VIDEO_STREAM *video, UCHAR **buffer, ULONG *max_length); 679 UINT _uxe_device_class_video_write_payload_commit(UX_DEVICE_CLASS_VIDEO_STREAM *video, ULONG length); 680 UINT _uxe_device_class_video_ioctl(UX_DEVICE_CLASS_VIDEO *video, ULONG ioctl_function, VOID *parameter); 681 682 /* Define Video Class API prototypes. */ 683 684 #if defined(UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING) 685 686 #define ux_device_class_video_entry _ux_device_class_video_entry 687 688 #define ux_device_class_video_read_thread_entry _ux_device_class_video_read_thread_entry 689 #define ux_device_class_video_write_thread_entry _ux_device_class_video_write_thread_entry 690 691 #define ux_device_class_video_request_error_set _ux_device_class_video_request_error_set 692 #define ux_device_class_video_stream_error_set _ux_device_class_video_stream_error_set 693 694 #define ux_device_class_video_stream_get _ux_device_class_video_stream_get 695 696 #define ux_device_class_video_max_payload_length _uxe_device_class_video_max_payload_length 697 698 #define ux_device_class_video_reception_start _uxe_device_class_video_reception_start 699 700 #define ux_device_class_video_read_payload_get _uxe_device_class_video_read_payload_get 701 #define ux_device_class_video_read_payload_free _uxe_device_class_video_read_payload_free 702 703 #define ux_device_class_video_transmission_start _uxe_device_class_video_transmission_start 704 705 #define ux_device_class_video_write_payload_get _uxe_device_class_video_write_payload_get 706 #define ux_device_class_video_write_payload_commit _uxe_device_class_video_write_payload_commit 707 708 #define ux_device_class_video_ioctl _uxe_device_class_video_ioctl 709 710 #define ux_device_class_video_read_task_function _ux_device_class_video_read_task_function 711 #define ux_device_class_video_write_task_function _ux_device_class_video_write_task_function 712 713 #else 714 715 #define ux_device_class_video_entry _ux_device_class_video_entry 716 717 #define ux_device_class_video_read_thread_entry _ux_device_class_video_read_thread_entry 718 #define ux_device_class_video_write_thread_entry _ux_device_class_video_write_thread_entry 719 720 #define ux_device_class_video_request_error_set _ux_device_class_video_request_error_set 721 #define ux_device_class_video_stream_error_set _ux_device_class_video_stream_error_set 722 723 #define ux_device_class_video_stream_get _ux_device_class_video_stream_get 724 725 #define ux_device_class_video_max_payload_length _ux_device_class_video_max_payload_length 726 727 #define ux_device_class_video_reception_start _ux_device_class_video_reception_start 728 729 #define ux_device_class_video_read_payload_get _ux_device_class_video_read_payload_get 730 #define ux_device_class_video_read_payload_free _ux_device_class_video_read_payload_free 731 732 #define ux_device_class_video_transmission_start _ux_device_class_video_transmission_start 733 734 #define ux_device_class_video_write_payload_get _ux_device_class_video_write_payload_get 735 #define ux_device_class_video_write_payload_commit _ux_device_class_video_write_payload_commit 736 737 #define ux_device_class_video_ioctl _ux_device_class_video_ioctl 738 739 #define ux_device_class_video_read_task_function _ux_device_class_video_read_task_function 740 #define ux_device_class_video_write_task_function _ux_device_class_video_write_task_function 741 742 #endif /* UX_DEVICE_CLASS_VIDEO_ENABLE_ERROR_CHECKING */ 743 744 /* Determine if a C++ compiler is being used. If so, complete the standard 745 C conditional started above. */ 746 #ifdef __cplusplus 747 } 748 #endif 749 750 #endif 751