usb_video.h 95 KB

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