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