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_host_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 video class. */ 37 /* */ 38 /* RELEASE HISTORY */ 39 /* */ 40 /* DATE NAME DESCRIPTION */ 41 /* */ 42 /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ 43 /* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ 44 /* added new definition, field */ 45 /* and functions for video */ 46 /* control handling, used UX */ 47 /* prefix to refer to TX */ 48 /* symbols instead of using */ 49 /* them directly, */ 50 /* resulting in version 6.1 */ 51 /* 08-02-2021 Wen Wang Modified comment(s), */ 52 /* added extern "C" keyword */ 53 /* for compatibility with C++, */ 54 /* added new definitions */ 55 /* according to UVC 1.5 Class */ 56 /* specification, */ 57 /* resulting in version 6.1.8 */ 58 /* 10-31-2023 Chaoqiong Xiao Modified comment(s), */ 59 /* added format and frame data */ 60 /* fields for H264 support, */ 61 /* optimized USB descriptors, */ 62 /* added error checks support, */ 63 /* resulting in version 6.3.0 */ 64 /* */ 65 /**************************************************************************/ 66 67 #ifndef UX_HOST_CLASS_VIDEO_H 68 #define UX_HOST_CLASS_VIDEO_H 69 70 /* Determine if a C++ compiler is being used. If so, ensure that standard 71 C is used to process the API information. */ 72 73 #ifdef __cplusplus 74 75 /* Yes, C++ compiler is present. Use standard C. */ 76 extern "C" { 77 78 #endif 79 80 /* Internal option: enable the basic USBX error checking. This define is typically used 81 while debugging application. */ 82 #if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_HOST_CLASS_VIDEO_ENABLE_ERROR_CHECKING) 83 #define UX_HOST_CLASS_VIDEO_ENABLE_ERROR_CHECKING 84 #endif 85 86 /* Define external static data. */ 87 extern UCHAR _ux_system_class_video_interface_descriptor_structure[]; 88 extern UCHAR _ux_system_class_video_input_terminal_descriptor_structure[]; 89 extern UCHAR _ux_system_class_video_input_header_descriptor_structure[]; 90 extern UCHAR _ux_system_class_video_processing_unit_descriptor_structure[]; 91 extern UCHAR _ux_system_class_video_streaming_interface_descriptor_structure[]; 92 extern UCHAR _ux_system_class_video_streaming_endpoint_descriptor_structure[]; 93 extern UCHAR _ux_system_class_video_frame_descriptor_structure[]; 94 95 extern UCHAR _ux_system_host_class_video_name[]; 96 97 /* Define Video Class IOCTL constants. */ 98 99 #define UX_HOST_CLASS_VIDEO_IOCTL_GET_INPUT_TERMINAL 0x01 100 #define UX_HOST_CLASS_VIDEO_IOCTL_GET_FORMAT_NUMBER 0x02 101 #define UX_HOST_CLASS_VIDEO_IOCTL_GET_FORMAT_DATA 0x03 102 #define UX_HOST_CLASS_VIDEO_IOCTL_GET_FRAME_NUMBER 0x04 103 #define UX_HOST_CLASS_VIDEO_IOCTL_GET_FRAME_DATA 0x05 104 #define UX_HOST_CLASS_VIDEO_IOCTL_CHANNEL_START 0x06 105 #define UX_HOST_CLASS_VIDEO_IOCTL_CHANNEL_STOP 0x07 106 #define UX_HOST_CLASS_VIDEO_IOCTL_GET_FRAME_INTERVAL 0x08 107 108 #define UX_HOST_CLASS_VIDEO_IOCTL_ABORT_IN_PIPE 0x80 109 110 /* Define Video Class main constants. */ 111 112 #define UX_HOST_CLASS_VIDEO_CLASS_TRANSFER_TIMEOUT 30 113 #define UX_HOST_CLASS_VIDEO_CLASS 0x0e 114 #define UX_HOST_CLASS_VIDEO_SUBCLASS_UNDEFINED 0 115 #define UX_HOST_CLASS_VIDEO_SUBCLASS_CONTROL 1 116 #define UX_HOST_CLASS_VIDEO_SUBCLASS_STREAMING 2 117 #define UX_HOST_CLASS_VIDEO_SUBCLASS_INTERFACE_COLLECTION 3 118 119 120 /* Define Video Class main descriptor types. */ 121 122 #define UX_HOST_CLASS_VIDEO_CS_UNDEFINED 0x20 123 #define UX_HOST_CLASS_VIDEO_CS_DEVICE 0x21 124 #define UX_HOST_CLASS_VIDEO_CS_CONFIGURATION 0x22 125 #define UX_HOST_CLASS_VIDEO_CS_STRING 0x23 126 #define UX_HOST_CLASS_VIDEO_CS_INTERFACE 0x24 127 #define UX_HOST_CLASS_VIDEO_CS_ENDPOINT 0x25 128 129 /* Define Video Class specific VC . */ 130 131 #define UX_HOST_CLASS_VIDEO_VC_DESCRIPTOR_UNDEFINED 0x00 132 #define UX_HOST_CLASS_VIDEO_VC_HEADER 0x01 133 #define UX_HOST_CLASS_VIDEO_VC_INPUT_TERMINAL 0x02 134 #define UX_HOST_CLASS_VIDEO_VC_OUTPUT_TERMINAL 0x03 135 #define UX_HOST_CLASS_VIDEO_VC_SELECTOR_UNIT 0x04 136 #define UX_HOST_CLASS_VIDEO_VC_PROCESSING_UNIT 0x05 137 #define UX_HOST_CLASS_VIDEO_VC_EXTENSION_UNIT 0x06 138 #define UX_HOST_CLASS_VIDEO_VC_ENCODING_UNIT 0x07 139 140 /* Define Video Class specific VS . */ 141 142 #define UX_HOST_CLASS_VIDEO_VS_UNDEFINED 0x00 143 #define UX_HOST_CLASS_VIDEO_VS_INPUT_HEADER 0x01 144 #define UX_HOST_CLASS_VIDEO_VS_OUTPUT_HEADER 0x02 145 #define UX_HOST_CLASS_VIDEO_VS_STILL_IMAGE_FRAME 0x03 146 #define UX_HOST_CLASS_VIDEO_VS_FORMAT_UNCOMPRESSED 0x04 147 #define UX_HOST_CLASS_VIDEO_VS_FRAME_UNCOMPRESSED 0x05 148 #define UX_HOST_CLASS_VIDEO_VS_FORMAT_MJPEG 0x06 149 #define UX_HOST_CLASS_VIDEO_VS_FRAME_MJPEG 0x07 150 #define UX_HOST_CLASS_VIDEO_VS_FORMAT_MPEG2TS 0x0A 151 #define UX_HOST_CLASS_VIDEO_VS_FORMAT_DV 0x0C 152 #define UX_HOST_CLASS_VIDEO_VS_COLORFORMAT 0x0D 153 #define UX_HOST_CLASS_VIDEO_VS_FORMAT_FRAME_BASED 0x10 154 #define UX_HOST_CLASS_VIDEO_VS_FRAME_FRAME_BASED 0x11 155 #define UX_HOST_CLASS_VIDEO_VS_FORMAT_STREAM_BASED 0x12 156 #define UX_HOST_CLASS_VIDEO_VS_FORMAT_H264 0x13 157 #define UX_HOST_CLASS_VIDEO_VS_FRAME_H264 0x14 158 #define UX_HOST_CLASS_VIDEO_VS_FORMAT_H264_SIMULCAST 0x15 159 #define UX_HOST_CLASS_VIDEO_VS_FORMAT_VP8 0x16 160 #define UX_HOST_CLASS_VIDEO_VS_FRAME_VP8 0x17 161 #define UX_HOST_CLASS_VIDEO_VS_FORMAT_VP8_SIMULCAST 0x18 162 163 164 /* Define Video Class specific Control Selectors. */ 165 166 #define UX_HOST_CLASS_VIDEO_CT_CONTROL_UNDEFINED 0x00 167 #define UX_HOST_CLASS_VIDEO_CT_SCANNING_MODE_CONTROL 0x01 168 #define UX_HOST_CLASS_VIDEO_CT_AE_MODE_CONTROL 0x02 169 #define UX_HOST_CLASS_VIDEO_CT_AE_PRIORITY_CONTROL 0x03 170 #define UX_HOST_CLASS_VIDEO_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04 171 #define UX_HOST_CLASS_VIDEO_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05 172 #define UX_HOST_CLASS_VIDEO_CT_FOCUS_ABSOLUTE_CONTROL 0x06 173 #define UX_HOST_CLASS_VIDEO_CT_FOCUS_RELATIVE_CONTROL 0x07 174 #define UX_HOST_CLASS_VIDEO_CT_FOCUS_AUTO_CONTROL 0x08 175 #define UX_HOST_CLASS_VIDEO_CT_IRIS_ABSOLUTE_CONTROL 0x09 176 #define UX_HOST_CLASS_VIDEO_CT_IRIS_RELATIVE_CONTROL 0x0A 177 #define UX_HOST_CLASS_VIDEO_CT_ZOOM_ABSOLUTE_CONTROL 0x0B 178 #define UX_HOST_CLASS_VIDEO_CT_ZOOM_RELATIVE_CONTROL 0x0C 179 #define UX_HOST_CLASS_VIDEO_CT_PANTILT_ABSOLUTE_CONTROL 0x0D 180 #define UX_HOST_CLASS_VIDEO_CT_PANTILT_RELATIVE_CONTROL 0x0E 181 #define UX_HOST_CLASS_VIDEO_CT_ROLL_ABSOLUTE_CONTROL 0x0F 182 #define UX_HOST_CLASS_VIDEO_CT_ROLL_RELATIVE_CONTROL 0x10 183 #define UX_HOST_CLASS_VIDEO_CT_PRIVACY_CONTROL 0x11 184 #define UX_HOST_CLASS_VIDEO_CT_FOCUS_SIMPLE_CONTROL 0x12 185 #define UX_HOST_CLASS_VIDEO_CT_WINDOW_CONTROL 0x13 186 #define UX_HOST_CLASS_VIDEO_CT_REGION_OF_INTEREST_CONTROL 0x14 187 188 189 #define UX_HOST_CLASS_VIDEO_PU_CONTROL_UNDEFINED 0x00 190 #define UX_HOST_CLASS_VIDEO_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01 191 #define UX_HOST_CLASS_VIDEO_PU_BRIGHTNESS_CONTROL 0x02 192 #define UX_HOST_CLASS_VIDEO_PU_CONTRAST_CONTROL 0x03 193 #define UX_HOST_CLASS_VIDEO_PU_GAIN_CONTROL 0x04 194 #define UX_HOST_CLASS_VIDEO_PU_POWER_LINE_FREQUENCY_CONTROL 0x05 195 #define UX_HOST_CLASS_VIDEO_PU_HUE_CONTROL 0x06 196 #define UX_HOST_CLASS_VIDEO_PU_SATURATION_CONTROL 0x07 197 #define UX_HOST_CLASS_VIDEO_PU_SHARPNESS_CONTROL 0x08 198 #define UX_HOST_CLASS_VIDEO_PU_GAMMA_CONTROL 0x09 199 #define UX_HOST_CLASS_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0A 200 #define UX_HOST_CLASS_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0B 201 #define UX_HOST_CLASS_VIDEO_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0C 202 #define UX_HOST_CLASS_VIDEO_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0D 203 #define UX_HOST_CLASS_VIDEO_PU_DIGITAL_MULTIPLIER_CONTROL 0x0E 204 #define UX_HOST_CLASS_VIDEO_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0F 205 #define UX_HOST_CLASS_VIDEO_PU_HUE_AUTO_CONTROL 0x10 206 #define UX_HOST_CLASS_VIDEO_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11 207 #define UX_HOST_CLASS_VIDEO_PU_ANALOG_LOCK_STATUS_CONTROL 0x12 208 #define UX_HOST_CLASS_VIDEO_PU_CONTRAST_AUTO_CONTROL 0x13 209 210 211 #define UX_HOST_CLASS_VIDEO_VS_CONTROL_UNDEFINED 0x00 212 #define UX_HOST_CLASS_VIDEO_VS_PROBE_CONTROL 0x01 213 #define UX_HOST_CLASS_VIDEO_VS_COMMIT_CONTROL 0x02 214 #define UX_HOST_CLASS_VIDEO_VS_STILL_PROBE_CONTROL 0x03 215 #define UX_HOST_CLASS_VIDEO_VS_STILL_COMMIT_CONTROL 0x04 216 #define UX_HOST_CLASS_VIDEO_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05 217 #define UX_HOST_CLASS_VIDEO_VS_STREAM_ERROR_CODE_CONTROL 0x06 218 #define UX_HOST_CLASS_VIDEO_VS_GENERATE_KEY_FRAME_CONTROL 0x07 219 #define UX_HOST_CLASS_VIDEO_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08 220 #define UX_HOST_CLASS_VIDEO_VS_SYNCH_DELAY_CONTROL 0x09 221 222 223 /* Define USB Video Class terminal types. */ 224 225 #define UX_HOST_CLASS_VIDEO_TT_VENDOR_SPECIFIC 0x0100 226 #define UX_HOST_CLASS_VIDEO_TT_STREAMING 0x0101 227 228 #define UX_HOST_CLASS_VIDEO_ITT_VENDOR_SPECIFIC 0x0200 229 #define UX_HOST_CLASS_VIDEO_ITT_CAMERA 0x0201 230 #define UX_HOST_CLASS_VIDEO_ITT_MEDIA_TRANSPORT_INPUT 0x0202 231 232 #define UX_HOST_CLASS_VIDEO_OTT_VENDOR_SPECIFIC 0x0300 233 #define UX_HOST_CLASS_VIDEO_OTT_CAMERA 0x0301 234 #define UX_HOST_CLASS_VIDEO_OTT_MEDIA_TRANSPORT_INPUT 0x0302 235 236 237 /* Define USB Video Class Request Error Code Control. */ 238 239 #define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_NO_ERROR 0x00 240 #define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_NOT_READY 0x01 241 #define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_WRONG_STATE 0x02 242 #define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_POWER 0x03 243 #define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_OUT_OF_RANGE 0x04 244 #define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_INPUT 0x05 245 #define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_CONTROL 0x06 246 #define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_REQUEST 0x07 247 #define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_INVALID_VALUE_WITHIN_RANGE 0x08 248 #define UX_HOST_CLASS_VIDEO_REQUEST_ERROR_CODE_UNKNOWN 0xFF 249 250 251 /* Define Video Class encoding format types. */ 252 253 #define UX_HOST_CLASS_VIDEO_INTERFACE_DESCRIPTOR_ENTRIES 8 254 #define UX_HOST_CLASS_VIDEO_INTERFACE_DESCRIPTOR_LENGTH 8 255 256 #define UX_HOST_CLASS_VIDEO_INPUT_TERMINAL_DESCRIPTOR_ENTRIES 7 257 #define UX_HOST_CLASS_VIDEO_INPUT_TERMINAL_DESCRIPTOR_LENGTH 8 258 259 #define UX_HOST_CLASS_VIDEO_INPUT_HEADER_DESCRIPTOR_ENTRIES 12 260 #define UX_HOST_CLASS_VIDEO_INPUT_HEADER_DESCRIPTOR_LENGTH 13 261 262 #define UX_HOST_CLASS_VIDEO_PROCESSING_UNIT_DESCRIPTOR_ENTRIES 8 263 #define UX_HOST_CLASS_VIDEO_PROCESSING_UNIT_DESCRIPTOR_LENGTH 9 264 265 #define UX_HOST_CLASS_VIDEO_STREAMING_INTERFACE_DESCRIPTOR_ENTRIES 6 266 #define UX_HOST_CLASS_VIDEO_STREAMING_INTERFACE_DESCRIPTOR_LENGTH 6 267 268 #define UX_HOST_CLASS_VIDEO_STREAMING_ENDPOINT_DESCRIPTOR_ENTRIES 6 269 #define UX_HOST_CLASS_VIDEO_STREAMING_ENDPOINT_DESCRIPTOR_LENGTH 6 270 271 #define UX_HOST_CLASS_VIDEO_FRAME_DESCRIPTOR_ENTRIES 12 272 #define UX_HOST_CLASS_VIDEO_FRAME_DESCRIPTOR_LENGTH 30 273 274 275 /* Define Video Class specific interface descriptor. */ 276 277 #define UX_HOST_CLASS_VIDEO_MAX_CHANNEL 8 278 #define UX_HOST_CLASS_VIDEO_NAME_LENGTH 64 279 280 /* Define Video Class specific request codes. */ 281 282 #define UX_HOST_CLASS_VIDEO_REQUEST_CODE_UNDEFINED 0x00 283 #define UX_HOST_CLASS_VIDEO_SET_CUR 0x01 284 #define UX_HOST_CLASS_VIDEO_GET_CUR 0x81 285 #define UX_HOST_CLASS_VIDEO_GET_MIN 0x82 286 #define UX_HOST_CLASS_VIDEO_GET_MAX 0x83 287 #define UX_HOST_CLASS_VIDEO_GET_RES 0x84 288 #define UX_HOST_CLASS_VIDEO_GET_INFO 0x86 289 #define UX_HOST_CLASS_VIDEO_GET_DEF 0x87 290 #define UX_HOST_CLASS_VIDEO_GET_CUR_ALL 0x91 291 #define UX_HOST_CLASS_VIDEO_GET_MIN_ALL 0x92 292 #define UX_HOST_CLASS_VIDEO_GET_MAX_ALL 0x93 293 #define UX_HOST_CLASS_VIDEO_GET_RES_ALL 0x94 294 #define UX_HOST_CLASS_VIDEO_GET_GET_DEF_ALL 0x97 295 296 /* Define Video Class error codes. */ 297 298 #define UX_HOST_CLASS_VIDEO_WRONG_TYPE 0x90 299 #define UX_HOST_CLASS_VIDEO_WRONG_INTERFACE 0x91 300 #define UX_HOST_CLASS_VIDEO_PARAMETER_ERROR 0x92 301 #define UX_HOST_CLASS_VIDEO_DEVICE_NOT_READY 0x93 302 303 /* Define Video Class Terminal Control Selectors. */ 304 #define UX_HOST_CLASS_VIDEO_TCS_VC_CONTROL_UNDEFINED 0x00 305 #define UX_HOST_CLASS_VIDEO_TCS_VC_VIDEO_POWER_MODE_CONTROL 0x01 306 #define UX_HOST_CLASS_VIDEO_TCS_VC_REQUEST_ERROR_CODE_CONTROL 0x02 307 308 #define UX_HOST_CLASS_VIDEO_TCS_TE_CONTROL_UNDEFINED 0x00 309 310 #define UX_HOST_CLASS_VIDEO_TCS_SU_CONTROL_UNDEFINED 0x00 311 #define UX_HOST_CLASS_VIDEO_TCS_SU_INPUT_SELECT_CONTROL 0x01 312 313 #define UX_HOST_CLASS_VIDEO_TCS_CT_CONTROL_UNDEFINED 0x00 314 #define UX_HOST_CLASS_VIDEO_TCS_CT_SCANNING_MODE_CONTROL 0x01 315 #define UX_HOST_CLASS_VIDEO_TCS_CT_AE_MODE_CONTROL 0x02 316 #define UX_HOST_CLASS_VIDEO_TCS_CT_AE_PRIORITY_CONTROL 0x03 317 #define UX_HOST_CLASS_VIDEO_TCS_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04 318 #define UX_HOST_CLASS_VIDEO_TCS_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05 319 #define UX_HOST_CLASS_VIDEO_TCS_CT_FOCUS_ABSOLUTE_CONTROL 0x06 320 #define UX_HOST_CLASS_VIDEO_TCS_CT_FOCUS_RELATIVE_CONTROL 0x07 321 #define UX_HOST_CLASS_VIDEO_TCS_CT_FOCUS_AUTO_CONTROL 0x08 322 #define UX_HOST_CLASS_VIDEO_TCS_CT_IRIS_ABSOLUTE_CONTROL 0x09 323 #define UX_HOST_CLASS_VIDEO_TCS_CT_IRIS_RELATIVE_CONTROL 0x0A 324 #define UX_HOST_CLASS_VIDEO_TCS_CT_ZOOM_ABSOLUTE_CONTROL 0x0B 325 #define UX_HOST_CLASS_VIDEO_TCS_CT_ZOOM_RELATIVE_CONTROL 0x0C 326 #define UX_HOST_CLASS_VIDEO_TCS_CT_PANTILT_ABSOLUTE_CONTROL 0x0D 327 #define UX_HOST_CLASS_VIDEO_TCS_CT_PANTILT_RELATIVE_CONTROL 0x0E 328 #define UX_HOST_CLASS_VIDEO_TCS_CT_ROLL_ABSOLUTE_CONTROL 0x0F 329 #define UX_HOST_CLASS_VIDEO_TCS_CT_ROLL_RELATIVE_CONTROL 0x10 330 #define UX_HOST_CLASS_VIDEO_TCS_CT_PRIVACY_CONTROL 0x11 331 332 #define UX_HOST_CLASS_VIDEO_TCS_PU_CONTROL_UNDEFINED 0x00 333 #define UX_HOST_CLASS_VIDEO_TCS_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01 334 #define UX_HOST_CLASS_VIDEO_TCS_PU_BRIGHTNESS_CONTROL 0x02 335 #define UX_HOST_CLASS_VIDEO_TCS_PU_CONTRAST_CONTROL 0x03 336 #define UX_HOST_CLASS_VIDEO_TCS_PU_GAIN_CONTROL 0x04 337 #define UX_HOST_CLASS_VIDEO_TCS_PU_POWER_LINE_FREQUENCY_CONTROL 0x05 338 #define UX_HOST_CLASS_VIDEO_TCS_PU_HUE_CONTROL 0x06 339 #define UX_HOST_CLASS_VIDEO_TCS_PU_SATURATION_CONTROL 0x07 340 #define UX_HOST_CLASS_VIDEO_TCS_PU_SHARPNESS_CONTROL 0x08 341 #define UX_HOST_CLASS_VIDEO_TCS_PU_GAMMA_CONTROL 0x09 342 #define UX_HOST_CLASS_VIDEO_TCS_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0A 343 #define UX_HOST_CLASS_VIDEO_TCS_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0B 344 #define UX_HOST_CLASS_VIDEO_TCS_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0C 345 346 #define UX_HOST_CLASS_VIDEO_TCS_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0D 347 #define UX_HOST_CLASS_VIDEO_TCS_PU_DIGITAL_MULTIPLIER_CONTROL 0x0E 348 #define UX_HOST_CLASS_VIDEO_TCS_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0F 349 #define UX_HOST_CLASS_VIDEO_TCS_PU_HUE_AUTO_CONTROL 0x10 350 #define UX_HOST_CLASS_VIDEO_TCS_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11 351 #define UX_HOST_CLASS_VIDEO_TCS_PU_ANALOG_LOCK_STATUS_CONTROL 0x12 352 #define UX_HOST_CLASS_VIDEO_TCS_PU_CONTRAST_AUTO_CONTROL 0x13 353 354 #define UX_HOST_CLASS_VIDEO_TCS_XU_CONTROL_UNDEFINED 0x00 355 356 #define UX_HOST_CLASS_VIDEO_TCS_VS_CONTROL_UNDEFINED 0x00 357 #define UX_HOST_CLASS_VIDEO_TCS_VS_PROBE_CONTROL 0x01 358 #define UX_HOST_CLASS_VIDEO_TCS_VS_COMMIT_CONTROL 0x02 359 #define UX_HOST_CLASS_VIDEO_TCS_VS_STILL_PROBE_CONTROL 0x03 360 #define UX_HOST_CLASS_VIDEO_TCS_VS_STILL_COMMIT_CONTROL 0x04 361 #define UX_HOST_CLASS_VIDEO_TCS_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05 362 #define UX_HOST_CLASS_VIDEO_TCS_VS_STREAM_ERROR_CODE_CONTROL 0x06 363 #define UX_HOST_CLASS_VIDEO_TCS_VS_GENERATE_KEY_FRAME_CONTROL 0x07 364 #define UX_HOST_CLASS_VIDEO_TCS_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08 365 #define UX_HOST_CLASS_VIDEO_TCS_VS_SYNCH_DELAY_CONTROL 0x09 366 367 /* Define Video Class Probe and Commit Controls */ 368 369 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_LENGTH 34 370 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_HINT 0 371 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_FORMAT_INDEX 2 372 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_FRAME_INDEX 3 373 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_FRAME_INTERVAL 4 374 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_KEY_FRAME_RATE 8 375 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_PFRAME_RAE 10 376 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_COMP_QUALITY 12 377 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_COMP_WINDOW_SIZE 14 378 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_DELAY 16 379 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_MAX_VIDEO_FRAME_SIZE 18 380 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_MAX_PAYLOAD_TRANSFER_SIZE 22 381 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_CLOCK_FREQUENCY 26 382 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_FRAMING_INFO 30 383 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_PREFERED_VERSION 31 384 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_MIN_VERSION 32 385 #define UX_HOST_CLASS_VIDEO_PROBE_COMMIT_MAX_VERSION 33 386 387 #ifndef UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_COUNT 388 #define UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_COUNT 8 389 #endif 390 391 typedef struct UX_HOST_CLASS_VIDEO_INTERFACE_HEADER_DESCRIPTOR_STRUCT 392 { 393 394 UCHAR bLength; 395 UCHAR bDescriptorType; 396 UCHAR bDescriptorSubType; 397 UCHAR _align_bcdUVC[1]; 398 USHORT bcdUVC; 399 USHORT wTotalLength; 400 ULONG dwClockFrequency; 401 UCHAR bInCollection; 402 UCHAR baInterfaceNr; 403 } UX_HOST_CLASS_VIDEO_INTERFACE_HEADER_DESCRIPTOR; 404 405 /* Define Video Class specific input header interface descriptor. */ 406 407 typedef struct UX_HOST_CLASS_VIDEO_INPUT_TERMINAL_DESCRIPTOR_STRUCT 408 { 409 410 UCHAR bLength; 411 UCHAR bDescriptorType; 412 UCHAR bDescriptorSubType; 413 UCHAR bTerminalID; 414 USHORT wTerminalType; 415 UCHAR bAssocTerminal; 416 UCHAR iTerminal; 417 } UX_HOST_CLASS_VIDEO_INPUT_TERMINAL_DESCRIPTOR; 418 419 /* Define Video Class specific input header interface descriptor. */ 420 421 typedef struct UX_HOST_CLASS_VIDEO_INPUT_HEADER_DESCRIPTOR_STRUCT 422 { 423 424 UCHAR bLength; 425 UCHAR bDescriptorType; 426 UCHAR bDescriptorSubType; 427 UCHAR bNumFormats; 428 USHORT wTotalLength; 429 UCHAR bEndpointAddress; 430 UCHAR bmInfo; 431 UCHAR bTerminalLink; 432 UCHAR bStillCaptureMethod; 433 UCHAR bTriggerSupport; 434 UCHAR bTriggerUsage; 435 UCHAR bControlSize; 436 UCHAR bmaControls; 437 } UX_HOST_CLASS_VIDEO_INPUT_HEADER_DESCRIPTOR; 438 439 /* Define Video Class Selector descriptor. */ 440 441 typedef struct UX_HOST_CLASS_VIDEO_SELECTOR_UNIT_DESCRIPTOR_STRUCT 442 { 443 444 UCHAR bLength; 445 UCHAR bDescriptorType; 446 UCHAR bDescriptorSubtype; 447 UCHAR bUnitID; 448 UCHAR bNrInPins; 449 UCHAR baSourceID; 450 } UX_HOST_CLASS_VIDEO_SELECTOR_UNIT_DESCRIPTOR; 451 452 /* Define Video Class Camera Terminal descriptor. */ 453 454 typedef struct UX_HOST_CLASS_VIDEO_CAMERA_TERMINAL_DESCRIPTOR_STRUCT 455 { 456 457 UCHAR bLength; 458 UCHAR bDescriptorType; 459 UCHAR bDescriptorSubtype; 460 UCHAR bTerminalID; 461 USHORT wTerminalType; 462 UCHAR bAssocTerminal; 463 UCHAR iTerminal; 464 USHORT wObjectiveFocalLengthMin; 465 USHORT wObjectiveFocalLengthMax; 466 USHORT wOcularFocalLength; 467 UCHAR bControlSize; 468 UCHAR _align_bmControls[1]; 469 ULONG bmControls; 470 } UX_HOST_CLASS_VIDEO_CAMERA_TERMINAL_DESCRIPTOR; 471 472 /* Define Video Class Frame descriptor. */ 473 474 typedef struct UX_HOST_CLASS_VIDEO_FRAME_DESCRIPTOR_STRUCT 475 { 476 477 UCHAR bLength; 478 UCHAR bDescriptorType; 479 UCHAR bDescriptorSubtype; 480 UCHAR bFrameIndex; 481 UCHAR bmCapabilities; 482 UCHAR _align_wWidth[1]; 483 USHORT wWidth; 484 USHORT wHeight; 485 UCHAR _align_dwMinBitRate[2]; 486 ULONG dwMinBitRate; 487 ULONG dwMaxBitRate; 488 ULONG dwMaxVideoFrameBufferSize; 489 ULONG dwDefaultFrameInterval; 490 UCHAR bFrameIntervalType; 491 UCHAR _align_size[3]; 492 } UX_HOST_CLASS_VIDEO_FRAME_DESCRIPTOR; 493 494 495 496 /* Define Video Class Processing Unit descriptor. */ 497 498 typedef struct UX_HOST_CLASS_VIDEO_PROCESSING_UNIT_DESCRIPTOR_STRUCT 499 { 500 501 UCHAR bLength; 502 UCHAR bDescriptorType; 503 UCHAR bDescriptorSubtype; 504 UCHAR bUnitID; 505 UCHAR bSourceID; 506 UCHAR _align_wMaxMultiplier[1]; 507 USHORT wMaxMultiplier; 508 UCHAR bControlSize; 509 UCHAR bmControls; 510 UCHAR iProcessing; 511 UCHAR bmVideoStandards; 512 } UX_HOST_CLASS_VIDEO_PROCESSING_UNIT_DESCRIPTOR; 513 514 515 /* Define Video Class instance structure. */ 516 517 typedef struct UX_HOST_CLASS_VIDEO_STRUCT 518 { 519 520 struct UX_HOST_CLASS_VIDEO_STRUCT 521 *ux_host_class_video_next_instance; 522 UX_HOST_CLASS *ux_host_class_video_class; 523 UX_DEVICE *ux_host_class_video_device; 524 UX_INTERFACE *ux_host_class_video_streaming_interface; 525 ULONG ux_host_class_video_control_interface_number; 526 UX_ENDPOINT *ux_host_class_video_isochronous_endpoint; 527 UINT ux_host_class_video_state; 528 ULONG ux_host_class_video_feature_unit_id; 529 ULONG ux_host_class_video_terminal_id; 530 ULONG ux_host_class_video_terminal_type; 531 UCHAR *ux_host_class_video_configuration_descriptor; 532 ULONG ux_host_class_video_configuration_descriptor_length; 533 UCHAR ux_host_class_video_name[UX_HOST_CLASS_VIDEO_NAME_LENGTH]; 534 ULONG ux_host_class_video_number_formats; 535 ULONG ux_host_class_video_length_formats; 536 UCHAR *ux_host_class_video_format_address; 537 UCHAR *ux_host_class_video_current_format_address; 538 ULONG ux_host_class_video_current_format; 539 ULONG ux_host_class_video_number_frames; 540 ULONG ux_host_class_video_current_frame; 541 UCHAR *ux_host_class_video_current_frame_address; 542 ULONG ux_host_class_video_current_frame_interval; 543 ULONG ux_host_class_video_current_max_payload_size; 544 UX_TRANSFER ux_host_class_video_transfer_requests[UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_COUNT]; 545 ULONG ux_host_class_video_transfer_request_start_index; 546 ULONG ux_host_class_video_transfer_request_end_index; 547 UX_SEMAPHORE ux_host_class_video_semaphore; 548 UX_SEMAPHORE ux_host_class_video_semaphore_control_request; 549 VOID (*ux_host_class_video_transfer_completion_function)(UX_TRANSFER*); 550 551 } UX_HOST_CLASS_VIDEO; 552 553 554 /* Define Video Class isochronous USB transfer request structure. */ 555 556 typedef struct UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_STRUCT 557 { 558 559 ULONG ux_host_class_video_transfer_request_status; 560 UCHAR * ux_host_class_video_transfer_request_data_pointer; 561 ULONG ux_host_class_video_transfer_request_requested_length; 562 ULONG ux_host_class_video_transfer_request_actual_length; 563 VOID (*ux_host_class_video_transfer_request_completion_function) (struct UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_STRUCT *); 564 UX_SEMAPHORE ux_host_class_video_transfer_request_semaphore; 565 VOID *ux_host_class_video_transfer_request_class_instance; 566 UINT ux_host_class_video_transfer_request_completion_code; 567 struct UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST_STRUCT 568 *ux_host_class_video_transfer_request_next_video_transfer_request; 569 UX_TRANSFER ux_host_class_video_transfer_request; 570 } UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST; 571 572 573 /* Define Video Class channel/value control structures. */ 574 575 typedef struct UX_HOST_CLASS_VIDEO_CONTROL_STRUCT 576 { 577 578 ULONG ux_host_class_video_control; 579 LONG ux_host_class_video_control_min; 580 LONG ux_host_class_video_control_max; 581 LONG ux_host_class_video_control_res; 582 LONG ux_host_class_video_control_cur; 583 } UX_HOST_CLASS_VIDEO_CONTROL; 584 585 /* Define Video Class input terminal structures. */ 586 587 typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_INPUT_TERMINAL_STRUCT 588 { 589 590 ULONG ux_host_class_video_parameter_input_terminal_id; 591 ULONG ux_host_class_video_parameter_input_terminal_type; 592 593 } UX_HOST_CLASS_VIDEO_PARAMETER_INPUT_TERMINAL; 594 595 /* Define Video Class format number structure. */ 596 597 typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_NUMBER_FORMATS_STRUCT 598 { 599 600 ULONG ux_host_class_video_parameter_number_formats; 601 602 } UX_HOST_CLASS_VIDEO_PARAMETER_NUMBER_FORMATS; 603 604 /* Define Video Class format data structure. */ 605 606 typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_FORMAT_DATA_STRUCT 607 { 608 609 ULONG ux_host_class_video_parameter_format_requested; 610 ULONG ux_host_class_video_parameter_format_subtype; 611 UCHAR *ux_host_class_video_parameter_format_guid; /* not NULL if GUID is available for the subtype. */ 612 ULONG ux_host_class_video_parameter_number_frame_descriptors; 613 614 } UX_HOST_CLASS_VIDEO_PARAMETER_FORMAT_DATA; 615 616 typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_DATA_STRUCT 617 { 618 619 ULONG ux_host_class_video_parameter_frame_requested; 620 ULONG ux_host_class_video_parameter_frame_subtype; 621 ULONG ux_host_class_video_parameter_frame_width; 622 ULONG ux_host_class_video_parameter_frame_height; 623 ULONG ux_host_class_video_parameter_default_frame_interval; 624 ULONG ux_host_class_video_parameter_frame_interval_type; /* 0: continuous {min,max,step}, n: discrete */ 625 UCHAR *ux_host_class_video_parameter_frame_intervals; /* {dwMin,dwMax,dwStep},... or dw1,dw2,... depending on interval type. */ 626 627 } UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_DATA; 628 629 630 typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_CHANNEL_STRUCT 631 { 632 633 ULONG ux_host_class_video_parameter_channel_bandwidth_selection; 634 ULONG ux_host_class_video_parameter_format_requested; 635 ULONG ux_host_class_video_parameter_frame_requested; 636 ULONG ux_host_class_video_parameter_frame_interval_requested; 637 638 } UX_HOST_CLASS_VIDEO_PARAMETER_CHANNEL; 639 640 typedef struct UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_INTERVAL_STRUCT 641 { 642 643 ULONG ux_host_class_video_parameter_frame_requested; 644 ULONG *ux_host_class_video_parameter_frame_interval_buffer; 645 ULONG ux_host_class_video_parameter_frame_interval_buffer_length; 646 ULONG ux_host_class_video_parameter_frame_interval_buffer_length_written; 647 648 } UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_INTERVAL; 649 650 /* Define Video Class function prototypes. */ 651 652 UINT _ux_host_class_video_activate(UX_HOST_CLASS_COMMAND *command); 653 UINT _ux_host_class_video_configure(UX_HOST_CLASS_VIDEO *video); 654 UINT _ux_host_class_video_control_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_CONTROL *video_control); 655 UINT _ux_host_class_video_control_value_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_CONTROL *video_control); 656 UINT _ux_host_class_video_control_value_set(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_CONTROL *video_control); 657 UINT _ux_host_class_video_deactivate(UX_HOST_CLASS_COMMAND *command); 658 UINT _ux_host_class_video_descriptor_get(UX_HOST_CLASS_VIDEO *video); 659 UINT _ux_host_class_video_endpoints_get(UX_HOST_CLASS_VIDEO *video); 660 UINT _ux_host_class_video_entry(UX_HOST_CLASS_COMMAND *command); 661 UINT _ux_host_class_video_read(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST *video_transfer_request); 662 UINT _ux_host_class_video_transfer_request(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST *video_transfer_request); 663 VOID _ux_host_class_video_transfer_request_completed(UX_TRANSFER *transfer_request); 664 VOID _ux_host_class_video_transfer_request_callback(UX_TRANSFER *transfer_request); 665 UINT _ux_host_class_video_control_list_get(UX_HOST_CLASS_VIDEO *video); 666 UINT _ux_host_class_video_input_format_get(UX_HOST_CLASS_VIDEO *video); 667 UINT _ux_host_class_video_input_terminal_get(UX_HOST_CLASS_VIDEO *video); 668 UINT _ux_host_class_video_alternate_setting_locate(UX_HOST_CLASS_VIDEO *video, UINT max_payload_size, UINT *alternate_setting); 669 UINT _ux_host_class_video_ioctl(UX_HOST_CLASS_VIDEO *video, ULONG ioctl_function, VOID *parameter); 670 UINT _ux_host_class_video_format_data_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_PARAMETER_FORMAT_DATA *format_parameter); 671 UINT _ux_host_class_video_frame_data_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_DATA *frame_parameter); 672 UINT _ux_host_class_video_frame_interval_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_PARAMETER_FRAME_INTERVAL *interval_parameter); 673 UINT _ux_host_class_video_channel_start(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_PARAMETER_CHANNEL *video_parameter); 674 UINT _ux_host_class_video_stop(UX_HOST_CLASS_VIDEO *video); 675 UINT _ux_host_class_video_start(UX_HOST_CLASS_VIDEO *video); 676 UINT _ux_host_class_video_frame_parameters_set(UX_HOST_CLASS_VIDEO *video, ULONG frame_format, ULONG width, ULONG height, ULONG frame_interval); 677 ULONG _ux_host_class_video_max_payload_get(UX_HOST_CLASS_VIDEO *video); 678 UINT _ux_host_class_video_transfer_buffer_add(UX_HOST_CLASS_VIDEO *video, UCHAR* buffer); 679 UINT _ux_host_class_video_transfer_buffers_add(UX_HOST_CLASS_VIDEO *video, UCHAR** buffers, ULONG num_buffers); 680 VOID _ux_host_class_video_transfer_callback_set(UX_HOST_CLASS_VIDEO *video, VOID (*callback_function)(UX_TRANSFER*)); 681 UINT _ux_host_class_video_entities_parse(UX_HOST_CLASS_VIDEO *video, 682 UINT(*parse_function)(VOID *arg, 683 UCHAR *packed_interface_descriptor, 684 UCHAR *packed_entity_descriptor), 685 VOID* arg); 686 UINT _ux_host_class_video_control_request(UX_HOST_CLASS_VIDEO *video, 687 UINT request, UCHAR interface_index, 688 UINT entity_id, UINT control_selector, 689 UCHAR *parameter, UINT parameter_size); 690 691 UINT _uxe_host_class_video_control_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_CONTROL *video_control); 692 UINT _uxe_host_class_video_control_value_get(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_CONTROL *video_control); 693 UINT _uxe_host_class_video_control_value_set(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_CONTROL *video_control); 694 UINT _uxe_host_class_video_read(UX_HOST_CLASS_VIDEO *video, UX_HOST_CLASS_VIDEO_TRANSFER_REQUEST *video_transfer_request); 695 UINT _uxe_host_class_video_ioctl(UX_HOST_CLASS_VIDEO *video, ULONG ioctl_function, VOID *parameter); 696 UINT _uxe_host_class_video_start(UX_HOST_CLASS_VIDEO *video); 697 UINT _uxe_host_class_video_stop(UX_HOST_CLASS_VIDEO *video); 698 UINT _uxe_host_class_video_frame_parameters_set(UX_HOST_CLASS_VIDEO *video, ULONG frame_format, ULONG width, ULONG height, ULONG frame_interval); 699 ULONG _uxe_host_class_video_max_payload_get(UX_HOST_CLASS_VIDEO *video); 700 UINT _uxe_host_class_video_transfer_buffer_add(UX_HOST_CLASS_VIDEO *video, UCHAR* buffer); 701 UINT _uxe_host_class_video_transfer_buffers_add(UX_HOST_CLASS_VIDEO *video, UCHAR** buffers, ULONG num_buffers); 702 VOID _uxe_host_class_video_transfer_callback_set(UX_HOST_CLASS_VIDEO *video, VOID (*callback_function)(UX_TRANSFER*)); 703 UINT _uxe_host_class_video_entities_parse(UX_HOST_CLASS_VIDEO *video, 704 UINT(*parse_function)(VOID *arg, 705 UCHAR *packed_interface_descriptor, 706 UCHAR *packed_entity_descriptor), 707 VOID* arg); 708 UINT _uxe_host_class_video_control_request(UX_HOST_CLASS_VIDEO *video, 709 UINT request, UCHAR interface_index, 710 UINT entity_id, UINT control_selector, 711 UCHAR *parameter, UINT parameter_size); 712 713 /* Define Video Class API prototypes. */ 714 #if defined(UX_HOST_CLASS_VIDEO_ENABLE_ERROR_CHECKING) 715 716 #define ux_host_class_video_entry _ux_host_class_video_entry 717 #define ux_host_class_video_control_get _uxe_host_class_video_control_get 718 #define ux_host_class_video_control_value_get _uxe_host_class_video_control_value_get 719 #define ux_host_class_video_control_value_set _uxe_host_class_video_control_value_set 720 #define ux_host_class_video_read _uxe_host_class_video_read 721 #define ux_host_class_video_ioctl _uxe_host_class_video_ioctl 722 #define ux_host_class_video_start _uxe_host_class_video_start 723 #define ux_host_class_video_stop _uxe_host_class_video_stop 724 #define ux_host_class_video_frame_parameters_set _uxe_host_class_video_frame_parameters_set 725 #define ux_host_class_video_max_payload_get _uxe_host_class_video_max_payload_get 726 #define ux_host_class_video_transfer_buffer_add _uxe_host_class_video_transfer_buffer_add 727 #define ux_host_class_video_transfer_buffers_add _uxe_host_class_video_transfer_buffers_add 728 #define ux_host_class_video_transfer_callback_set _uxe_host_class_video_transfer_callback_set 729 #define ux_host_class_video_entities_parse _uxe_host_class_video_entities_parse 730 #define ux_host_class_video_control_request _uxe_host_class_video_control_request 731 732 #else 733 734 #define ux_host_class_video_entry _ux_host_class_video_entry 735 #define ux_host_class_video_control_get _ux_host_class_video_control_get 736 #define ux_host_class_video_control_value_get _ux_host_class_video_control_value_get 737 #define ux_host_class_video_control_value_set _ux_host_class_video_control_value_set 738 #define ux_host_class_video_read _ux_host_class_video_read 739 #define ux_host_class_video_ioctl _ux_host_class_video_ioctl 740 #define ux_host_class_video_start _ux_host_class_video_start 741 #define ux_host_class_video_stop _ux_host_class_video_stop 742 #define ux_host_class_video_frame_parameters_set _ux_host_class_video_frame_parameters_set 743 #define ux_host_class_video_max_payload_get _ux_host_class_video_max_payload_get 744 #define ux_host_class_video_transfer_buffer_add _ux_host_class_video_transfer_buffer_add 745 #define ux_host_class_video_transfer_buffers_add _ux_host_class_video_transfer_buffers_add 746 #define ux_host_class_video_transfer_callback_set _ux_host_class_video_transfer_callback_set 747 #define ux_host_class_video_entities_parse _ux_host_class_video_entities_parse 748 #define ux_host_class_video_control_request _ux_host_class_video_control_request 749 750 #endif 751 752 /* Determine if a C++ compiler is being used. If so, complete the standard 753 C conditional started above. */ 754 #ifdef __cplusplus 755 } 756 #endif 757 758 #endif 759 760 761