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 uint8_t bDescriptorSubType; 810 uint16_t bcdUVC; 811 uint16_t wTotalLength; 812 uint32_t dwClockFrequency; 813 uint8_t bInCollection; 814 uint8_t baInterfaceNr[]; 815 } __PACKED; 816 817 #define VIDEO_SIZEOF_VC_HEADER_DESC(n) (12 + n) 818 819 struct video_cs_if_vc_input_terminal_descriptor { 820 uint8_t bLength; 821 uint8_t bDescriptorType; 822 uint8_t bDescriptorSubType; 823 uint8_t bTerminalID; 824 uint16_t wTerminalType; 825 uint8_t bAssocTerminal; 826 uint8_t iTerminal; 827 uint16_t wObjectiveFocalLenMin; 828 uint16_t wObjectiveFocalLenMax; 829 uint16_t wOcularFocalLength; 830 uint8_t bControlSize; 831 uint8_t bmaControls[]; 832 } __PACKED; 833 834 #define VIDEO_SIZEOF_VC_INPUT_TERMINAL_DESC(n) (15 + n) 835 836 struct video_cs_if_vc_processing_unit_descriptor { 837 uint8_t bLength; 838 uint8_t bDescriptorType; 839 uint8_t bDescriptorSubType; 840 uint8_t bUnitID; 841 uint8_t bSourceID; 842 uint16_t wMaxMultiplier; 843 uint8_t bControlSize; 844 // uint8_t bmaControls[]; 845 uint8_t iProcessing; 846 uint8_t bmVideoStandards; 847 } __PACKED; 848 849 #define VIDEO_SIZEOF_VC_PROCESSING_UNIT_DESC(n) (10 + n) 850 851 struct video_cs_if_vc_output_terminal_descriptor { 852 uint8_t bLength; 853 uint8_t bDescriptorType; 854 uint8_t bDescriptorSubType; 855 uint8_t bTerminalID; 856 uint16_t wTerminalType; 857 uint8_t bAssocTerminal; 858 uint8_t bSourceID; 859 uint8_t iTerminal; 860 } __PACKED; 861 862 #define VIDEO_SIZEOF_VC_OUTPUT_TERMINAL_DESC 9 863 864 struct video_cs_if_vc_extension_unit_descriptor { 865 uint8_t bLength; 866 uint8_t bDescriptorType; 867 uint8_t bDescriptorSubType; 868 uint8_t bUnitID; 869 uint8_t guidExtensionCode[16]; 870 uint8_t bNumControls; 871 uint8_t bNrInPins; 872 // uint8_t baSourceID[]; 873 uint8_t bControlSize; 874 // uint8_t bmControls[] 875 uint8_t iExtension; 876 } __PACKED; 877 878 #define VIDEO_SIZEOF_VC_EXTENSION_UNIT_DESC(p, n) (24 + p + n) 879 880 struct video_cs_ep_vc_ep_descriptor { 881 uint8_t bLength; 882 uint8_t bDescriptorType; 883 uint8_t bDescriptorSubType; 884 uint16_t wMaxTransferSize; 885 } __PACKED; 886 887 #define VIDEO_SIZEOF_VC_EP_DESC 5 888 889 struct video_cs_if_vs_input_header_descriptor { 890 uint8_t bLength; 891 uint8_t bDescriptorType; 892 uint8_t bDescriptorSubType; 893 uint8_t bNumFormats; 894 uint16_t wTotalLength; 895 uint8_t bEndpointAddress; 896 uint8_t bmInfo; 897 uint8_t bTerminalLink; 898 uint8_t bStillCaptureMethod; 899 uint8_t bTriggerSupport; 900 uint8_t bTriggerUsage; 901 uint8_t bControlSize; 902 uint8_t bmaControls[]; 903 } __PACKED; 904 905 #define VIDEO_SIZEOF_VS_INPUT_HEADER_DESC(p, n) (13 + p * n) 906 907 struct video_cs_if_vs_output_header_descriptor { 908 uint8_t bLength; 909 uint8_t bDescriptorType; 910 uint8_t bDescriptorSubType; 911 uint8_t bNumFormats; 912 uint16_t wTotalLength; 913 uint8_t bEndpointAddress; 914 uint8_t bTerminalLink; 915 uint8_t bControlSize; 916 uint8_t bmaControls[]; 917 } __PACKED; 918 919 #define VIDEO_SIZEOF_VS_OUTPUT_TERMINAL_DESC(p, n) (9 + p * n) 920 921 struct video_cs_if_vs_format_uncompressed_descriptor { 922 uint8_t bLength; 923 uint8_t bDescriptorType; 924 uint8_t bDescriptorSubType; 925 uint8_t bFormatIndex; 926 uint8_t bNumFrameDescriptors; 927 uint8_t guidFormat[16]; 928 uint8_t bBitsPerPixel; 929 uint8_t bDefaultFrameIndex; 930 uint8_t bAspectRatioX; 931 uint8_t bAspectRatioY; 932 uint8_t bmInterlaceFlags; 933 uint8_t bCopyProtect; 934 } __PACKED; 935 936 #define VIDEO_SIZEOF_VS_FORMAT_UNCOMPRESSED_DESC (27) 937 938 struct video_cs_if_vs_frame_uncompressed_descriptor { 939 uint8_t bLength; 940 uint8_t bDescriptorType; 941 uint8_t bDescriptorSubType; 942 uint8_t bFrameIndex; 943 uint8_t bmCapabilities; 944 uint16_t wWidth; 945 uint16_t wHeight; 946 uint32_t dwMinBitRate; 947 uint32_t dwMaxBitRate; 948 uint32_t dwMaxVideoFrameBufferSize; 949 uint32_t dwDefaultFrameInterval; 950 uint8_t bFrameIntervalType; 951 uint32_t dwFrameInterval[]; 952 } __PACKED; 953 954 #define VIDEO_SIZEOF_VS_FRAME_UNCOMPRESSED_DESC(n) (26 + 4 * (n)) 955 956 struct video_cs_if_vs_format_mjpeg_descriptor { 957 uint8_t bLength; 958 uint8_t bDescriptorType; 959 uint8_t bDescriptorSubType; 960 uint8_t bFormatIndex; 961 uint8_t bNumFrameDescriptors; 962 uint8_t bmFlags; 963 uint8_t bDefaultFrameIndex; 964 uint8_t bAspectRatioX; 965 uint8_t bAspectRatioY; 966 uint8_t bmInterlaceFlags; 967 uint8_t bCopyProtect; 968 } __PACKED; 969 970 #define VIDEO_SIZEOF_VS_FORMAT_MJPEG_DESC 11 971 972 struct video_cs_if_vs_frame_mjpeg_descriptor { 973 uint8_t bLength; 974 uint8_t bDescriptorType; 975 uint8_t bDescriptorSubType; 976 uint8_t bFrameIndex; 977 uint8_t bmCapabilities; 978 uint16_t wWidth; 979 uint16_t wHeight; 980 uint32_t dwMinBitRate; 981 uint32_t dwMaxBitRate; 982 uint32_t dwMaxVideoFrameBufferSize; 983 uint32_t dwDefaultFrameInterval; 984 uint8_t bFrameIntervalType; 985 uint32_t dwFrameInterval[]; 986 } __PACKED; 987 988 #define VIDEO_SIZEOF_VS_FRAME_MJPEG_DESC(n) (26 + 4 * (n)) 989 990 /* H264 Payload - 3.1.1. H264 Video Format Descriptor */ 991 struct video_cs_if_vs_format_h26x_descriptor { 992 uint8_t bLength; 993 uint8_t bDescriptorType; 994 uint8_t bDescriptorSubType; 995 uint8_t bFormatIndex; 996 uint8_t bNumFrameDescriptors; 997 uint8_t guidFormat[16]; 998 uint8_t bBitsPerPixel; 999 uint8_t bDefaultFrameIndex; 1000 uint8_t bAspectRatioX; 1001 uint8_t bAspectRatioY; 1002 uint8_t bmInterfaceFlags; 1003 uint8_t bCopyProtect; 1004 uint8_t bVariableSize; 1005 } __PACKED; 1006 1007 #define VIDEO_SIZEOF_VS_FORMAT_H264_DESC 28 1008 1009 /* H264 Payload - 3.1.2. H264 Video Frame Descriptor */ 1010 struct video_cs_if_vs_frame_h26x_descriptor { 1011 uint8_t bLength; 1012 uint8_t bDescriptorType; 1013 uint8_t bDescriptorSubType; 1014 uint8_t bFrameIndex; 1015 uint8_t bmCapabilities; 1016 uint16_t wWidth; 1017 uint16_t wHeight; 1018 uint32_t dwMinBitRate; 1019 uint32_t dwMaxBitRate; 1020 uint32_t dwDefaultFrameInterval; 1021 uint8_t bFrameIntervalType; 1022 uint32_t dwBytesPerLine; 1023 uint32_t dwFrameInterval[]; 1024 } __PACKED; 1025 1026 #define VIDEO_SIZEOF_VS_FRAME_H264_DESC(n) (26 + 4 * (n)) 1027 1028 struct video_cs_if_vs_colorformat_descriptor { 1029 uint8_t bLength; 1030 uint8_t bDescriptorType; 1031 uint8_t bDescriptorSubType; 1032 uint8_t bColorPrimaries; 1033 uint8_t bXferCharacteristics; 1034 uint8_t bMatrixCoefficients; 1035 } __PACKED; 1036 1037 #define VIDEO_SIZEOF_VS_COLORFORMAT_DESC 6 1038 1039 struct video_vc_input_terminal_bmcontrol_bitmap { 1040 uint32_t scanning_mode : 1; 1041 uint32_t auto_exposure_mode : 1; 1042 uint32_t auto_exposure_priority : 1; 1043 uint32_t exposure_time_absolute : 1; 1044 uint32_t exposure_time_relative : 1; 1045 uint32_t focus_absolute : 1; 1046 uint32_t focus_relative : 1; 1047 uint32_t iris_absolute : 1; 1048 uint32_t iris_relative : 1; 1049 uint32_t zoom_absolute : 1; 1050 uint32_t zoom_relative : 1; 1051 uint32_t pantilt_absolute : 1; 1052 uint32_t pantilt_relative : 1; 1053 uint32_t roll_absolute : 1; 1054 uint32_t roll_relative : 1; 1055 uint32_t reserved : 2; 1056 uint32_t focus_auto : 1; 1057 uint32_t pricvcy : 1; 1058 }; 1059 1060 struct video_vc_processing_unit_bmcontrol_bitmap { 1061 uint16_t brightness : 1; 1062 uint16_t contrast : 1; 1063 uint16_t hue : 1; 1064 uint16_t saturation : 1; 1065 uint16_t sharpness : 1; 1066 uint16_t gamma : 1; 1067 uint16_t white_bal_temp : 1; 1068 uint16_t white_bal_comp : 1; 1069 uint16_t backlight_comp : 1; 1070 uint16_t gain : 1; 1071 uint16_t power_line_freq : 1; 1072 uint16_t hue_auto : 1; 1073 uint16_t white_bal_temp_auto : 1; 1074 uint16_t white_bal_comp_auto : 1; 1075 uint16_t digital_mult : 1; 1076 uint16_t digital_mult_limit : 1; 1077 }; 1078 1079 struct video_camera_capabilities { 1080 uint8_t support_get_request : 1; 1081 uint8_t support_set_request : 1; 1082 uint8_t disabled_by_automatic_mode : 1; 1083 uint8_t auto_update_control : 1; 1084 uint8_t async_control : 1; 1085 uint8_t reserved : 3; 1086 }; 1087 1088 struct video_autoexposure_mode { 1089 uint8_t manual_mode : 1; 1090 uint8_t auto_mode : 1; 1091 uint8_t shutter_priority_mode : 1; 1092 uint8_t aperture_priority_mode : 1; 1093 uint8_t reserved : 4; 1094 }; 1095 1096 #define VIDEO_GUID_YUY2 0x59, 0x55, 0x59, 0x32, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 1097 #define VIDEO_GUID_NV12 0x4E, 0x56, 0x31, 0x32, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 1098 #define VIDEO_GUID_NV21 0x4E, 0x56, 0x32, 0x31, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 1099 #define VIDEO_GUID_M420 0x4D, 0x34, 0x32, 0x30, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 1100 #define VIDEO_GUID_I420 0x49, 0x34, 0x32, 0x30, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 1101 #define VIDEO_GUID_H264 0x48, 0x32, 0x36, 0x34, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 1102 1103 #define VIDEO_VC_TERMINAL_LEN (13 + 18 + 12 + 9) 1104 1105 /*Length of template descriptor: 81 bytes*/ 1106 #define VIDEO_VC_DESCRIPTOR_LEN (8 + 9 + VIDEO_VC_TERMINAL_LEN + 7 + 5) 1107 #define VIDEO_VC_NOEP_DESCRIPTOR_LEN (8 + 9 + VIDEO_VC_TERMINAL_LEN) 1108 1109 // clang-format off 1110 #define VIDEO_VC_DESCRIPTOR_INIT(bFirstInterface, bEndpointAddress, bcdUVC, wTotalLength, dwClockFrequency, stridx) \ 1111 /* Interface Association Descriptor */ \ 1112 0x08, \ 1113 USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION, \ 1114 bFirstInterface, \ 1115 0x02, \ 1116 USB_DEVICE_CLASS_VIDEO, \ 1117 VIDEO_SC_VIDEO_INTERFACE_COLLECTION, \ 1118 0x00, \ 1119 0x00, /* VideoControl Interface Descriptor */ \ 1120 0x09, /* bLength */ \ 1121 USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \ 1122 0x00, /* bInterfaceNumber */ \ 1123 0x00, /* bAlternateSetting */ \ 1124 0x01, /* bNumEndpoints:1 endpoint (interrupt endpoint) */ \ 1125 USB_DEVICE_CLASS_VIDEO, /* bInterfaceClass : CC_VIDEO */ \ 1126 VIDEO_SC_VIDEOCONTROL, /* bInterfaceSubClass : SC_VIDEOCONTROL */ \ 1127 VIDEO_PC_PROTOCOL_UNDEFINED, /* bInterfaceProtocol : PC_PROTOCOL_UNDEFINED */ \ 1128 stridx, /* iInterface:Index to string descriptor that contains the string <Your Product Name> */ /*Class-specific VideoControl Interface Descriptor */ \ 1129 0x0d, /* bLength */ \ 1130 0x24, /* bDescriptorType : CS_INTERFACE */ \ 1131 VIDEO_VC_HEADER_DESCRIPTOR_SUBTYPE, /* bDescriptorSubType : VC_HEADER subtype */ \ 1132 WBVAL(bcdUVC), /* bcdUVC : Revision of class specification that this device is based upon.*/ \ 1133 WBVAL(wTotalLength), /* wTotalLength */ \ 1134 DBVAL(dwClockFrequency), /* dwClockFrequency : 0x005b8d80 -> 6,000,000 == 6MHz*/ \ 1135 0x01, /* bInCollection : Number of streaming interfaces. */ \ 1136 (uint8_t)(bFirstInterface + 1), /* baInterfaceNr(0) : VideoStreaming interface 1 belongs to this VideoControl interface.*/ /* Input Terminal 1 -> Processing Unit 2 -> Output Terminal 3 */ \ 1137 0x12, \ 1138 0x24, \ 1139 VIDEO_VC_INPUT_TERMINAL_DESCRIPTOR_SUBTYPE, \ 1140 0x01, /* bTerminalID */ \ 1141 WBVAL(VIDEO_ITT_CAMERA), /* wTerminalType : 0x0201 Camera Sensor*/ \ 1142 0x00, /* bAssocTerminal */ \ 1143 0x00, /* iTerminal */ \ 1144 WBVAL(0x0000), /* wObjectiveFocalLengthMin */ \ 1145 WBVAL(0x0000), /* wObjectiveFocalLengthMax */ \ 1146 WBVAL(0x0000), /* wOcularFocalLength */ \ 1147 0x03, /* bControlSize */ \ 1148 0x00, 0x00, 0x00, /* bmControls */ \ 1149 0x0c, \ 1150 0x24, \ 1151 VIDEO_VC_PROCESSING_UNIT_DESCRIPTOR_SUBTYPE, \ 1152 0x02, /* bUnitID */ \ 1153 0x01, /* bSourceID */ \ 1154 0x00, 0x00, /* wMaxMultiplier */ \ 1155 0x02, /* bControlSize */ \ 1156 0x00, 0x00, /* bmControls */ \ 1157 0x00, /* iProcessing */ \ 1158 0x00, /* bmVideoStandards */ \ 1159 0x09, \ 1160 0x24, \ 1161 VIDEO_VC_OUTPUT_TERMINAL_DESCRIPTOR_SUBTYPE, \ 1162 0x03, /* bTerminalID */ \ 1163 WBVAL(VIDEO_TT_STREAMING), \ 1164 0x00, /* bAssocTerminal */ \ 1165 0x02, /* bSourceID */ \ 1166 0x00, /* iTerminal */ \ 1167 0x07, /* bLength */ \ 1168 USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType */ \ 1169 bEndpointAddress, /* bEndpointAddress */ \ 1170 0x03, /* bmAttributes */ \ 1171 0x10, 0x00, /* wMaxPacketSize */ \ 1172 0x08, /* bInterval */ \ 1173 /* Class-specific VC Interrupt Endpoint Descriptor */ \ 1174 0x05, 0x25, 0x03, 0x10, 0x00 1175 1176 #define VIDEO_VC_NOEP_DESCRIPTOR_INIT(bFirstInterface, bEndpointAddress, bcdUVC, wTotalLength, dwClockFrequency, stridx) \ 1177 /* Interface Association Descriptor */ \ 1178 0x08, \ 1179 USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION, \ 1180 bFirstInterface, \ 1181 0x02, \ 1182 USB_DEVICE_CLASS_VIDEO, \ 1183 VIDEO_SC_VIDEO_INTERFACE_COLLECTION, \ 1184 0x00, \ 1185 0x00, /* VideoControl Interface Descriptor */ \ 1186 0x09, /* bLength */ \ 1187 USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \ 1188 0x00, /* bInterfaceNumber */ \ 1189 0x00, /* bAlternateSetting */ \ 1190 0x00, /* bNumEndpoints:1 endpoint (interrupt endpoint) */ \ 1191 USB_DEVICE_CLASS_VIDEO, /* bInterfaceClass : CC_VIDEO */ \ 1192 VIDEO_SC_VIDEOCONTROL, /* bInterfaceSubClass : SC_VIDEOCONTROL */ \ 1193 VIDEO_PC_PROTOCOL_UNDEFINED, /* bInterfaceProtocol : PC_PROTOCOL_UNDEFINED */ \ 1194 stridx, /* iInterface:Index to string descriptor that contains the string <Your Product Name> */ /*Class-specific VideoControl Interface Descriptor */ \ 1195 0x0d, /* bLength */ \ 1196 0x24, /* bDescriptorType : CS_INTERFACE */ \ 1197 VIDEO_VC_HEADER_DESCRIPTOR_SUBTYPE, /* bDescriptorSubType : VC_HEADER subtype */ \ 1198 WBVAL(bcdUVC), /* bcdUVC : Revision of class specification that this device is based upon.*/ \ 1199 WBVAL(wTotalLength), /* wTotalLength */ \ 1200 DBVAL(dwClockFrequency), /* dwClockFrequency : 0x005b8d80 -> 6,000,000 == 6MHz*/ \ 1201 0x01, /* bInCollection : Number of streaming interfaces. */ \ 1202 (uint8_t)(bFirstInterface + 1), /* baInterfaceNr(0) : VideoStreaming interface 1 belongs to this VideoControl interface.*/ /* Input Terminal 1 -> Processing Unit 2 -> Output Terminal 3 */ \ 1203 0x12, \ 1204 0x24, \ 1205 VIDEO_VC_INPUT_TERMINAL_DESCRIPTOR_SUBTYPE, \ 1206 0x01, /* bTerminalID */ \ 1207 WBVAL(VIDEO_ITT_CAMERA), /* wTerminalType : 0x0201 Camera Sensor*/ \ 1208 0x00, /* bAssocTerminal */ \ 1209 0x00, /* iTerminal */ \ 1210 WBVAL(0x0000), /* wObjectiveFocalLengthMin */ \ 1211 WBVAL(0x0000), /* wObjectiveFocalLengthMax */ \ 1212 WBVAL(0x0000), /* wOcularFocalLength */ \ 1213 0x03, /* bControlSize */ \ 1214 0x00, 0x00, 0x00, /* bmControls */ \ 1215 0x0c, \ 1216 0x24, \ 1217 VIDEO_VC_PROCESSING_UNIT_DESCRIPTOR_SUBTYPE, \ 1218 0x02, /* bUnitID */ \ 1219 0x01, /* bSourceID */ \ 1220 0x00, 0x00, /* wMaxMultiplier */ \ 1221 0x02, /* bControlSize */ \ 1222 0x00, 0x00, /* bmControls */ \ 1223 0x00, /* iProcessing */ \ 1224 0x00, /* bmVideoStandards */ \ 1225 0x09, \ 1226 0x24, \ 1227 VIDEO_VC_OUTPUT_TERMINAL_DESCRIPTOR_SUBTYPE, \ 1228 0x03, /* bTerminalID */ \ 1229 WBVAL(VIDEO_TT_STREAMING), \ 1230 0x00, /* bAssocTerminal */ \ 1231 0x02, /* bSourceID */ \ 1232 0x00 /* iTerminal */ \ 1233 1234 #define VIDEO_VS_DESCRIPTOR_INIT(bInterfaceNumber, bAlternateSetting, bNumEndpoints) \ 1235 /* Video Streaming (VS) Interface Descriptor */ \ 1236 0x09, /* bLength */ \ 1237 USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType : INTERFACE */ \ 1238 bInterfaceNumber, /* bInterfaceNumber: Index of this interface */ \ 1239 bAlternateSetting, /* bAlternateSetting: Index of this alternate setting */ \ 1240 bNumEndpoints, /* bNumEndpoints : 0 endpoints, no bandwidth used*/ \ 1241 0x0e, /* bInterfaceClass : CC_VIDEO */ \ 1242 0x02, /* bInterfaceSubClass : SC_VIDEOSTREAMING */ \ 1243 0x00, /* bInterfaceProtocol : PC_PROTOCOL_UNDEFINED */ \ 1244 0x00 /* iInterface : unused */ 1245 1246 #define VIDEO_VS_INPUT_HEADER_DESCRIPTOR_INIT(bNumFormats, wTotalLength, bEndpointAddress, ...) \ 1247 /*Class-specific VideoStream Header Descriptor (Input) */ \ 1248 0x0d + PP_NARG(__VA_ARGS__), \ 1249 0x24, \ 1250 VIDEO_VS_INPUT_HEADER_DESCRIPTOR_SUBTYPE, \ 1251 bNumFormats, /* bNumFormats : One format descriptor follows. */ \ 1252 WBVAL(wTotalLength), \ 1253 bEndpointAddress, \ 1254 0x00, /* bmInfo : No dynamic format change supported. */ \ 1255 0x03, /* bTerminalLink : This VideoStreaming interface supplies terminal ID 2 (Output Terminal). */ \ 1256 0x00, /* bStillCaptureMethod : Device supports still image capture method 0. */ \ 1257 0x00, /* bTriggerSupport : Hardware trigger supported for still image capture */ \ 1258 0x00, /* bTriggerUsage : Hardware trigger should initiate a still image capture. */ \ 1259 0x01, /* bControlSize : Size of the bmaControls field */ \ 1260 __VA_ARGS__ /* bmaControls : No VideoStreaming specific controls are supported.*/ 1261 1262 #define VIDEO_VS_OUTPUT_HEADER_DESCRIPTOR_INIT(bNumFormats, wTotalLength, bEndpointAddress, ...) \ 1263 /*Class-specific VideoStream Header Descriptor (Input) */ \ 1264 0x0d + PP_NARG(__VA_ARGS__), \ 1265 0x24, \ 1266 VIDEO_VS_OUTPUT_HEADER_DESCRIPTOR_SUBTYPE, \ 1267 bNumFormats, /* bNumFormats : One format descriptor follows. */ \ 1268 WBVAL(wTotalLength), \ 1269 bEndpointAddress, \ 1270 0x00, /* bmInfo : No dynamic format change supported. */ \ 1271 0x03, /* bTerminalLink : This VideoStreaming interface supplies terminal ID 2 (Output Terminal). */ \ 1272 0x00, /* bStillCaptureMethod : Device supports still image capture method 0. */ \ 1273 0x00, /* bTriggerSupport : Hardware trigger supported for still image capture */ \ 1274 0x00, /* bTriggerUsage : Hardware trigger should initiate a still image capture. */ \ 1275 PP_NARG(__VA_ARGS__), /* bControlSize : Size of the bmaControls field */ \ 1276 __VA_ARGS__ /* bmaControls : No VideoStreaming specific controls are supported.*/ 1277 1278 #define VIDEO_VS_FORMAT_UNCOMPRESSED_DESCRIPTOR_INIT(bFormatIndex, bNumFrameDescriptors, GUIDFormat) \ 1279 /*Payload Format(UNCOMPRESSED) Descriptor */ \ 1280 0x1b, \ 1281 0x24, \ 1282 VIDEO_VS_FORMAT_UNCOMPRESSED_DESCRIPTOR_SUBTYPE, /* bDescriptorSubType : VS_FORMAT_UNCOMPRESSED subtype */ \ 1283 bFormatIndex, /* bFormatIndex : First (and only) format descriptor */ \ 1284 bNumFrameDescriptors, /* bNumFrameDescriptors : One frame descriptor for this format follows. */ \ 1285 GUIDFormat, /* GUID Format YUY2 {32595559-0000-0010-8000-00AA00389B71} */ \ 1286 0x10, /* bBitsPerPixel : Number of bits per pixel used to specify color in the decoded video frame - 16 for yuy2*/ \ 1287 0x01, /* bDefaultFrameIndex : Default frame index is 1. */ \ 1288 0x00, /* bAspectRatioX : Non-interlaced stream not required. */ \ 1289 0x00, /* bAspectRatioY : Non-interlaced stream not required. */ \ 1290 0x00, /* bmInterlaceFlags : Non-interlaced stream */ \ 1291 0x00 /* bCopyProtect : No restrictions imposed on the duplication of this video stream. */ 1292 1293 #define VIDEO_VS_FRAME_UNCOMPRESSED_DESCRIPTOR_INIT(bFrameIndex, wWidth, wHeight, dwMinBitRate, dwMaxBitRate, \ 1294 dwMaxVideoFrameBufferSize, dwDefaultFrameInterval, bFrameIntervalType, ...) \ 1295 0x1a + PP_NARG(__VA_ARGS__), \ 1296 0x24, \ 1297 VIDEO_VS_FRAME_UNCOMPRESSED_DESCRIPTOR_SUBTYPE, \ 1298 bFrameIndex, \ 1299 0x00, \ 1300 WBVAL(wWidth), \ 1301 WBVAL(wHeight), \ 1302 DBVAL(dwMinBitRate), \ 1303 DBVAL(dwMaxBitRate), \ 1304 DBVAL(dwMaxVideoFrameBufferSize), \ 1305 dwDefaultFrameInterval, /* dwDefaultFrameInterval : 1,000,000 * 100ns -> 10 FPS */ \ 1306 bFrameIntervalType, /* bFrameIntervalType : Indicates how the frame interval can be programmed. 0: Continuous frame interval 1..255: The number of discrete frame */ \ 1307 __VA_ARGS__ 1308 1309 #define VIDEO_VS_FORMAT_MJPEG_DESCRIPTOR_INIT(bFormatIndex, bNumFrameDescriptors) \ 1310 /*Payload Format(MJPEG) Descriptor */ \ 1311 0x0b, /* bLength */ \ 1312 0x24, /* bDescriptorType : CS_INTERFACE */ \ 1313 0x06, /* bDescriptorSubType : VS_FORMAT_MJPEG subtype */ \ 1314 bFormatIndex, /* bFormatIndex : First (and only) format descriptor */ \ 1315 bNumFrameDescriptors, /* bNumFrameDescriptors : One frame descriptor for this format follows. */ \ 1316 0x00, /* bmFlags : Uses fixed size samples.. */ \ 1317 0x01, /* bDefaultFrameIndex : Default frame index is 1. */ \ 1318 0x00, /* bAspectRatioX : Non-interlaced stream, not required. */ \ 1319 0x00, /* bAspectRatioY : Non-interlaced stream, not required. */ \ 1320 0x00, /* bmInterlaceFlags : Non-interlaced stream */ \ 1321 0x00 /* bCopyProtect : No restrictions imposed on the duplication of this video stream. */ 1322 1323 #define VIDEO_VS_FRAME_MJPEG_DESCRIPTOR_INIT(bFrameIndex, wWidth, wHeight, dwMinBitRate, dwMaxBitRate, \ 1324 dwMaxVideoFrameBufferSize, dwDefaultFrameInterval, bFrameIntervalType, ...) \ 1325 0x1a + PP_NARG(__VA_ARGS__), /* bLength */ \ 1326 0x24, /* bDescriptorType : CS_INTERFACE */ \ 1327 VIDEO_VS_FRAME_MJPEG_DESCRIPTOR_SUBTYPE, /* bDescriptorSubType : VS_FRAME_MJPEG */ \ 1328 bFrameIndex, /* bFrameIndex : First (and only) frame descriptor */ \ 1329 0x00, /* bmCapabilities : Still images using capture method 0 are supported at this frame setting.D1: Fixed frame-rate. */ \ 1330 WBVAL(wWidth), /* wWidth (2bytes): Width of frame is 128 pixels. */ \ 1331 WBVAL(wHeight), /* wHeight (2bytes): Height of frame is 64 pixels. */ \ 1332 DBVAL(dwMinBitRate), /* dwMinBitRate (4bytes): Min bit rate in bits/s */ \ 1333 DBVAL(dwMaxBitRate), /* dwMaxBitRate (4bytes): Max bit rate in bits/s */ \ 1334 DBVAL(dwMaxVideoFrameBufferSize), /* dwMaxVideoFrameBufSize (4bytes): Maximum video or still frame size, in bytes. */ \ 1335 dwDefaultFrameInterval, /* dwDefaultFrameInterval : 1,000,000 * 100ns -> 10 FPS */ \ 1336 bFrameIntervalType, /* bFrameIntervalType : Indicates how the frame interval can be programmed. 0: Continuous frame interval 1..255: The number of discrete frame */ \ 1337 __VA_ARGS__ 1338 1339 #define VIDEO_VS_FORMAT_H264_DESCRIPTOR_INIT(bFormatIndex, bNumFrameDescriptors) \ 1340 /*Payload Format(H.264) Descriptor */ \ 1341 0x1c, /* bLength */ \ 1342 0x24, /* bDescriptorType : CS_INTERFACE */ \ 1343 VIDEO_VS_FORMAT_FRAME_BASED_DESCRIPTOR_SUBTYPE, /* bDescriptorSubType : VS_FORMAT_FRAME_BASED subtype */\ 1344 bFormatIndex, /* bFormatIndex : First (and only) format descriptor */ \ 1345 bNumFrameDescriptors, /* bNumFrameDescriptors : One frame descriptor for this format follows. */ \ 1346 VIDEO_GUID_H264, \ 1347 0x00, /* bmFlags : Uses fixed size samples.. */ \ 1348 0x01, /* bDefaultFrameIndex : Default frame index is 1. */ \ 1349 0x00, /* bAspectRatioX : Non-interlaced stream, not required. */ \ 1350 0x00, /* bAspectRatioY : Non-interlaced stream, not required. */ \ 1351 0x00, /* bmInterlaceFlags : Non-interlaced stream */ \ 1352 0x00, /* bCopyProtect : No restrictions imposed on the duplication of this video stream. */ \ 1353 0x00 /* Variable size: False */ 1354 1355 #define VIDEO_VS_FRAME_H264_DESCRIPTOR_INIT(bFrameIndex, wWidth, wHeight, dwMinBitRate, dwMaxBitRate, \ 1356 dwDefaultFrameInterval, bFrameIntervalType, ...) \ 1357 0x1a + PP_NARG(__VA_ARGS__), /* bLength */ \ 1358 0x24, /* bDescriptorType : CS_INTERFACE */ \ 1359 VIDEO_VS_FRAME_FRAME_BASED_DESCRIPTOR_SUBTYPE, /* bDescriptorSubType : VS_FRAME_BASED */ \ 1360 bFrameIndex, /* bFrameIndex : First (and only) frame descriptor */ \ 1361 0x00, /* bmCapabilities : Still images using capture method 0 are supported at this frame setting.D1: Fixed frame-rate. */ \ 1362 WBVAL(wWidth), /* wWidth (2bytes): Width of frame is 128 pixels. */ \ 1363 WBVAL(wHeight), /* wHeight (2bytes): Height of frame is 64 pixels. */ \ 1364 DBVAL(dwMinBitRate), /* dwMinBitRate (4bytes): Min bit rate in bits/s */ \ 1365 DBVAL(dwMaxBitRate), /* dwMaxBitRate (4bytes): Max bit rate in bits/s */ \ 1366 dwDefaultFrameInterval, /* dwDefaultFrameInterval : 1,000,000 * 100ns -> 10 FPS */ \ 1367 bFrameIntervalType, /* bFrameIntervalType : Indicates how the frame interval can be programmed. 0: Continuous frame interval 1..255: The number of discrete frame */ \ 1368 DBVAL(0x00), /* dwBytesPerLine (4bytes) */ \ 1369 __VA_ARGS__ 1370 1371 #define VIDEO_VS_COLOR_MATCHING_DESCRIPTOR_INIT() \ 1372 0x06, /* bLength */ \ 1373 0x24, /* bDescriptorType : CS_INTERFACE */ \ 1374 VIDEO_VS_COLORFORMAT_DESCRIPTOR_SUBTYPE, /* bDescriptorSubType : VS_COLORFORMAT */ \ 1375 0x01, /* bColorPrimaries */ \ 1376 0x01, /* bTransferCharacteristics */ \ 1377 0x04 /* bMatrixCoefficients */ 1378 1379 // clang-format on 1380 #endif /*USB_VIDEO_H */