1 /* 2 * Copyright (c) 2022, sakumisu 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 #ifndef USB_VIDEO_H 7 #define USB_VIDEO_H 8 9 #define USB_DEVICE_VIDEO_CLASS_VERSION_1_5 0 10 11 /*! @brief Video device subclass code */ 12 #define VIDEO_SC_UNDEFINED 0x00U 13 #define VIDEO_SC_VIDEOCONTROL 0x01U 14 #define VIDEO_SC_VIDEOSTREAMING 0x02U 15 #define VIDEO_SC_VIDEO_INTERFACE_COLLECTION 0x03U 16 17 /*! @brief Video device protocol code */ 18 #define VIDEO_PC_PROTOCOL_UNDEFINED 0x00U 19 #define VIDEO_PC_PROTOCOL_15 0x01U 20 21 /*! @brief Video device class-specific descriptor type */ 22 #define VIDEO_CS_UNDEFINED_DESCRIPTOR_TYPE 0x20U 23 #define VIDEO_CS_DEVICE_DESCRIPTOR_TYPE 0x21U 24 #define VIDEO_CS_CONFIGURATION_DESCRIPTOR_TYPE 0x22U 25 #define VIDEO_CS_STRING_DESCRIPTOR_TYPE 0x23U 26 #define VIDEO_CS_INTERFACE_DESCRIPTOR_TYPE 0x24U 27 #define VIDEO_CS_ENDPOINT_DESCRIPTOR_TYPE 0x25U 28 29 /*! @brief Video device class-specific VC interface descriptor subtype */ 30 #define VIDEO_VC_DESCRIPTOR_UNDEFINED_DESCRIPTOR_SUBTYPE 0x00U 31 #define VIDEO_VC_HEADER_DESCRIPTOR_SUBTYPE 0x01U 32 #define VIDEO_VC_INPUT_TERMINAL_DESCRIPTOR_SUBTYPE 0x02U 33 #define VIDEO_VC_OUTPUT_TERMINAL_DESCRIPTOR_SUBTYPE 0x03U 34 #define VIDEO_VC_SELECTOR_UNIT_DESCRIPTOR_SUBTYPE 0x04U 35 #define VIDEO_VC_PROCESSING_UNIT_DESCRIPTOR_SUBTYPE 0x05U 36 #define VIDEO_VC_EXTENSION_UNIT_DESCRIPTOR_SUBTYPE 0x06U 37 #define VIDEO_VC_ENCODING_UNIT_DESCRIPTOR_SUBTYPE 0x07U 38 39 /*! @brief Video device class-specific VS interface descriptor subtype */ 40 #define VIDEO_VS_UNDEFINED_DESCRIPTOR_SUBTYPE 0x00U 41 #define VIDEO_VS_INPUT_HEADER_DESCRIPTOR_SUBTYPE 0x01U 42 #define VIDEO_VS_OUTPUT_HEADER_DESCRIPTOR_SUBTYPE 0x02U 43 #define VIDEO_VS_STILL_IMAGE_FRAME_DESCRIPTOR_SUBTYPE 0x03U 44 #define VIDEO_VS_FORMAT_UNCOMPRESSED_DESCRIPTOR_SUBTYPE 0x04U 45 #define VIDEO_VS_FRAME_UNCOMPRESSED_DESCRIPTOR_SUBTYPE 0x05U 46 #define VIDEO_VS_FORMAT_MJPEG_DESCRIPTOR_SUBTYPE 0x06U 47 #define VIDEO_VS_FRAME_MJPEG_DESCRIPTOR_SUBTYPE 0x07U 48 #define VIDEO_VS_FORMAT_MPEG2TS_DESCRIPTOR_SUBTYPE 0x0AU 49 #define VIDEO_VS_FORMAT_DV_DESCRIPTOR_SUBTYPE 0x0CU 50 #define VIDEO_VS_COLORFORMAT_DESCRIPTOR_SUBTYPE 0x0DU 51 #define VIDEO_VS_FORMAT_FRAME_BASED_DESCRIPTOR_SUBTYPE 0x10U 52 #define VIDEO_VS_FRAME_FRAME_BASED_DESCRIPTOR_SUBTYPE 0x11U 53 #define VIDEO_VS_FORMAT_STREAM_BASED_DESCRIPTOR_SUBTYPE 0x12U 54 #define VIDEO_VS_FORMAT_H264_DESCRIPTOR_SUBTYPE 0x13U 55 #define VIDEO_VS_FRAME_H264_DESCRIPTOR_SUBTYPE 0x14U 56 #define VIDEO_VS_FORMAT_H264_SIMULCAST_DESCRIPTOR_SUBTYPE 0x15U 57 #define VIDEO_VS_FORMAT_VP8_DESCRIPTOR_SUBTYPE 0x16U 58 #define VIDEO_VS_FRAME_VP8_DESCRIPTOR_SUBTYPE 0x17U 59 #define VIDEO_VS_FORMAT_VP8_SIMULCAST_DESCRIPTOR_SUBTYPE 0x18U 60 61 /*! @brief Video device class-specific VC endpoint descriptor subtype */ 62 #define VIDEO_EP_UNDEFINED_DESCRIPTOR_SUBTYPE 0x00U 63 #define VIDEO_EP_GENERAL_DESCRIPTOR_SUBTYPE 0x01U 64 #define VIDEO_EP_ENDPOINT_DESCRIPTOR_SUBTYPE 0x02U 65 #define VIDEO_EP_INTERRUPT_DESCRIPTOR_SUBTYPE 0x03U 66 67 /*! @brief Video device class-specific request code */ 68 #define VIDEO_REQUEST_UNDEFINED 0x00U 69 #define VIDEO_REQUEST_SET_CUR 0x01U 70 #define VIDEO_REQUEST_SET_CUR_ALL 0x11U 71 #define VIDEO_REQUEST_GET_CUR 0x81U 72 #define VIDEO_REQUEST_GET_MIN 0x82U 73 #define VIDEO_REQUEST_GET_MAX 0x83U 74 #define VIDEO_REQUEST_GET_RES 0x84U 75 #define VIDEO_REQUEST_GET_LEN 0x85U 76 #define VIDEO_REQUEST_GET_INFO 0x86U 77 #define VIDEO_REQUEST_GET_DEF 0x87U 78 #define VIDEO_REQUEST_GET_CUR_ALL 0x91U 79 #define VIDEO_REQUEST_GET_MIN_ALL 0x92U 80 #define VIDEO_REQUEST_GET_MAX_ALL 0x93U 81 #define VIDEO_REQUEST_GET_RES_ALL 0x94U 82 #define VIDEO_REQUEST_GET_DEF_ALL 0x97U 83 84 /*! @brief Video device class-specific VideoControl interface control selector */ 85 #define VIDEO_VC_CONTROL_UNDEFINED 0x00U 86 #define VIDEO_VC_VIDEO_POWER_MODE_CONTROL 0x01U 87 #define VIDEO_VC_REQUEST_ERROR_CODE_CONTROL 0x02U 88 89 /*! @brief Video device class-specific Terminal control selector */ 90 #define VIDEO_TE_CONTROL_UNDEFINED 0x00U 91 92 /*! @brief Video device class-specific Selector Unit control selector */ 93 #define VIDEO_SU_CONTROL_UNDEFINED 0x00U 94 #define VIDEO_SU_INPUT_SELECT_CONTROL 0x01U 95 96 /*! @brief Video device class-specific Camera Terminal control selector */ 97 #define VIDEO_CT_CONTROL_UNDEFINED 0x00U 98 #define VIDEO_CT_SCANNING_MODE_CONTROL 0x01U 99 #define VIDEO_CT_AE_MODE_CONTROL 0x02U 100 #define VIDEO_CT_AE_PRIORITY_CONTROL 0x03U 101 #define VIDEO_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04U 102 #define VIDEO_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05U 103 #define VIDEO_CT_FOCUS_ABSOLUTE_CONTROL 0x06U 104 #define VIDEO_CT_FOCUS_RELATIVE_CONTROL 0x07U 105 #define VIDEO_CT_FOCUS_AUTO_CONTROL 0x08U 106 #define VIDEO_CT_IRIS_ABSOLUTE_CONTROL 0x09U 107 #define VIDEO_CT_IRIS_RELATIVE_CONTROL 0x0AU 108 #define VIDEO_CT_ZOOM_ABSOLUTE_CONTROL 0x0BU 109 #define VIDEO_CT_ZOOM_RELATIVE_CONTROL 0x0CU 110 #define VIDEO_CT_PANTILT_ABSOLUTE_CONTROL 0x0DU 111 #define VIDEO_CT_PANTILT_RELATIVE_CONTROL 0x0EU 112 #define VIDEO_CT_ROLL_ABSOLUTE_CONTROL 0x0FU 113 #define VIDEO_CT_ROLL_RELATIVE_CONTROL 0x10U 114 #define VIDEO_CT_PRIVACY_CONTROL 0x11U 115 #define VIDEO_CT_FOCUS_SIMPLE_CONTROL 0x12U 116 #define VIDEO_CT_WINDOW_CONTROL 0x13U 117 #define VIDEO_CT_REGION_OF_INTEREST_CONTROL 0x14U 118 119 /*! @brief Video device class-specific Processing Unit control selector */ 120 #define VIDEO_PU_CONTROL_UNDEFINED 0x00U 121 #define VIDEO_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01U 122 #define VIDEO_PU_BRIGHTNESS_CONTROL 0x02U 123 #define VIDEO_PU_CONTRAST_CONTROL 0x03U 124 #define VIDEO_PU_GAIN_CONTROL 0x04U 125 #define VIDEO_PU_POWER_LINE_FREQUENCY_CONTROL 0x05U 126 #define VIDEO_PU_HUE_CONTROL 0x06U 127 #define VIDEO_PU_SATURATION_CONTROL 0x07U 128 #define VIDEO_PU_SHARPNESS_CONTROL 0x08U 129 #define VIDEO_PU_GAMMA_CONTROL 0x09U 130 #define VIDEO_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0AU 131 #define VIDEO_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0BU 132 #define VIDEO_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0CU 133 #define VIDEO_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0DU 134 #define VIDEO_PU_DIGITAL_MULTIPLIER_CONTROL 0x0EU 135 #define VIDEO_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0FU 136 #define VIDEO_PU_HUE_AUTO_CONTROL 0x10U 137 #define VIDEO_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11U 138 #define VIDEO_PU_ANALOG_LOCK_STATUS_CONTROL 0x12U 139 #define VIDEO_PU_CONTRAST_AUTO_CONTROL 0x13U 140 141 /*! @brief Video device class-specific Encoding Unit control selector */ 142 #define VIDEO_EU_CONTROL_UNDEFINED 0x00U 143 #define VIDEO_EU_SELECT_LAYER_CONTROL 0x01U 144 #define VIDEO_EU_PROFILE_TOOLSET_CONTROL 0x02U 145 #define VIDEO_EU_VIDEO_RESOLUTION_CONTROL 0x03U 146 #define VIDEO_EU_MIN_FRAME_INTERVAL_CONTROL 0x04U 147 #define VIDEO_EU_SLICE_MODE_CONTROL 0x05U 148 #define VIDEO_EU_RATE_CONTROL_MODE_CONTROL 0x06U 149 #define VIDEO_EU_AVERAGE_BITRATE_CONTROL 0x07U 150 #define VIDEO_EU_CPB_SIZE_CONTROL 0x08U 151 #define VIDEO_EU_PEAK_BIT_RATE_CONTROL 0x09U 152 #define VIDEO_EU_QUANTIZATION_PARAMS_CONTROL 0x0AU 153 #define VIDEO_EU_SYNC_REF_FRAME_CONTROL 0x0BU 154 #define VIDEO_EU_LTR_BUFFER_CONTROL 0x0CU 155 #define VIDEO_EU_LTR_PICTURE_CONTROL 0x0DU 156 #define VIDEO_EU_LTR_VALIDATION_CONTROL 0x0EU 157 #define VIDEO_EU_LEVEL_IDC_LIMIT_CONTROL 0x0FU 158 #define VIDEO_EU_SEI_PAYLOADTYPE_CONTROL 0x10U 159 #define VIDEO_EU_QP_RANGE_CONTROL 0x11U 160 #define VIDEO_EU_PRIORITY_CONTROL 0x12U 161 #define VIDEO_EU_START_OR_STOP_LAYER_CONTROL 0x13U 162 #define VIDEO_EU_ERROR_RESILIENCY_CONTROL 0x14U 163 164 /*! @brief Video device class-specific Extension Unit control selector */ 165 #define VIDEO_XU_CONTROL_UNDEFINED 0x00U 166 167 /*! @brief Video device class-specific VideoStreaming Interface control selector */ 168 #define VIDEO_VS_CONTROL_UNDEFINED 0x00U 169 #define VIDEO_VS_PROBE_CONTROL 0x01U 170 #define VIDEO_VS_COMMIT_CONTROL 0x02U 171 #define VIDEO_VS_STILL_PROBE_CONTROL 0x03U 172 #define VIDEO_VS_STILL_COMMIT_CONTROL 0x04U 173 #define VIDEO_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05U 174 #define VIDEO_VS_STREAM_ERROR_CODE_CONTROL 0x06U 175 #define VIDEO_VS_GENERATE_KEY_FRAME_CONTROL 0x07U 176 #define VIDEO_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08U 177 #define VIDEO_VS_SYNCH_DELAY_CONTROL 0x09U 178 179 /*! @}*/ 180 181 /*! 182 * @name USB Video class terminal types 183 * @{ 184 */ 185 186 /*! @brief Video device USB terminal type */ 187 #define VIDEO_TT_VENDOR_SPECIFIC 0x0100U 188 #define VIDEO_TT_STREAMING 0x0101U 189 190 /*! @brief Video device input terminal type */ 191 #define VIDEO_ITT_VENDOR_SPECIFIC 0x0200U 192 #define VIDEO_ITT_CAMERA 0x0201U 193 #define VIDEO_ITT_MEDIA_TRANSPORT_INPUT 0x0202U 194 195 /*! @brief Video device output terminal type */ 196 #define VIDEO_OTT_VENDOR_SPECIFIC 0x0300U 197 #define VIDEO_OTT_DISPLAY 0x0301U 198 #define VIDEO_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302U 199 200 /*! @brief Video device external terminal type */ 201 #define VIDEO_ET_VENDOR_SPECIFIC 0x0400U 202 #define VIDEO_ET_COMPOSITE_CONNECTOR 0x0401U 203 #define VIDEO_ET_SVIDEO_CONNECTOR 0x0402U 204 #define VIDEO_ET_COMPONENT_CONNECTOR 0x0403U 205 206 /*! @}*/ 207 208 /*! 209 * @name USB Video class setup request types 210 * @{ 211 */ 212 213 /*! @brief Video device class setup request set type */ 214 #define VIDEO_SET_REQUEST_INTERFACE 0x21U 215 #define VIDEO_SET_REQUEST_ENDPOINT 0x22U 216 217 /*! @brief Video device class setup request get type */ 218 #define VIDEO_GET_REQUEST_INTERFACE 0xA1U 219 #define VIDEO_GET_REQUEST_ENDPOINT 0xA2U 220 221 /*! @}*/ 222 223 /*! @brief Video device still image trigger control */ 224 #define VIDEO_STILL_IMAGE_TRIGGER_NORMAL_OPERATION 0x00U 225 #define VIDEO_STILL_IMAGE_TRIGGER_TRANSMIT_STILL_IMAGE 0x01U 226 #define VIDEO_STILL_IMAGE_TRIGGER_TRANSMIT_STILL_IMAGE_VS_DEDICATED_BULK_PIPE 0x02U 227 #define VIDEO_STILL_IMAGE_TRIGGER_ABORT_STILL_IMAGE_TRANSMISSION 0x03U 228 229 /*! 230 * @name USB Video device class-specific request commands 231 * @{ 232 */ 233 234 /*! @brief Video device class-specific request GET CUR COMMAND */ 235 #define VIDEO_GET_CUR_VC_POWER_MODE_CONTROL 0x8101U 236 #define VIDEO_GET_CUR_VC_ERROR_CODE_CONTROL 0x8102U 237 238 #define VIDEO_GET_CUR_PU_BACKLIGHT_COMPENSATION_CONTROL 0x8121U 239 #define VIDEO_GET_CUR_PU_BRIGHTNESS_CONTROL 0x8122U 240 #define VIDEO_GET_CUR_PU_CONTRACT_CONTROL 0x8123U 241 #define VIDEO_GET_CUR_PU_GAIN_CONTROL 0x8124U 242 #define VIDEO_GET_CUR_PU_POWER_LINE_FREQUENCY_CONTROL 0x8125U 243 #define VIDEO_GET_CUR_PU_HUE_CONTROL 0x8126U 244 #define VIDEO_GET_CUR_PU_SATURATION_CONTROL 0x8127U 245 #define VIDEO_GET_CUR_PU_SHARRNESS_CONTROL 0x8128U 246 #define VIDEO_GET_CUR_PU_GAMMA_CONTROL 0x8129U 247 #define VIDEO_GET_CUR_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x812AU 248 #define VIDEO_GET_CUR_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x812BU 249 #define VIDEO_GET_CUR_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x812CU 250 #define VIDEO_GET_CUR_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x812DU 251 #define VIDEO_GET_CUR_PU_DIGITAL_MULTIPLIER_CONTROL 0x812EU 252 #define VIDEO_GET_CUR_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x812FU 253 #define VIDEO_GET_CUR_PU_HUE_AUTO_CONTROL 0x8130U 254 #define VIDEO_GET_CUR_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x8131U 255 #define VIDEO_GET_CUR_PU_ANALOG_LOCK_STATUS_CONTROL 0x8132U 256 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 257 #define VIDEO_GET_CUR_PU_CONTRAST_AUTO_CONTROL 0x8133U 258 #endif 259 260 #define VIDEO_GET_CUR_CT_SCANNING_MODE_CONTROL 0x8141U 261 #define VIDEO_GET_CUR_CT_AE_MODE_CONTROL 0x8142U 262 #define VIDEO_GET_CUR_CT_AE_PRIORITY_CONTROL 0x8143U 263 #define VIDEO_GET_CUR_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x8144U 264 #define VIDEO_GET_CUR_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x8145U 265 #define VIDEO_GET_CUR_CT_FOCUS_ABSOLUTE_CONTROL 0x8146U 266 #define VIDEO_GET_CUR_CT_FOCUS_RELATIVE_CONTROL 0x8147U 267 #define VIDEO_GET_CUR_CT_FOCUS_AUTO_CONTROL 0x8148U 268 #define VIDEO_GET_CUR_CT_IRIS_ABSOLUTE_CONTROL 0x8149U 269 #define VIDEO_GET_CUR_CT_IRIS_RELATIVE_CONTROL 0x814AU 270 #define VIDEO_GET_CUR_CT_ZOOM_ABSOLUTE_CONTROL 0x814BU 271 #define VIDEO_GET_CUR_CT_ZOOM_RELATIVE_CONTROL 0x814CU 272 #define VIDEO_GET_CUR_CT_PANTILT_ABSOLUTE_CONTROL 0x814DU 273 #define VIDEO_GET_CUR_CT_PANTILT_RELATIVE_CONTROL 0x814EU 274 #define VIDEO_GET_CUR_CT_ROLL_ABSOLUTE_CONTROL 0x814FU 275 #define VIDEO_GET_CUR_CT_ROLL_RELATIVE_CONTROL 0x8150U 276 #define VIDEO_GET_CUR_CT_PRIVACY_CONTROL 0x8151U 277 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 278 #define VIDEO_GET_CUR_CT_FOCUS_SIMPLE_CONTROL 0x8152U 279 #define VIDEO_GET_CUR_CT_DIGITAL_WINDOW_CONTROL 0x8153U 280 #define VIDEO_GET_CUR_CT_REGION_OF_INTEREST_CONTROL 0x8154U 281 #endif 282 283 #define VIDEO_GET_CUR_VS_PROBE_CONTROL 0x8161U 284 #define VIDEO_GET_CUR_VS_COMMIT_CONTROL 0x8162U 285 #define VIDEO_GET_CUR_VS_STILL_PROBE_CONTROL 0x8163U 286 #define VIDEO_GET_CUR_VS_STILL_COMMIT_CONTROL 0x8164U 287 #define VIDEO_GET_CUR_VS_STILL_IMAGE_TRIGGER_CONTROL 0x8165U 288 #define VIDEO_GET_CUR_VS_STREAM_ERROR_CODE_CONTROL 0x8166U 289 #define VIDEO_GET_CUR_VS_GENERATE_KEY_FRAME_CONTROL 0x8167U 290 #define VIDEO_GET_CUR_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x8168U 291 #define VIDEO_GET_CUR_VS_SYNCH_DELAY_CONTROL 0x8169U 292 293 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 294 #define VIDEO_GET_CUR_EU_SELECT_LAYER_CONTROL 0x8181U 295 #define VIDEO_GET_CUR_EU_PROFILE_TOOLSET_CONTROL 0x8182U 296 #define VIDEO_GET_CUR_EU_VIDEO_RESOLUTION_CONTROL 0x8183U 297 #define VIDEO_GET_CUR_EU_MIN_FRAME_INTERVAL_CONTROL 0x8184U 298 #define VIDEO_GET_CUR_EU_SLICE_MODE_CONTROL 0x8185U 299 #define VIDEO_GET_CUR_EU_RATE_CONTROL_MODE_CONTROL 0x8186U 300 #define VIDEO_GET_CUR_EU_AVERAGE_BITRATE_CONTROL 0x8187U 301 #define VIDEO_GET_CUR_EU_CPB_SIZE_CONTROL 0x8188U 302 #define VIDEO_GET_CUR_EU_PEAK_BIT_RATE_CONTROL 0x8189U 303 #define VIDEO_GET_CUR_EU_QUANTIZATION_PARAMS_CONTROL 0x818AU 304 #define VIDEO_GET_CUR_EU_SYNC_REF_FRAME_CONTROL 0x818BU 305 #define VIDEO_GET_CUR_EU_LTR_BUFFER_CONTROL 0x818CU 306 #define VIDEO_GET_CUR_EU_LTR_PICTURE_CONTROL 0x818DU 307 #define VIDEO_GET_CUR_EU_LTR_VALIDATION_CONTROL 0x818EU 308 #define VIDEO_GET_CUR_EU_LEVEL_IDC_LIMIT_CONTROL 0x818FU 309 #define VIDEO_GET_CUR_EU_SEI_PAYLOADTYPE_CONTROL 0x8190U 310 #define VIDEO_GET_CUR_EU_QP_RANGE_CONTROL 0x8191U 311 #define VIDEO_GET_CUR_EU_PRIORITY_CONTROL 0x8192U 312 #define VIDEO_GET_CUR_EU_START_OR_STOP_LAYER_CONTROL 0x8193U 313 #define VIDEO_GET_CUR_EU_ERROR_RESILIENCY_CONTROL 0x8194U 314 #endif 315 316 /*! @brief Video device class-specific request GET MIN COMMAND */ 317 #define VIDEO_GET_MIN_PU_BACKLIGHT_COMPENSATION_CONTROL 0x8221U 318 #define VIDEO_GET_MIN_PU_BRIGHTNESS_CONTROL 0x8222U 319 #define VIDEO_GET_MIN_PU_CONTRACT_CONTROL 0x8223U 320 #define VIDEO_GET_MIN_PU_GAIN_CONTROL 0x8224U 321 #define VIDEO_GET_MIN_PU_HUE_CONTROL 0x8226U 322 #define VIDEO_GET_MIN_PU_SATURATION_CONTROL 0x8227U 323 #define VIDEO_GET_MIN_PU_SHARRNESS_CONTROL 0x8228U 324 #define VIDEO_GET_MIN_PU_GAMMA_CONTROL 0x8229U 325 #define VIDEO_GET_MIN_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x822AU 326 #define VIDEO_GET_MIN_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x822CU 327 #define VIDEO_GET_MIN_PU_DIGITAL_MULTIPLIER_CONTROL 0x822EU 328 #define VIDEO_GET_MIN_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x822FU 329 330 #define VIDEO_GET_MIN_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x8244U 331 #define VIDEO_GET_MIN_CT_FOCUS_ABSOLUTE_CONTROL 0x8246U 332 #define VIDEO_GET_MIN_CT_FOCUS_RELATIVE_CONTROL 0x8247U 333 #define VIDEO_GET_MIN_CT_IRIS_ABSOLUTE_CONTROL 0x8249U 334 #define VIDEO_GET_MIN_CT_ZOOM_ABSOLUTE_CONTROL 0x824BU 335 #define VIDEO_GET_MIN_CT_ZOOM_RELATIVE_CONTROL 0x824CU 336 #define VIDEO_GET_MIN_CT_PANTILT_ABSOLUTE_CONTROL 0x824DU 337 #define VIDEO_GET_MIN_CT_PANTILT_RELATIVE_CONTROL 0x824EU 338 #define VIDEO_GET_MIN_CT_ROLL_ABSOLUTE_CONTROL 0x824FU 339 #define VIDEO_GET_MIN_CT_ROLL_RELATIVE_CONTROL 0x8250U 340 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 341 #define VIDEO_GET_MIN_CT_DIGITAL_WINDOW_CONTROL 0x8251U 342 #define VIDEO_GET_MIN_CT_REGION_OF_INTEREST_CONTROL 0x8252U 343 #endif 344 345 #define VIDEO_GET_MIN_VS_PROBE_CONTROL 0x8261U 346 #define VIDEO_GET_MIN_VS_STILL_PROBE_CONTROL 0x8263U 347 #define VIDEO_GET_MIN_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x8268U 348 #define VIDEO_GET_MIN_VS_SYNCH_DELAY_CONTROL 0x8269U 349 350 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 351 #define VIDEO_GET_MIN_EU_VIDEO_RESOLUTION_CONTROL 0x8283U 352 #define VIDEO_GET_MIN_EU_MIN_FRAME_INTERVAL_CONTROL 0x8284U 353 #define VIDEO_GET_MIN_EU_SLICE_MODE_CONTROL 0x8285U 354 #define VIDEO_GET_MIN_EU_AVERAGE_BITRATE_CONTROL 0x8287U 355 #define VIDEO_GET_MIN_EU_CPB_SIZE_CONTROL 0x8288U 356 #define VIDEO_GET_MIN_EU_PEAK_BIT_RATE_CONTROL 0x8289U 357 #define VIDEO_GET_MIN_EU_QUANTIZATION_PARAMS_CONTROL 0x828AU 358 #define VIDEO_GET_MIN_EU_SYNC_REF_FRAME_CONTROL 0x828BU 359 #define VIDEO_GET_MIN_EU_LEVEL_IDC_LIMIT_CONTROL 0x828FU 360 #define VIDEO_GET_MIN_EU_SEI_PAYLOADTYPE_CONTROL 0x8290U 361 #define VIDEO_GET_MIN_EU_QP_RANGE_CONTROL 0x8291U 362 #endif 363 364 /*! @brief Video device class-specific request GET MAX COMMAND */ 365 #define VIDEO_GET_MAX_PU_BACKLIGHT_COMPENSATION_CONTROL 0x8321U 366 #define VIDEO_GET_MAX_PU_BRIGHTNESS_CONTROL 0x8322U 367 #define VIDEO_GET_MAX_PU_CONTRACT_CONTROL 0x8323U 368 #define VIDEO_GET_MAX_PU_GAIN_CONTROL 0x8324U 369 #define VIDEO_GET_MAX_PU_HUE_CONTROL 0x8326U 370 #define VIDEO_GET_MAX_PU_SATURATION_CONTROL 0x8327U 371 #define VIDEO_GET_MAX_PU_SHARRNESS_CONTROL 0x8328U 372 #define VIDEO_GET_MAX_PU_GAMMA_CONTROL 0x8329U 373 #define VIDEO_GET_MAX_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x832AU 374 #define VIDEO_GET_MAX_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x832CU 375 #define VIDEO_GET_MAX_PU_DIGITAL_MULTIPLIER_CONTROL 0x832EU 376 #define VIDEO_GET_MAX_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x832FU 377 378 #define VIDEO_GET_MAX_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x8344U 379 #define VIDEO_GET_MAX_CT_FOCUS_ABSOLUTE_CONTROL 0x8346U 380 #define VIDEO_GET_MAX_CT_FOCUS_RELATIVE_CONTROL 0x8347U 381 #define VIDEO_GET_MAX_CT_IRIS_ABSOLUTE_CONTROL 0x8349U 382 #define VIDEO_GET_MAX_CT_ZOOM_ABSOLUTE_CONTROL 0x834BU 383 #define VIDEO_GET_MAX_CT_ZOOM_RELATIVE_CONTROL 0x834CU 384 #define VIDEO_GET_MAX_CT_PANTILT_ABSOLUTE_CONTROL 0x834DU 385 #define VIDEO_GET_MAX_CT_PANTILT_RELATIVE_CONTROL 0x834EU 386 #define VIDEO_GET_MAX_CT_ROLL_ABSOLUTE_CONTROL 0x834FU 387 #define VIDEO_GET_MAX_CT_ROLL_RELATIVE_CONTROL 0x8350U 388 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 389 #define VIDEO_GET_MAX_CT_DIGITAL_WINDOW_CONTROL 0x8351U 390 #define VIDEO_GET_MAX_CT_REGION_OF_INTEREST_CONTROL 0x8352U 391 #endif 392 393 #define VIDEO_GET_MAX_VS_PROBE_CONTROL 0x8361U 394 #define VIDEO_GET_MAX_VS_STILL_PROBE_CONTROL 0x8363U 395 #define VIDEO_GET_MAX_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x8368U 396 #define VIDEO_GET_MAX_VS_SYNCH_DELAY_CONTROL 0x8369U 397 398 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 399 #define VIDEO_GET_MAX_EU_VIDEO_RESOLUTION_CONTROL 0x8383U 400 #define VIDEO_GET_MAX_EU_MIN_FRAME_INTERVAL_CONTROL 0x8384U 401 #define VIDEO_GET_MAX_EU_SLICE_MODE_CONTROL 0x8385U 402 #define VIDEO_GET_MAX_EU_AVERAGE_BITRATE_CONTROL 0x8387U 403 #define VIDEO_GET_MAX_EU_CPB_SIZE_CONTROL 0x8388U 404 #define VIDEO_GET_MAX_EU_PEAK_BIT_RATE_CONTROL 0x8389U 405 #define VIDEO_GET_MAX_EU_QUANTIZATION_PARAMS_CONTROL 0x838AU 406 #define VIDEO_GET_MAX_EU_SYNC_REF_FRAME_CONTROL 0x838BU 407 #define VIDEO_GET_MAX_EU_LTR_BUFFER_CONTROL 0x838CU 408 #define VIDEO_GET_MAX_EU_LEVEL_IDC_LIMIT_CONTROL 0x838FU 409 #define VIDEO_GET_MAX_EU_SEI_PAYLOADTYPE_CONTROL 0x8390U 410 #define VIDEO_GET_MAX_EU_QP_RANGE_CONTROL 0x8391U 411 #endif 412 413 /*! @brief Video device class-specific request GET RES COMMAND */ 414 #define VIDEO_GET_RES_PU_BACKLIGHT_COMPENSATION_CONTROL 0x8421U 415 #define VIDEO_GET_RES_PU_BRIGHTNESS_CONTROL 0x8422U 416 #define VIDEO_GET_RES_PU_CONTRACT_CONTROL 0x8423U 417 #define VIDEO_GET_RES_PU_GAIN_CONTROL 0x8424U 418 #define VIDEO_GET_RES_PU_HUE_CONTROL 0x8426U 419 #define VIDEO_GET_RES_PU_SATURATION_CONTROL 0x8427U 420 #define VIDEO_GET_RES_PU_SHARRNESS_CONTROL 0x8428U 421 #define VIDEO_GET_RES_PU_GAMMA_CONTROL 0x8429U 422 #define VIDEO_GET_RES_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x842AU 423 #define VIDEO_GET_RES_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x842CU 424 #define VIDEO_GET_RES_PU_DIGITAL_MULTIPLIER_CONTROL 0x842EU 425 #define VIDEO_GET_RES_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x842FU 426 427 #define VIDEO_GET_RES_CT_AE_MODE_CONTROL 0x8442U 428 #define VIDEO_GET_RES_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x8444U 429 #define VIDEO_GET_RES_CT_FOCUS_ABSOLUTE_CONTROL 0x8446U 430 #define VIDEO_GET_RES_CT_FOCUS_RELATIVE_CONTROL 0x8447U 431 #define VIDEO_GET_RES_CT_IRIS_ABSOLUTE_CONTROL 0x8449U 432 #define VIDEO_GET_RES_CT_ZOOM_ABSOLUTE_CONTROL 0x844BU 433 #define VIDEO_GET_RES_CT_ZOOM_RELATIVE_CONTROL 0x844CU 434 #define VIDEO_GET_RES_CT_PANTILT_ABSOLUTE_CONTROL 0x844DU 435 #define VIDEO_GET_RES_CT_PANTILT_RELATIVE_CONTROL 0x844EU 436 #define VIDEO_GET_RES_CT_ROLL_ABSOLUTE_CONTROL 0x844FU 437 #define VIDEO_GET_RES_CT_ROLL_RELATIVE_CONTROL 0x8450U 438 439 #define VIDEO_GET_RES_VS_PROBE_CONTROL 0x8461U 440 #define VIDEO_GET_RES_VS_STILL_PROBE_CONTROL 0x8463U 441 #define VIDEO_GET_RES_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x8468U 442 #define VIDEO_GET_RES_VS_SYNCH_DELAY_CONTROL 0x8469U 443 444 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 445 #define VIDEO_GET_RES_EU_AVERAGE_BITRATE_CONTROL 0x8487U 446 #define VIDEO_GET_RES_EU_CPB_SIZE_CONTROL 0x8488U 447 #define VIDEO_GET_RES_EU_PEAK_BIT_RATE_CONTROL 0x8489U 448 #define VIDEO_GET_RES_EU_QUANTIZATION_PARAMS_CONTROL 0x848AU 449 #define VIDEO_GET_RES_EU_ERROR_RESILIENCY_CONTROL 0x8494U 450 #endif 451 452 /*! @brief Video device class-specific request GET LEN COMMAND */ 453 454 #define VIDEO_GET_LEN_VS_PROBE_CONTROL 0x8561U 455 #define VIDEO_GET_LEN_VS_COMMIT_CONTROL 0x8562U 456 #define VIDEO_GET_LEN_VS_STILL_PROBE_CONTROL 0x8563U 457 #define VIDEO_GET_LEN_VS_STILL_COMMIT_CONTROL 0x8564U 458 459 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 460 #define VIDEO_GET_LEN_EU_SELECT_LAYER_CONTROL 0x8581U 461 #define VIDEO_GET_LEN_EU_PROFILE_TOOLSET_CONTROL 0x8582U 462 #define VIDEO_GET_LEN_EU_VIDEO_RESOLUTION_CONTROL 0x8583U 463 #define VIDEO_GET_LEN_EU_MIN_FRAME_INTERVAL_CONTROL 0x8584U 464 #define VIDEO_GET_LEN_EU_SLICE_MODE_CONTROL 0x8585U 465 #define VIDEO_GET_LEN_EU_RATE_CONTROL_MODE_CONTROL 0x8586U 466 #define VIDEO_GET_LEN_EU_AVERAGE_BITRATE_CONTROL 0x8587U 467 #define VIDEO_GET_LEN_EU_CPB_SIZE_CONTROL 0x8588U 468 #define VIDEO_GET_LEN_EU_PEAK_BIT_RATE_CONTROL 0x8589U 469 #define VIDEO_GET_LEN_EU_QUANTIZATION_PARAMS_CONTROL 0x858AU 470 #define VIDEO_GET_LEN_EU_SYNC_REF_FRAME_CONTROL 0x858BU 471 #define VIDEO_GET_LEN_EU_LTR_BUFFER_CONTROL 0x858CU 472 #define VIDEO_GET_LEN_EU_LTR_PICTURE_CONTROL 0x858DU 473 #define VIDEO_GET_LEN_EU_LTR_VALIDATION_CONTROL 0x858EU 474 #define VIDEO_GET_LEN_EU_QP_RANGE_CONTROL 0x8591U 475 #define VIDEO_GET_LEN_EU_PRIORITY_CONTROL 0x8592U 476 #define VIDEO_GET_LEN_EU_START_OR_STOP_LAYER_CONTROL 0x8593U 477 #endif 478 479 /*! @brief Video device class-specific request GET INFO COMMAND */ 480 #define VIDEO_GET_INFO_VC_POWER_MODE_CONTROL 0x8601U 481 #define VIDEO_GET_INFO_VC_ERROR_CODE_CONTROL 0x8602U 482 483 #define VIDEO_GET_INFO_PU_BACKLIGHT_COMPENSATION_CONTROL 0x8621U 484 #define VIDEO_GET_INFO_PU_BRIGHTNESS_CONTROL 0x8622U 485 #define VIDEO_GET_INFO_PU_CONTRACT_CONTROL 0x8623U 486 #define VIDEO_GET_INFO_PU_GAIN_CONTROL 0x8624U 487 #define VIDEO_GET_INFO_PU_POWER_LINE_FREQUENCY_CONTROL 0x8625U 488 #define VIDEO_GET_INFO_PU_HUE_CONTROL 0x8626U 489 #define VIDEO_GET_INFO_PU_SATURATION_CONTROL 0x8627U 490 #define VIDEO_GET_INFO_PU_SHARRNESS_CONTROL 0x8628U 491 #define VIDEO_GET_INFO_PU_GAMMA_CONTROL 0x8629U 492 #define VIDEO_GET_INFO_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x862AU 493 #define VIDEO_GET_INFO_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x862BU 494 #define VIDEO_GET_INFO_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x862CU 495 #define VIDEO_GET_INFO_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x862DU 496 #define VIDEO_GET_INFO_PU_DIGITAL_MULTIPLIER_CONTROL 0x862EU 497 #define VIDEO_GET_INFO_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x862FU 498 #define VIDEO_GET_INFO_PU_HUE_AUTO_CONTROL 0x8630U 499 #define VIDEO_GET_INFO_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x8631U 500 #define VIDEO_GET_INFO_PU_ANALOG_LOCK_STATUS_CONTROL 0x8632U 501 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 502 #define VIDEO_GET_INFO_PU_CONTRAST_AUTO_CONTROL 0x8633U 503 #endif 504 505 #define VIDEO_GET_INFO_CT_SCANNING_MODE_CONTROL 0x8641U 506 #define VIDEO_GET_INFO_CT_AE_MODE_CONTROL 0x8642U 507 #define VIDEO_GET_INFO_CT_AE_PRIORITY_CONTROL 0x8643U 508 #define VIDEO_GET_INFO_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x8644U 509 #define VIDEO_GET_INFO_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x8645U 510 #define VIDEO_GET_INFO_CT_FOCUS_ABSOLUTE_CONTROL 0x8646U 511 #define VIDEO_GET_INFO_CT_FOCUS_RELATIVE_CONTROL 0x8647U 512 #define VIDEO_GET_INFO_CT_FOCUS_AUTO_CONTROL 0x8648U 513 #define VIDEO_GET_INFO_CT_IRIS_ABSOLUTE_CONTROL 0x8649U 514 #define VIDEO_GET_INFO_CT_IRIS_RELATIVE_CONTROL 0x864AU 515 #define VIDEO_GET_INFO_CT_ZOOM_ABSOLUTE_CONTROL 0x864BU 516 #define VIDEO_GET_INFO_CT_ZOOM_RELATIVE_CONTROL 0x864CU 517 #define VIDEO_GET_INFO_CT_PANTILT_ABSOLUTE_CONTROL 0x864DU 518 #define VIDEO_GET_INFO_CT_PANTILT_RELATIVE_CONTROL 0x864EU 519 #define VIDEO_GET_INFO_CT_ROLL_ABSOLUTE_CONTROL 0x864FU 520 #define VIDEO_GET_INFO_CT_ROLL_RELATIVE_CONTROL 0x8650U 521 #define VIDEO_GET_INFO_CT_PRIVACY_CONTROL 0x8651U 522 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 523 #define VIDEO_GET_INFO_CT_FOCUS_SIMPLE_CONTROL 0x8652U 524 #endif 525 526 #define VIDEO_GET_INFO_VS_PROBE_CONTROL 0x8661U 527 #define VIDEO_GET_INFO_VS_COMMIT_CONTROL 0x8662U 528 #define VIDEO_GET_INFO_VS_STILL_PROBE_CONTROL 0x8663U 529 #define VIDEO_GET_INFO_VS_STILL_COMMIT_CONTROL 0x8664U 530 #define VIDEO_GET_INFO_VS_STILL_IMAGE_TRIGGER_CONTROL 0x8665U 531 #define VIDEO_GET_INFO_VS_STREAM_ERROR_CODE_CONTROL 0x8666U 532 #define VIDEO_GET_INFO_VS_GENERATE_KEY_FRAME_CONTROL 0x8667U 533 #define VIDEO_GET_INFO_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x8668U 534 #define VIDEO_GET_INFO_VS_SYNCH_DELAY_CONTROL 0x8669U 535 536 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 537 #define VIDEO_GET_INFO_EU_SELECT_LAYER_CONTROL 0x8681U 538 #define VIDEO_GET_INFO_EU_PROFILE_TOOLSET_CONTROL 0x8682U 539 #define VIDEO_GET_INFO_EU_VIDEO_RESOLUTION_CONTROL 0x8683U 540 #define VIDEO_GET_INFO_EU_MIN_FRAME_INTERVAL_CONTROL 0x8684U 541 #define VIDEO_GET_INFO_EU_SLICE_MODE_CONTROL 0x8685U 542 #define VIDEO_GET_INFO_EU_RATE_CONTROL_MODE_CONTROL 0x8686U 543 #define VIDEO_GET_INFO_EU_AVERAGE_BITRATE_CONTROL 0x8687U 544 #define VIDEO_GET_INFO_EU_CPB_SIZE_CONTROL 0x8688U 545 #define VIDEO_GET_INFO_EU_PEAK_BIT_RATE_CONTROL 0x8689U 546 #define VIDEO_GET_INFO_EU_QUANTIZATION_PARAMS_CONTROL 0x868AU 547 #define VIDEO_GET_INFO_EU_SYNC_REF_FRAME_CONTROL 0x868BU 548 #define VIDEO_GET_INFO_EU_LTR_BUFFER_CONTROL 0x868CU 549 #define VIDEO_GET_INFO_EU_LTR_PICTURE_CONTROL 0x868DU 550 #define VIDEO_GET_INFO_EU_LTR_VALIDATION_CONTROL 0x868EU 551 #define VIDEO_GET_INFO_EU_SEI_PAYLOADTYPE_CONTROL 0x8690U 552 #define VIDEO_GET_INFO_EU_QP_RANGE_CONTROL 0x8691U 553 #define VIDEO_GET_INFO_EU_PRIORITY_CONTROL 0x8692U 554 #define VIDEO_GET_INFO_EU_START_OR_STOP_LAYER_CONTROL 0x8693U 555 #endif 556 557 /*! @brief Video device class-specific request GET DEF COMMAND */ 558 #define VIDEO_GET_DEF_PU_BACKLIGHT_COMPENSATION_CONTROL 0x8721U 559 #define VIDEO_GET_DEF_PU_BRIGHTNESS_CONTROL 0x8722U 560 #define VIDEO_GET_DEF_PU_CONTRACT_CONTROL 0x8723U 561 #define VIDEO_GET_DEF_PU_GAIN_CONTROL 0x8724U 562 #define VIDEO_GET_DEF_PU_POWER_LINE_FREQUENCY_CONTROL 0x8725U 563 #define VIDEO_GET_DEF_PU_HUE_CONTROL 0x8726U 564 #define VIDEO_GET_DEF_PU_SATURATION_CONTROL 0x8727U 565 #define VIDEO_GET_DEF_PU_SHARRNESS_CONTROL 0x8728U 566 #define VIDEO_GET_DEF_PU_GAMMA_CONTROL 0x8729U 567 #define VIDEO_GET_DEF_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x872AU 568 #define VIDEO_GET_DEF_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x872BU 569 #define VIDEO_GET_DEF_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x872CU 570 #define VIDEO_GET_DEF_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x872DU 571 #define VIDEO_GET_DEF_PU_DIGITAL_MULTIPLIER_CONTROL 0x872EU 572 #define VIDEO_GET_DEF_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x872FU 573 #define VIDEO_GET_DEF_PU_HUE_AUTO_CONTROL 0x8730U 574 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 575 #define VIDEO_GET_DEF_PU_CONTRAST_AUTO_CONTROL 0x8731U 576 #endif 577 578 #define VIDEO_GET_DEF_CT_AE_MODE_CONTROL 0x8742U 579 #define VIDEO_GET_DEF_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x8744U 580 #define VIDEO_GET_DEF_CT_FOCUS_ABSOLUTE_CONTROL 0x8746U 581 #define VIDEO_GET_DEF_CT_FOCUS_RELATIVE_CONTROL 0x8747U 582 #define VIDEO_GET_DEF_CT_FOCUS_AUTO_CONTROL 0x8748U 583 #define VIDEO_GET_DEF_CT_IRIS_ABSOLUTE_CONTROL 0x8749U 584 #define VIDEO_GET_DEF_CT_ZOOM_ABSOLUTE_CONTROL 0x874BU 585 #define VIDEO_GET_DEF_CT_ZOOM_RELATIVE_CONTROL 0x874CU 586 #define VIDEO_GET_DEF_CT_PANTILT_ABSOLUTE_CONTROL 0x874DU 587 #define VIDEO_GET_DEF_CT_PANTILT_RELATIVE_CONTROL 0x874EU 588 #define VIDEO_GET_DEF_CT_ROLL_ABSOLUTE_CONTROL 0x874FU 589 #define VIDEO_GET_DEF_CT_ROLL_RELATIVE_CONTROL 0x8750U 590 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 591 #define VIDEO_GET_DEF_CT_FOCUS_SIMPLE_CONTROL 0x8751U 592 #define VIDEO_GET_DEF_CT_DIGITAL_WINDOW_CONTROL 0x8752U 593 #define VIDEO_GET_DEF_CT_REGION_OF_INTEREST_CONTROL 0x8753U 594 #endif 595 596 #define VIDEO_GET_DEF_VS_PROBE_CONTROL 0x8761U 597 #define VIDEO_GET_DEF_VS_STILL_PROBE_CONTROL 0x8763U 598 #define VIDEO_GET_DEF_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x8768U 599 #define VIDEO_GET_DEF_VS_SYNCH_DELAY_CONTROL 0x8769U 600 601 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 602 #define VIDEO_GET_DEF_EU_PROFILE_TOOLSET_CONTROL 0x8782U 603 #define VIDEO_GET_DEF_EU_VIDEO_RESOLUTION_CONTROL 0x8783U 604 #define VIDEO_GET_DEF_EU_MIN_FRAME_INTERVAL_CONTROL 0x8784U 605 #define VIDEO_GET_DEF_EU_SLICE_MODE_CONTROL 0x8785U 606 #define VIDEO_GET_DEF_EU_RATE_CONTROL_MODE_CONTROL 0x8786U 607 #define VIDEO_GET_DEF_EU_AVERAGE_BITRATE_CONTROL 0x8787U 608 #define VIDEO_GET_DEF_EU_CPB_SIZE_CONTROL 0x8788U 609 #define VIDEO_GET_DEF_EU_PEAK_BIT_RATE_CONTROL 0x8789U 610 #define VIDEO_GET_DEF_EU_QUANTIZATION_PARAMS_CONTROL 0x878AU 611 #define VIDEO_GET_DEF_EU_LTR_BUFFER_CONTROL 0x878CU 612 #define VIDEO_GET_DEF_EU_LTR_PICTURE_CONTROL 0x878DU 613 #define VIDEO_GET_DEF_EU_LTR_VALIDATION_CONTROL 0x878EU 614 #define VIDEO_GET_DEF_EU_LEVEL_IDC_LIMIT_CONTROL 0x878FU 615 #define VIDEO_GET_DEF_EU_SEI_PAYLOADTYPE_CONTROL 0x8790U 616 #define VIDEO_GET_DEF_EU_QP_RANGE_CONTROL 0x8791U 617 #define VIDEO_GET_DEF_EU_ERROR_RESILIENCY_CONTROL 0x8794U 618 #endif 619 620 /*! @brief Video device class-specific request SET CUR COMMAND */ 621 #define VIDEO_SET_CUR_VC_POWER_MODE_CONTROL 0x0101U 622 623 #define VIDEO_SET_CUR_PU_BACKLIGHT_COMPENSATION_CONTROL 0x0121U 624 #define VIDEO_SET_CUR_PU_BRIGHTNESS_CONTROL 0x0122U 625 #define VIDEO_SET_CUR_PU_CONTRACT_CONTROL 0x0123U 626 #define VIDEO_SET_CUR_PU_GAIN_CONTROL 0x0124U 627 #define VIDEO_SET_CUR_PU_POWER_LINE_FREQUENCY_CONTROL 0x0125U 628 #define VIDEO_SET_CUR_PU_HUE_CONTROL 0x0126U 629 #define VIDEO_SET_CUR_PU_SATURATION_CONTROL 0x0127U 630 #define VIDEO_SET_CUR_PU_SHARRNESS_CONTROL 0x0128U 631 #define VIDEO_SET_CUR_PU_GAMMA_CONTROL 0x0129U 632 #define VIDEO_SET_CUR_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x012AU 633 #define VIDEO_SET_CUR_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x012BU 634 #define VIDEO_SET_CUR_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x012CU 635 #define VIDEO_SET_CUR_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x012DU 636 #define VIDEO_SET_CUR_PU_DIGITAL_MULTIPLIER_CONTROL 0x012EU 637 #define VIDEO_SET_CUR_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x012FU 638 #define VIDEO_SET_CUR_PU_HUE_AUTO_CONTROL 0x0130U 639 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 640 #define VIDEO_SET_CUR_PU_CONTRAST_AUTO_CONTROL 0x0131U 641 #endif 642 643 #define VIDEO_SET_CUR_CT_SCANNING_MODE_CONTROL 0x0141U 644 #define VIDEO_SET_CUR_CT_AE_MODE_CONTROL 0x0142U 645 #define VIDEO_SET_CUR_CT_AE_PRIORITY_CONTROL 0x0143U 646 #define VIDEO_SET_CUR_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x0144U 647 #define VIDEO_SET_CUR_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x0145U 648 #define VIDEO_SET_CUR_CT_FOCUS_ABSOLUTE_CONTROL 0x0146U 649 #define VIDEO_SET_CUR_CT_FOCUS_RELATIVE_CONTROL 0x0147U 650 #define VIDEO_SET_CUR_CT_FOCUS_AUTO_CONTROL 0x0148U 651 #define VIDEO_SET_CUR_CT_IRIS_ABSOLUTE_CONTROL 0x0149U 652 #define VIDEO_SET_CUR_CT_IRIS_RELATIVE_CONTROL 0x014AU 653 #define VIDEO_SET_CUR_CT_ZOOM_ABSOLUTE_CONTROL 0x014BU 654 #define VIDEO_SET_CUR_CT_ZOOM_RELATIVE_CONTROL 0x014CU 655 #define VIDEO_SET_CUR_CT_PANTILT_ABSOLUTE_CONTROL 0x014DU 656 #define VIDEO_SET_CUR_CT_PANTILT_RELATIVE_CONTROL 0x014EU 657 #define VIDEO_SET_CUR_CT_ROLL_ABSOLUTE_CONTROL 0x014FU 658 #define VIDEO_SET_CUR_CT_ROLL_RELATIVE_CONTROL 0x0150U 659 #define VIDEO_SET_CUR_CT_PRIVACY_CONTROL 0x0151U 660 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 661 #define VIDEO_SET_CUR_CT_FOCUS_SIMPLE_CONTROL 0x0152U 662 #define VIDEO_SET_CUR_CT_DIGITAL_WINDOW_CONTROL 0x0153U 663 #define VIDEO_SET_CUR_CT_REGION_OF_INTEREST_CONTROL 0x0154U 664 #endif 665 666 #define VIDEO_SET_CUR_VS_PROBE_CONTROL 0x0161U 667 #define VIDEO_SET_CUR_VS_COMMIT_CONTROL 0x0162U 668 #define VIDEO_SET_CUR_VS_STILL_PROBE_CONTROL 0x0163U 669 #define VIDEO_SET_CUR_VS_STILL_COMMIT_CONTROL 0x0164U 670 #define VIDEO_SET_CUR_VS_STILL_IMAGE_TRIGGER_CONTROL 0x0165U 671 #define VIDEO_SET_CUR_VS_STREAM_ERROR_CODE_CONTROL 0x0166U 672 #define VIDEO_SET_CUR_VS_GENERATE_KEY_FRAME_CONTROL 0x0167U 673 #define VIDEO_SET_CUR_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x0168U 674 #define VIDEO_SET_CUR_VS_SYNCH_DELAY_CONTROL 0x0169U 675 676 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 677 #define VIDEO_SET_CUR_EU_SELECT_LAYER_CONTROL 0x0181U 678 #define VIDEO_SET_CUR_EU_PROFILE_TOOLSET_CONTROL 0x0182U 679 #define VIDEO_SET_CUR_EU_VIDEO_RESOLUTION_CONTROL 0x0183U 680 #define VIDEO_SET_CUR_EU_MIN_FRAME_INTERVAL_CONTROL 0x0184U 681 #define VIDEO_SET_CUR_EU_SLICE_MODE_CONTROL 0x0185U 682 #define VIDEO_SET_CUR_EU_RATE_CONTROL_MODE_CONTROL 0x0186U 683 #define VIDEO_SET_CUR_EU_AVERAGE_BITRATE_CONTROL 0x0187U 684 #define VIDEO_SET_CUR_EU_CPB_SIZE_CONTROL 0x0188U 685 #define VIDEO_SET_CUR_EU_PEAK_BIT_RATE_CONTROL 0x0189U 686 #define VIDEO_SET_CUR_EU_QUANTIZATION_PARAMS_CONTROL 0x018AU 687 #define VIDEO_SET_CUR_EU_SYNC_REF_FRAME_CONTROL 0x018BU 688 #define VIDEO_SET_CUR_EU_LTR_BUFFER_CONTROL 0x018CU 689 #define VIDEO_SET_CUR_EU_LTR_PICTURE_CONTROL 0x018DU 690 #define VIDEO_SET_CUR_EU_LTR_VALIDATION_CONTROL 0x018EU 691 #define VIDEO_SET_CUR_EU_LEVEL_IDC_LIMIT_CONTROL 0x018FU 692 #define VIDEO_SET_CUR_EU_SEI_PAYLOADTYPE_CONTROL 0x0190U 693 #define VIDEO_SET_CUR_EU_QP_RANGE_CONTROL 0x0191U 694 #define VIDEO_SET_CUR_EU_PRIORITY_CONTROL 0x0192U 695 #define VIDEO_SET_CUR_EU_START_OR_STOP_LAYER_CONTROL 0x0193U 696 #define VIDEO_SET_CUR_EU_ERROR_RESILIENCY_CONTROL 0x0194U 697 #endif 698 699 /*! @brief The payload header structure. */ 700 struct video_payload_header { 701 uint8_t bHeaderLength; /*!< The payload header length. */ 702 union { 703 uint8_t bmheaderInfo; /*!< The payload header bitmap field. */ 704 struct 705 { 706 uint8_t frameIdentifier : 1U; /*!< Frame Identifier. This bit toggles at each frame start boundary and stays 707 constant for the rest of the frame.*/ 708 uint8_t endOfFrame : 1U; /*!< End of Frame. This bit indicates the end of a video frame and is set in the 709 last video sample that belongs to a frame.*/ 710 uint8_t 711 presentationTimeStamp : 1U; /*!< Presentation Time Stamp. This bit, when set, indicates the presence of 712 a PTS field.*/ 713 uint8_t sourceClockReference : 1U; /*!< Source Clock Reference. This bit, when set, indicates the presence 714 of a SCR field.*/ 715 uint8_t reserved : 1U; /*!< Reserved. Set to 0. */ 716 uint8_t stillImage : 1U; /*!< Still Image. This bit, when set, identifies a video sample that belongs to a 717 still image.*/ 718 uint8_t errorBit : 1U; /*!< Error Bit. This bit, when set, indicates an error in the device streaming.*/ 719 uint8_t endOfHeader : 1U; /*!< End of Header. This bit, when set, indicates the end of the BFH fields.*/ 720 } headerInfoBits; 721 struct 722 { 723 uint8_t FID : 1U; /*!< Frame Identifier. This bit toggles at each frame start boundary and stays constant 724 for the rest of the frame.*/ 725 uint8_t EOI : 1U; /*!< End of Frame. This bit indicates the end of a video frame and is set in the last 726 video sample that belongs to a frame.*/ 727 uint8_t PTS : 1U; /*!< Presentation Time Stamp. This bit, when set, indicates the presence of a PTS field.*/ 728 uint8_t SCR : 1U; /*!< Source Clock Reference. This bit, when set, indicates the presence of a SCR field.*/ 729 uint8_t RES : 1U; /*!< Reserved. Set to 0. */ 730 uint8_t STI : 1U; /*!< Still Image. This bit, when set, identifies a video sample that belongs to a still 731 image.*/ 732 uint8_t ERR : 1U; /*!< Error Bit. This bit, when set, indicates an error in the device streaming.*/ 733 uint8_t EOH : 1U; /*!< End of Header. This bit, when set, indicates the end of the BFH fields.*/ 734 } headerInfoBitmap; 735 } headerInfoUnion; 736 uint32_t dwPresentationTime; /*!< Presentation time stamp (PTS) field.*/ 737 uint8_t bSourceClockReference[6]; /*!< Source clock reference (SCR) field.*/ 738 } __PACKED; 739 740 /*! @brief The Video probe and commit controls structure.*/ 741 struct video_probe_and_commit_controls { 742 union { 743 uint8_t bmHint; /*!< Bit-field control indicating to the function what fields shall be kept fixed. */ 744 struct 745 { 746 uint8_t dwFrameInterval : 1U; /*!< dwFrameInterval field.*/ 747 uint8_t wKeyFrameRate : 1U; /*!< wKeyFrameRate field.*/ 748 uint8_t wPFrameRate : 1U; /*!< wPFrameRate field.*/ 749 uint8_t wCompQuality : 1U; /*!< wCompQuality field.*/ 750 uint8_t wCompWindowSize : 1U; /*!< wCompWindowSize field.*/ 751 uint8_t reserved : 3U; /*!< Reserved field.*/ 752 } hintBitmap; 753 } hintUnion; 754 union { 755 uint8_t bmHint; /*!< Bit-field control indicating to the function what fields shall be kept fixed. */ 756 struct 757 { 758 uint8_t reserved : 8U; /*!< Reserved field.*/ 759 } hintBitmap; 760 } hintUnion1; 761 uint8_t bFormatIndex; /*!< Video format index from a format descriptor.*/ 762 uint8_t bFrameIndex; /*!< Video frame index from a frame descriptor.*/ 763 uint32_t dwFrameInterval; /*!< Frame interval in 100ns units.*/ 764 uint16_t wKeyFrameRate; /*!< Key frame rate in key-frame per video-frame units.*/ 765 uint16_t wPFrameRate; /*!< PFrame rate in PFrame/key frame units.*/ 766 uint16_t wCompQuality; /*!< Compression quality control in abstract units 0U (lowest) to 10000U (highest).*/ 767 uint16_t wCompWindowSize; /*!< Window size for average bit rate control.*/ 768 uint16_t wDelay; /*!< Internal video streaming interface latency in ms from video data capture to presentation on 769 the USB.*/ 770 uint32_t dwMaxVideoFrameSize; /*!< Maximum video frame or codec-specific segment size in bytes.*/ 771 uint32_t dwMaxPayloadTransferSize; /*!< Specifies the maximum number of bytes that the device can transmit or 772 receive in a single payload transfer.*/ 773 uint32_t dwClockFrequency; /*!< The device clock frequency in Hz for the specified format. This specifies the 774 units used for the time information fields in the Video Payload Headers in the data 775 stream.*/ 776 uint8_t bmFramingInfo; /*!< Bit-field control supporting the following values: D0 Frame ID, D1 EOF.*/ 777 uint8_t bPreferedVersion; /*!< The preferred payload format version supported by the host or device for the 778 specified bFormatIndex value.*/ 779 uint8_t bMinVersion; /*!< The minimum payload format version supported by the device for the specified bFormatIndex 780 value.*/ 781 uint8_t bMaxVersion; /*!< The maximum payload format version supported by the device for the specified bFormatIndex 782 value.*/ 783 #if defined(USB_DEVICE_VIDEO_CLASS_VERSION_1_5) && USB_DEVICE_VIDEO_CLASS_VERSION_1_5 784 uint8_t bUsage; /*!< This bitmap enables features reported by the bmUsages field of the Video Frame Descriptor.*/ 785 uint8_t 786 bBitDepthLuma; /*!< Represents bit_depth_luma_minus8 + 8U, which must be the same as bit_depth_chroma_minus8 + 787 8.*/ 788 uint8_t bmSettings; /*!< A bitmap of flags that is used to discover and control specific features of a temporally 789 encoded video stream.*/ 790 uint8_t bMaxNumberOfRefFramesPlus1; /*!< Host indicates the maximum number of frames stored for use as references.*/ 791 uint16_t bmRateControlModes; /*!< This field contains 4U sub-fields, each of which is a 4U bit number.*/ 792 uint64_t bmLayoutPerStream; /*!< This field contains 4U sub-fields, each of which is a 2U byte number.*/ 793 #endif 794 } __PACKED; 795 796 /*! @brief The Video still probe and still commit controls structure.*/ 797 struct video_still_probe_and_commit_controls { 798 uint8_t bFormatIndex; /*!< Video format index from a format descriptor.*/ 799 uint8_t bFrameIndex; /*!< Video frame index from a frame descriptor.*/ 800 uint8_t bCompressionIndex; /*!< Compression index from a frame descriptor.*/ 801 uint32_t dwMaxVideoFrameSize; /*!< Maximum still image size in bytes.*/ 802 uint32_t dwMaxPayloadTransferSize; /*!< Specifies the maximum number of bytes that the device can transmit or 803 receive in a single payload transfer.*/ 804 } __PACKED; 805 806 struct video_cs_if_vc_header_descriptor { 807 uint8_t bLength; 808 uint8_t bDescriptorType; 809 uint16_t bcdVDC; 810 uint16_t wTotalLength; 811 uint32_t dwClockFrequency; 812 uint8_t bInCollection; 813 uint8_t baInterfaceNr[]; 814 } __PACKED; 815 816 #define VIDEO_SIZEOF_VC_HEADER_DESC(n) (11 + n) 817 818 struct video_cs_if_vc_input_terminal_descriptor { 819 uint8_t bLength; 820 uint8_t bDescriptorType; 821 uint8_t bDescriptorSubType; 822 uint8_t bTerminalID; 823 uint16_t wTerminalType; 824 uint8_t bAssocTerminal; 825 uint8_t iTerminal; 826 uint16_t wObjectiveFocalLenMin; 827 uint16_t wObjectiveFocalLenMax; 828 uint16_t wOcularFocalLength; 829 uint8_t bControlSize; 830 uint8_t bmaControls[]; 831 } __PACKED; 832 833 #define VIDEO_SIZEOF_VC_INPUT_TERMINAL_DESC(n) (15 + n) 834 835 struct video_cs_if_vc_processing_unit_descriptor { 836 uint8_t bLength; 837 uint8_t bDescriptorType; 838 uint8_t bDescriptorSubType; 839 uint8_t bUnitID; 840 uint8_t bSourceID; 841 uint16_t wMaxMultiplier; 842 uint8_t bControlSize; 843 // uint8_t bmaControls[]; 844 uint8_t iProcessing; 845 uint8_t bmVideoStandards; 846 } __PACKED; 847 848 #define VIDEO_SIZEOF_VC_PROCESSING_UNIT_DESC(n) (10 + n) 849 850 struct video_cs_if_vc_output_terminal_descriptor { 851 uint8_t bLength; 852 uint8_t bDescriptorType; 853 uint8_t bDescriptorSubType; 854 uint8_t bTerminalID; 855 uint16_t wTerminalType; 856 uint8_t bAssocTerminal; 857 uint8_t bSourceID; 858 uint8_t iTerminal; 859 } __PACKED; 860 861 #define VIDEO_SIZEOF_VC_OUTPUT_TERMINAL_DESC 9 862 863 struct video_cs_ep_vc_ep_descriptor { 864 uint8_t bLength; 865 uint8_t bDescriptorType; 866 uint8_t bDescriptorSubType; 867 uint16_t wMaxTransferSize; 868 } __PACKED; 869 870 #define VIDEO_SIZEOF_VC_EP_DESC 5 871 872 struct video_cs_if_vs_input_header_descriptor { 873 uint8_t bLength; 874 uint8_t bDescriptorType; 875 uint8_t bDescriptorSubType; 876 uint8_t bNumFormats; 877 uint16_t wTotalLength; 878 uint8_t bEndpointAddress; 879 uint8_t bmInfo; 880 uint8_t bTerminalLink; 881 uint8_t bStillCaptureMethod; 882 uint8_t bTriggerSupport; 883 uint8_t bTriggerUsage; 884 uint8_t bControlSize; 885 uint8_t bmaControls[]; 886 } __PACKED; 887 888 #define VIDEO_SIZEOF_VS_INPUT_HEADER_DESC(p, n) (13 + p * n) 889 890 struct video_cs_if_vs_output_header_descriptor { 891 uint8_t bLength; 892 uint8_t bDescriptorType; 893 uint8_t bDescriptorSubType; 894 uint8_t bNumFormats; 895 uint16_t wTotalLength; 896 uint8_t bEndpointAddress; 897 uint8_t bTerminalLink; 898 uint8_t bControlSize; 899 uint8_t bmaControls[]; 900 } __PACKED; 901 902 #define VIDEO_SIZEOF_VS_OUTPUT_TERMINAL_DESC(p, n) (9 + p * n) 903 904 struct video_cs_if_vs_format_uncompressed_descriptor { 905 uint8_t bLength; 906 uint8_t bDescriptorType; 907 uint8_t bDescriptorSubType; 908 uint8_t bFormatIndex; 909 uint8_t bNumFrameDescriptors; 910 uint8_t guidFormat[16]; 911 uint8_t bBitsPerPixel; 912 uint8_t bDefaultFrameIndex; 913 uint8_t bAspectRatioX; 914 uint8_t bAspectRatioY; 915 uint8_t bmInterlaceFlags; 916 uint8_t bCopyProtect; 917 } __PACKED; 918 919 #define VIDEO_SIZEOF_VS_FORMAT_UNCOMPRESSED_DESC (27) 920 921 struct video_cs_if_vs_frame_uncompressed_descriptor { 922 uint8_t bLength; 923 uint8_t bDescriptorType; 924 uint8_t bDescriptorSubType; 925 uint8_t bFormatIndex; 926 uint8_t bmCapabilities; 927 uint16_t wWidth; 928 uint16_t wHeight; 929 uint32_t dwMinBitRate; 930 uint32_t dwMaxBitRate; 931 uint32_t dwMaxVideoFrameBufferSize; 932 uint32_t dwDefaultFrameInterval; 933 uint8_t bFrameIntervalType; 934 uint32_t dwFrameInterval; 935 } __PACKED; 936 937 #define VIDEO_SIZEOF_VS_FRAME_UNCOMPRESSED_DESC 30 938 939 struct video_cs_if_vs_format_mjpeg_descriptor { 940 uint8_t bLength; 941 uint8_t bDescriptorType; 942 uint8_t bDescriptorSubType; 943 uint8_t bFormatIndex; 944 uint8_t bNumFrameDescriptors; 945 uint8_t bmFlags; 946 uint8_t bDefaultFrameIndex; 947 uint8_t bAspectRatioX; 948 uint8_t bAspectRatioY; 949 uint8_t bmInterlaceFlags; 950 uint8_t bCopyProtect; 951 } __PACKED; 952 953 #define VIDEO_SIZEOF_VS_FORMAT_MJPEG_DESC 11 954 955 struct video_cs_if_vs_frame_mjpeg_descriptor { 956 uint8_t bLength; 957 uint8_t bDescriptorType; 958 uint8_t bDescriptorSubType; 959 uint8_t bFormatIndex; 960 uint8_t bmCapabilities; 961 uint16_t wWidth; 962 uint16_t wHeight; 963 uint32_t dwMinBitRate; 964 uint32_t dwMaxBitRate; 965 uint32_t dwMaxVideoFrameBufferSize; 966 uint32_t dwDefaultFrameInterval; 967 uint8_t bFrameIntervalType; 968 uint32_t dwFrameInterval1; 969 uint32_t dwFrameInterval2; 970 } __PACKED; 971 972 #define VIDEO_SIZEOF_VS_FRAME_MJPEG_DESC(n) (26 + n) 973 974 struct video_cs_if_vs_colorformat_descriptor { 975 uint8_t bLength; 976 uint8_t bDescriptorType; 977 uint8_t bDescriptorSubType; 978 uint8_t bColorPrimaries; 979 uint8_t bXferCharacteristics; 980 uint8_t bMatrixCoefficients; 981 } __PACKED; 982 983 #define VIDEO_SIZEOF_VS_COLORFORMAT_DESC 6 984 985 struct video_vc_input_terminal_bmcontrol_bitmap { 986 uint32_t scanning_mode : 1; 987 uint32_t auto_exposure_mode : 1; 988 uint32_t auto_exposure_priority : 1; 989 uint32_t exposure_time_absolute : 1; 990 uint32_t exposure_time_relative : 1; 991 uint32_t focus_absolute : 1; 992 uint32_t focus_relative : 1; 993 uint32_t iris_absolute : 1; 994 uint32_t iris_relative : 1; 995 uint32_t zoom_absolute : 1; 996 uint32_t zoom_relative : 1; 997 uint32_t pantilt_absolute : 1; 998 uint32_t pantilt_relative : 1; 999 uint32_t roll_absolute : 1; 1000 uint32_t roll_relative : 1; 1001 uint32_t reserved : 2; 1002 uint32_t focus_auto : 1; 1003 uint32_t pricvcy : 1; 1004 }; 1005 1006 struct video_vc_processing_unit_bmcontrol_bitmap { 1007 uint16_t brightness : 1; 1008 uint16_t contrast : 1; 1009 uint16_t hue : 1; 1010 uint16_t saturation : 1; 1011 uint16_t sharpness : 1; 1012 uint16_t gamma : 1; 1013 uint16_t white_bal_temp : 1; 1014 uint16_t white_bal_comp : 1; 1015 uint16_t backlight_comp : 1; 1016 uint16_t gain : 1; 1017 uint16_t power_line_freq : 1; 1018 uint16_t hue_auto : 1; 1019 uint16_t white_bal_temp_auto : 1; 1020 uint16_t white_bal_comp_auto : 1; 1021 uint16_t digital_mult : 1; 1022 uint16_t digital_mult_limit : 1; 1023 }; 1024 1025 struct video_camera_capabilities { 1026 uint8_t support_get_request : 1; 1027 uint8_t support_set_request : 1; 1028 uint8_t disabled_by_automatic_mode : 1; 1029 uint8_t auto_update_control : 1; 1030 uint8_t async_control : 1; 1031 uint8_t reserved : 3; 1032 }; 1033 1034 struct video_autoexposure_mode { 1035 uint8_t manual_mode : 1; 1036 uint8_t auto_mode : 1; 1037 uint8_t shutter_priority_mode : 1; 1038 uint8_t aperture_priority_mode : 1; 1039 uint8_t reserved : 4; 1040 }; 1041 1042 #define VIDEO_GUID_YUY2 0x59, 0x55, 0x59, 0x32, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 1043 #define VIDEO_GUID_NV12 0x4E, 0x56, 0x31, 0x32, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 1044 #define VIDEO_GUID_M420 0x4D, 0x34, 0x32, 0x30, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 1045 #define VIDEO_GUID_I420 0x49, 0x34, 0x32, 0x30, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 1046 1047 // clang-format off 1048 #define VIDEO_VC_DESCRIPTOR_INIT(bFirstInterface, bNumEndpoints, bcdUVC, wTotalLength, dwClockFrequency, stridx) \ 1049 /* Interface Association Descriptor */ \ 1050 0x08, \ 1051 USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION, \ 1052 bFirstInterface, \ 1053 0x02, \ 1054 USB_DEVICE_CLASS_VIDEO, \ 1055 VIDEO_SC_VIDEO_INTERFACE_COLLECTION, \ 1056 0x00, \ 1057 0x00, \ 1058 /* VideoControl Interface Descriptor */ \ 1059 0x09, /* bLength */ \ 1060 USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \ 1061 0x00, /* bInterfaceNumber */ \ 1062 0x00, /* bAlternateSetting */ \ 1063 bNumEndpoints, /* bNumEndpoints:1 endpoint (interrupt endpoint) */ \ 1064 USB_DEVICE_CLASS_VIDEO, /* bInterfaceClass : CC_VIDEO */ \ 1065 VIDEO_SC_VIDEOCONTROL, /* bInterfaceSubClass : SC_VIDEOCONTROL */ \ 1066 VIDEO_PC_PROTOCOL_UNDEFINED, /* bInterfaceProtocol : PC_PROTOCOL_UNDEFINED */ \ 1067 stridx, /* iInterface:Index to string descriptor that contains the string <Your Product Name> */ \ 1068 /*Class-specific VideoControl Interface Descriptor */ \ 1069 0x0d, /* bLength */ \ 1070 0x24, /* bDescriptorType : CS_INTERFACE */ \ 1071 VIDEO_VC_HEADER_DESCRIPTOR_SUBTYPE, /* bDescriptorSubType : VC_HEADER subtype */ \ 1072 WBVAL(bcdUVC), /* bcdUVC : Revision of class specification that this device is based upon.*/ \ 1073 WBVAL(wTotalLength), /* wTotalLength */ \ 1074 DBVAL(dwClockFrequency), /* dwClockFrequency : 0x005b8d80 -> 6,000,000 == 6MHz*/ \ 1075 0x01, /* bInCollection : Number of streaming interfaces. */ \ 1076 (uint8_t)(bFirstInterface + 1), /* baInterfaceNr(0) : VideoStreaming interface 1 belongs to this VideoControl interface.*/ \ 1077 /* Input Terminal 1 -> Processing Unit 2 -> Output Terminal 3 */ \ 1078 0x12, \ 1079 0x24, \ 1080 VIDEO_VC_INPUT_TERMINAL_DESCRIPTOR_SUBTYPE, \ 1081 0x01, /* bTerminalID */ \ 1082 WBVAL(VIDEO_ITT_CAMERA), /* wTerminalType : 0x0201 Camera Sensor*/ \ 1083 0x00, /* bAssocTerminal */ \ 1084 0x00, /* iTerminal */ \ 1085 WBVAL(0x0000), /* wObjectiveFocalLengthMin */ \ 1086 WBVAL(0x0000), /* wObjectiveFocalLengthMax */ \ 1087 WBVAL(0x0000), /* wOcularFocalLength */ \ 1088 0x03, /* bControlSize */ \ 1089 0x00, 0x00, 0x00, /* bmControls */ \ 1090 0x0c, \ 1091 0x24, \ 1092 VIDEO_VC_PROCESSING_UNIT_DESCRIPTOR_SUBTYPE, \ 1093 0x02, /* bUnitID */ \ 1094 0x01, /* bSourceID */ \ 1095 0x00, 0x00, /* wMaxMultiplier */ \ 1096 0x02, /* bControlSize */ \ 1097 0x00, 0x00, /* bmControls */ \ 1098 0x00, /* iProcessing */ \ 1099 0x00, /* bmVideoStandards */ \ 1100 0x09, \ 1101 0x24, \ 1102 VIDEO_VC_OUTPUT_TERMINAL_DESCRIPTOR_SUBTYPE, \ 1103 0x03, /* bTerminalID */ \ 1104 WBVAL(VIDEO_TT_STREAMING), \ 1105 0x00, /* bAssocTerminal */ \ 1106 0x02, /* bSourceID */ \ 1107 0x00 /* iTerminal */ 1108 1109 #define VIDEO_VS_DESCRIPTOR_INIT(bInterfaceNumber, bAlternateSetting, bNumEndpoints) \ 1110 /* Video Streaming (VS) Interface Descriptor */ \ 1111 0x09, /* bLength */ \ 1112 USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType : INTERFACE */ \ 1113 bInterfaceNumber, /* bInterfaceNumber: Index of this interface */ \ 1114 bAlternateSetting, /* bAlternateSetting: Index of this alternate setting */ \ 1115 bNumEndpoints, /* bNumEndpoints : 0 endpoints – no bandwidth used*/ \ 1116 0x0e, /* bInterfaceClass : CC_VIDEO */ \ 1117 0x02, /* bInterfaceSubClass : SC_VIDEOSTREAMING */ \ 1118 0x00, /* bInterfaceProtocol : PC_PROTOCOL_UNDEFINED */ \ 1119 0x00 /* iInterface : unused */ 1120 1121 #define VIDEO_VS_HEADER_DESCRIPTOR_INIT(bNumFormats, wTotalLength, bEndpointAddress, ...) \ 1122 /*Class-specific VideoStream Header Descriptor (Input) */ \ 1123 0x0d + PP_NARG(__VA_ARGS__), \ 1124 0x24, \ 1125 VIDEO_VS_INPUT_HEADER_DESCRIPTOR_SUBTYPE, \ 1126 bNumFormats, /* bNumFormats : One format descriptor follows. */ \ 1127 WBVAL(wTotalLength), \ 1128 bEndpointAddress, \ 1129 0x00, /* bmInfo : No dynamic format change supported. */ \ 1130 0x03, /* bTerminalLink : This VideoStreaming interface supplies terminal ID 2 (Output Terminal). */ \ 1131 0x00, /* bStillCaptureMethod : Device supports still image capture method 0. */ \ 1132 0x00, /* bTriggerSupport : Hardware trigger supported for still image capture */ \ 1133 0x00, /* bTriggerUsage : Hardware trigger should initiate a still image capture. */ \ 1134 PP_NARG(__VA_ARGS__), /* bControlSize : Size of the bmaControls field */ \ 1135 __VA_ARGS__ /* bmaControls : No VideoStreaming specific controls are supported.*/ 1136 1137 #define VIDEO_VS_FORMAT_UNCOMPRESSED_DESCRIPTOR_INIT(bFormatIndex, bNumFrameDescriptors, GUIDFormat) \ 1138 /*Payload Format(UNCOMPRESSED) Descriptor */ \ 1139 0x1b, \ 1140 0x24, \ 1141 VIDEO_VS_FORMAT_UNCOMPRESSED_DESCRIPTOR_SUBTYPE, /* bDescriptorSubType : VS_FORMAT_UNCOMPRESSED subtype */ \ 1142 bFormatIndex, /* bFormatIndex : First (and only) format descriptor */ \ 1143 bNumFrameDescriptors, /* bNumFrameDescriptors : One frame descriptor for this format follows. */ \ 1144 GUIDFormat, /* GUID Format YUY2 {32595559-0000-0010-8000-00AA00389B71} */ \ 1145 0x0c, /* bBitsPerPixel : Number of bits per pixel used to specify color in the decoded video frame - 16 for yuy2*/ \ 1146 0x01, /* bDefaultFrameIndex : Default frame index is 1. */ \ 1147 0x00, /* bAspectRatioX : Non-interlaced stream not required. */ \ 1148 0x00, /* bAspectRatioY : Non-interlaced stream not required. */ \ 1149 0x00, /* bmInterlaceFlags : Non-interlaced stream */ \ 1150 0x00 /* bCopyProtect : No restrictions imposed on the duplication of this video stream. */ 1151 1152 #define VIDEO_VS_FRAME_UNCOMPRESSED_DESCRIPTOR_INIT(bFrameIndex, wWidth, wHeight, dwMinBitRate, dwMaxBitRate, \ 1153 dwMaxVideoFrameBufferSize, dwDefaultFrameInterval, dwFrameInterval) \ 1154 0x1e, \ 1155 0x24, \ 1156 VIDEO_VS_FRAME_UNCOMPRESSED_DESCRIPTOR_SUBTYPE, \ 1157 bFrameIndex, \ 1158 0x00, \ 1159 WBVAL(wWidth), \ 1160 WBVAL(wHeight), \ 1161 DBVAL(dwMinBitRate), \ 1162 DBVAL(dwMaxBitRate), \ 1163 DBVAL(dwMaxVideoFrameBufferSize), \ 1164 DBVAL(dwDefaultFrameInterval), \ 1165 0x01, \ 1166 DBVAL(dwFrameInterval) 1167 1168 #define VIDEO_VS_FORMAT_MJPEG_DESCRIPTOR_INIT(bFormatIndex, bNumFrameDescriptors) \ 1169 /*Payload Format(MJPEG) Descriptor */ \ 1170 0x0b, /* bLength */ \ 1171 0x24, /* bDescriptorType : CS_INTERFACE */ \ 1172 0x06, /* bDescriptorSubType : VS_FORMAT_MJPEG subtype */ \ 1173 bFormatIndex, /* bFormatIndex : First (and only) format descriptor */ \ 1174 bNumFrameDescriptors, /* bNumFrameDescriptors : One frame descriptor for this format follows. */ \ 1175 0x00, /* bmFlags : Uses fixed size samples.. */ \ 1176 0x01, /* bDefaultFrameIndex : Default frame index is 1. */ \ 1177 0x00, /* bAspectRatioX : Non-interlaced stream – not required. */ \ 1178 0x00, /* bAspectRatioY : Non-interlaced stream – not required. */ \ 1179 0x00, /* bmInterlaceFlags : Non-interlaced stream */ \ 1180 0x00 /* bCopyProtect : No restrictions imposed on the duplication of this video stream. */ 1181 1182 #define VIDEO_VS_FRAME_MJPEG_DESCRIPTOR_INIT(bFrameIndex, wWidth, wHeight, dwMinBitRate, dwMaxBitRate, \ 1183 dwMaxVideoFrameBufferSize, dwDefaultFrameInterval, bFrameIntervalType, ...) \ 1184 0x1a + PP_NARG(__VA_ARGS__), /* bLength */ \ 1185 0x24, /* bDescriptorType : CS_INTERFACE */ \ 1186 VIDEO_VS_FRAME_MJPEG_DESCRIPTOR_SUBTYPE, /* bDescriptorSubType : VS_FRAME_MJPEG */ \ 1187 bFrameIndex, /* bFrameIndex : First (and only) frame descriptor */ \ 1188 0x00, /* bmCapabilities : Still images using capture method 0 are supported at this frame setting.D1: Fixed frame-rate. */ \ 1189 WBVAL(wWidth), /* wWidth (2bytes): Width of frame is 128 pixels. */ \ 1190 WBVAL(wHeight), /* wHeight (2bytes): Height of frame is 64 pixels. */ \ 1191 DBVAL(dwMinBitRate), /* dwMinBitRate (4bytes): Min bit rate in bits/s */ \ 1192 DBVAL(dwMaxBitRate), /* dwMaxBitRate (4bytes): Max bit rate in bits/s */ \ 1193 DBVAL(dwMaxVideoFrameBufferSize), /* dwMaxVideoFrameBufSize (4bytes): Maximum video or still frame size, in bytes. */ \ 1194 dwDefaultFrameInterval, /* dwDefaultFrameInterval : 1,000,000 * 100ns -> 10 FPS */ \ 1195 bFrameIntervalType, /* bFrameIntervalType : Indicates how the frame interval can be programmed. 0: Continuous frame interval 1..255: The number of discrete frame */ \ 1196 __VA_ARGS__ 1197 // clang-format on 1198 #endif /*USB_VIDEO_H */