• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2020 The ChromiumOS Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 //! This file was generated by the following commands and modified manually.
6 //!
7 //! ```shell
8 //! $ bindgen virtio_video.h              \
9 //!     --allowlist-type "virtio_video.*" \
10 //!     --allowlist-var "VIRTIO_VIDEO_.*" \
11 //!     --with-derive-default            \
12 //!     --no-layout-tests                \
13 //!     --no-prepend-enum-name > protocol.rs
14 //! $ sed -i "s/__u/u/g" protocol.rs
15 //! $ sed -i "s/__le/Le/g" protocol.rs
16 //! ```
17 //!
18 //! The main points of the manual modifications are as follows:
19 //! * Removed `hdr` from each command struct so that we can read the header and a command body
20 //!   separately. (cf. [related discussion](https://markmail.org/message/tr5g6axqq2zzq64y))
21 //! * Derive implementations of AsBytes and FromBytes for each struct as needed.
22 //! * Added GET_PARAMS_EXT and SET_PARAMS_EXT to allow querying and changing the resource type
23 //!   dynamically.
24 //! * Moved some definitions such as virtio_video_config to device_constants to make them visible to
25 //!   vhost-user modules, and also pub-use them.
26 
27 #![allow(dead_code, non_snake_case, non_camel_case_types)]
28 
29 use data_model::Le32;
30 use data_model::Le64;
31 use zerocopy::AsBytes;
32 use zerocopy::FromBytes;
33 use zerocopy::FromZeroes;
34 
35 pub use crate::virtio::device_constants::video::virtio_video_config;
36 pub use crate::virtio::device_constants::video::VIRTIO_VIDEO_F_RESOURCE_GUEST_PAGES;
37 pub use crate::virtio::device_constants::video::VIRTIO_VIDEO_F_RESOURCE_NON_CONTIG;
38 pub use crate::virtio::device_constants::video::VIRTIO_VIDEO_F_RESOURCE_VIRTIO_OBJECT;
39 
40 pub const VIRTIO_VIDEO_MAX_PLANES: u32 = 8;
41 pub const VIRTIO_VIDEO_FORMAT_RAW_MIN: virtio_video_format = 1;
42 pub const VIRTIO_VIDEO_FORMAT_ARGB8888: virtio_video_format = 1;
43 pub const VIRTIO_VIDEO_FORMAT_BGRA8888: virtio_video_format = 2;
44 pub const VIRTIO_VIDEO_FORMAT_NV12: virtio_video_format = 3;
45 pub const VIRTIO_VIDEO_FORMAT_YUV420: virtio_video_format = 4;
46 pub const VIRTIO_VIDEO_FORMAT_YVU420: virtio_video_format = 5;
47 pub const VIRTIO_VIDEO_FORMAT_RAW_MAX: virtio_video_format = 5;
48 pub const VIRTIO_VIDEO_FORMAT_CODED_MIN: virtio_video_format = 4096;
49 pub const VIRTIO_VIDEO_FORMAT_MPEG2: virtio_video_format = 4096;
50 pub const VIRTIO_VIDEO_FORMAT_MPEG4: virtio_video_format = 4097;
51 pub const VIRTIO_VIDEO_FORMAT_H264: virtio_video_format = 4098;
52 pub const VIRTIO_VIDEO_FORMAT_HEVC: virtio_video_format = 4099;
53 pub const VIRTIO_VIDEO_FORMAT_VP8: virtio_video_format = 4100;
54 pub const VIRTIO_VIDEO_FORMAT_VP9: virtio_video_format = 4101;
55 pub const VIRTIO_VIDEO_FORMAT_CODED_MAX: virtio_video_format = 4101;
56 pub type virtio_video_format = u32;
57 pub const VIRTIO_VIDEO_PROFILE_H264_MIN: virtio_video_profile = 256;
58 pub const VIRTIO_VIDEO_PROFILE_H264_BASELINE: virtio_video_profile = 256;
59 pub const VIRTIO_VIDEO_PROFILE_H264_MAIN: virtio_video_profile = 257;
60 pub const VIRTIO_VIDEO_PROFILE_H264_EXTENDED: virtio_video_profile = 258;
61 pub const VIRTIO_VIDEO_PROFILE_H264_HIGH: virtio_video_profile = 259;
62 pub const VIRTIO_VIDEO_PROFILE_H264_HIGH10PROFILE: virtio_video_profile = 260;
63 pub const VIRTIO_VIDEO_PROFILE_H264_HIGH422PROFILE: virtio_video_profile = 261;
64 pub const VIRTIO_VIDEO_PROFILE_H264_HIGH444PREDICTIVEPROFILE: virtio_video_profile = 262;
65 pub const VIRTIO_VIDEO_PROFILE_H264_SCALABLEBASELINE: virtio_video_profile = 263;
66 pub const VIRTIO_VIDEO_PROFILE_H264_SCALABLEHIGH: virtio_video_profile = 264;
67 pub const VIRTIO_VIDEO_PROFILE_H264_STEREOHIGH: virtio_video_profile = 265;
68 pub const VIRTIO_VIDEO_PROFILE_H264_MULTIVIEWHIGH: virtio_video_profile = 266;
69 pub const VIRTIO_VIDEO_PROFILE_H264_MAX: virtio_video_profile = 266;
70 pub const VIRTIO_VIDEO_PROFILE_HEVC_MIN: virtio_video_profile = 512;
71 pub const VIRTIO_VIDEO_PROFILE_HEVC_MAIN: virtio_video_profile = 512;
72 pub const VIRTIO_VIDEO_PROFILE_HEVC_MAIN10: virtio_video_profile = 513;
73 pub const VIRTIO_VIDEO_PROFILE_HEVC_MAIN_STILL_PICTURE: virtio_video_profile = 514;
74 pub const VIRTIO_VIDEO_PROFILE_HEVC_MAX: virtio_video_profile = 514;
75 pub const VIRTIO_VIDEO_PROFILE_VP8_MIN: virtio_video_profile = 768;
76 pub const VIRTIO_VIDEO_PROFILE_VP8_PROFILE0: virtio_video_profile = 768;
77 pub const VIRTIO_VIDEO_PROFILE_VP8_PROFILE1: virtio_video_profile = 769;
78 pub const VIRTIO_VIDEO_PROFILE_VP8_PROFILE2: virtio_video_profile = 770;
79 pub const VIRTIO_VIDEO_PROFILE_VP8_PROFILE3: virtio_video_profile = 771;
80 pub const VIRTIO_VIDEO_PROFILE_VP8_MAX: virtio_video_profile = 771;
81 pub const VIRTIO_VIDEO_PROFILE_VP9_MIN: virtio_video_profile = 1024;
82 pub const VIRTIO_VIDEO_PROFILE_VP9_PROFILE0: virtio_video_profile = 1024;
83 pub const VIRTIO_VIDEO_PROFILE_VP9_PROFILE1: virtio_video_profile = 1025;
84 pub const VIRTIO_VIDEO_PROFILE_VP9_PROFILE2: virtio_video_profile = 1026;
85 pub const VIRTIO_VIDEO_PROFILE_VP9_PROFILE3: virtio_video_profile = 1027;
86 pub const VIRTIO_VIDEO_PROFILE_VP9_MAX: virtio_video_profile = 1027;
87 pub type virtio_video_profile = u32;
88 pub const VIRTIO_VIDEO_LEVEL_H264_MIN: virtio_video_level = 256;
89 pub const VIRTIO_VIDEO_LEVEL_H264_1_0: virtio_video_level = 256;
90 pub const VIRTIO_VIDEO_LEVEL_H264_1_1: virtio_video_level = 257;
91 pub const VIRTIO_VIDEO_LEVEL_H264_1_2: virtio_video_level = 258;
92 pub const VIRTIO_VIDEO_LEVEL_H264_1_3: virtio_video_level = 259;
93 pub const VIRTIO_VIDEO_LEVEL_H264_2_0: virtio_video_level = 260;
94 pub const VIRTIO_VIDEO_LEVEL_H264_2_1: virtio_video_level = 261;
95 pub const VIRTIO_VIDEO_LEVEL_H264_2_2: virtio_video_level = 262;
96 pub const VIRTIO_VIDEO_LEVEL_H264_3_0: virtio_video_level = 263;
97 pub const VIRTIO_VIDEO_LEVEL_H264_3_1: virtio_video_level = 264;
98 pub const VIRTIO_VIDEO_LEVEL_H264_3_2: virtio_video_level = 265;
99 pub const VIRTIO_VIDEO_LEVEL_H264_4_0: virtio_video_level = 266;
100 pub const VIRTIO_VIDEO_LEVEL_H264_4_1: virtio_video_level = 267;
101 pub const VIRTIO_VIDEO_LEVEL_H264_4_2: virtio_video_level = 268;
102 pub const VIRTIO_VIDEO_LEVEL_H264_5_0: virtio_video_level = 269;
103 pub const VIRTIO_VIDEO_LEVEL_H264_5_1: virtio_video_level = 270;
104 pub const VIRTIO_VIDEO_LEVEL_H264_MAX: virtio_video_level = 270;
105 pub type virtio_video_level = u32;
106 pub const VIRTIO_VIDEO_BITRATE_MODE_VBR: virtio_video_bitrate_mode = 0;
107 pub const VIRTIO_VIDEO_BITRATE_MODE_CBR: virtio_video_bitrate_mode = 1;
108 pub type virtio_video_bitrate_mode = u32;
109 
110 pub const VIRTIO_VIDEO_CMD_QUERY_CAPABILITY: virtio_video_cmd_type = 256;
111 pub const VIRTIO_VIDEO_CMD_STREAM_CREATE: virtio_video_cmd_type = 257;
112 pub const VIRTIO_VIDEO_CMD_STREAM_DESTROY: virtio_video_cmd_type = 258;
113 pub const VIRTIO_VIDEO_CMD_STREAM_DRAIN: virtio_video_cmd_type = 259;
114 pub const VIRTIO_VIDEO_CMD_RESOURCE_CREATE: virtio_video_cmd_type = 260;
115 pub const VIRTIO_VIDEO_CMD_RESOURCE_QUEUE: virtio_video_cmd_type = 261;
116 pub const VIRTIO_VIDEO_CMD_RESOURCE_DESTROY_ALL: virtio_video_cmd_type = 262;
117 pub const VIRTIO_VIDEO_CMD_QUEUE_CLEAR: virtio_video_cmd_type = 263;
118 pub const VIRTIO_VIDEO_CMD_GET_PARAMS: virtio_video_cmd_type = 264;
119 pub const VIRTIO_VIDEO_CMD_SET_PARAMS: virtio_video_cmd_type = 265;
120 pub const VIRTIO_VIDEO_CMD_QUERY_CONTROL: virtio_video_cmd_type = 266;
121 pub const VIRTIO_VIDEO_CMD_GET_CONTROL: virtio_video_cmd_type = 267;
122 pub const VIRTIO_VIDEO_CMD_SET_CONTROL: virtio_video_cmd_type = 268;
123 pub const VIRTIO_VIDEO_CMD_GET_PARAMS_EXT: virtio_video_cmd_type = 269;
124 pub const VIRTIO_VIDEO_CMD_SET_PARAMS_EXT: virtio_video_cmd_type = 270;
125 pub const VIRTIO_VIDEO_RESP_OK_NODATA: virtio_video_cmd_type = 512;
126 pub const VIRTIO_VIDEO_RESP_OK_QUERY_CAPABILITY: virtio_video_cmd_type = 513;
127 pub const VIRTIO_VIDEO_RESP_OK_RESOURCE_QUEUE: virtio_video_cmd_type = 514;
128 pub const VIRTIO_VIDEO_RESP_OK_GET_PARAMS: virtio_video_cmd_type = 515;
129 pub const VIRTIO_VIDEO_RESP_OK_QUERY_CONTROL: virtio_video_cmd_type = 516;
130 pub const VIRTIO_VIDEO_RESP_OK_GET_CONTROL: virtio_video_cmd_type = 517;
131 pub const VIRTIO_VIDEO_RESP_ERR_INVALID_OPERATION: virtio_video_cmd_type = 768;
132 pub const VIRTIO_VIDEO_RESP_ERR_OUT_OF_MEMORY: virtio_video_cmd_type = 769;
133 pub const VIRTIO_VIDEO_RESP_ERR_INVALID_STREAM_ID: virtio_video_cmd_type = 770;
134 pub const VIRTIO_VIDEO_RESP_ERR_INVALID_RESOURCE_ID: virtio_video_cmd_type = 771;
135 pub const VIRTIO_VIDEO_RESP_ERR_INVALID_PARAMETER: virtio_video_cmd_type = 772;
136 pub const VIRTIO_VIDEO_RESP_ERR_UNSUPPORTED_CONTROL: virtio_video_cmd_type = 773;
137 pub type virtio_video_cmd_type = u32;
138 #[repr(C)]
139 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
140 pub struct virtio_video_cmd_hdr {
141     pub type_: Le32,
142     pub stream_id: Le32,
143 }
144 
145 pub const VIRTIO_VIDEO_QUEUE_TYPE_INPUT: virtio_video_queue_type = 256;
146 pub const VIRTIO_VIDEO_QUEUE_TYPE_OUTPUT: virtio_video_queue_type = 257;
147 pub type virtio_video_queue_type = u32;
148 #[repr(C)]
149 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
150 pub struct virtio_video_query_capability {
151     pub queue_type: Le32,
152     pub padding: [u8; 4usize],
153 }
154 
155 pub const VIRTIO_VIDEO_PLANES_LAYOUT_SINGLE_BUFFER: virtio_video_planes_layout_flag = 1;
156 pub const VIRTIO_VIDEO_PLANES_LAYOUT_PER_PLANE: virtio_video_planes_layout_flag = 2;
157 pub type virtio_video_planes_layout_flag = u32;
158 #[repr(C)]
159 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
160 pub struct virtio_video_format_range {
161     pub min: Le32,
162     pub max: Le32,
163     pub step: Le32,
164     pub padding: [u8; 4usize],
165 }
166 
167 #[repr(C)]
168 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
169 pub struct virtio_video_format_frame {
170     pub width: virtio_video_format_range,
171     pub height: virtio_video_format_range,
172     pub num_rates: Le32,
173     pub padding: [u8; 4usize],
174 }
175 
176 #[repr(C)]
177 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
178 pub struct virtio_video_format_desc {
179     pub mask: Le64,
180     pub format: Le32,
181     pub planes_layout: Le32,
182     pub plane_align: Le32,
183     pub num_frames: Le32,
184 }
185 
186 #[repr(C)]
187 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
188 pub struct virtio_video_query_capability_resp {
189     pub hdr: virtio_video_cmd_hdr,
190     pub num_descs: Le32,
191     pub padding: [u8; 4usize],
192 }
193 
194 pub const VIRTIO_VIDEO_MEM_TYPE_GUEST_PAGES: virtio_video_mem_type = 0;
195 pub const VIRTIO_VIDEO_MEM_TYPE_VIRTIO_OBJECT: virtio_video_mem_type = 1;
196 pub type virtio_video_mem_type = u32;
197 #[repr(C)]
198 #[derive(Copy, Clone, AsBytes, FromZeroes, FromBytes)]
199 pub struct virtio_video_stream_create {
200     pub in_mem_type: Le32,
201     pub out_mem_type: Le32,
202     pub coded_format: Le32,
203     pub padding: [u8; 4usize],
204     pub tag: [u8; 64usize],
205 }
206 impl Default for virtio_video_stream_create {
default() -> Self207     fn default() -> Self {
208         // SAFETY: trivially safe
209         unsafe { ::std::mem::zeroed() }
210     }
211 }
212 
213 #[repr(C)]
214 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
215 pub struct virtio_video_stream_destroy {}
216 
217 #[repr(C)]
218 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
219 pub struct virtio_video_stream_drain {}
220 
221 #[repr(C)]
222 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
223 pub struct virtio_video_mem_entry {
224     pub addr: Le64,
225     pub length: Le32,
226     pub padding: [u8; 4usize],
227 }
228 #[repr(C)]
229 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
230 pub struct virtio_video_object_entry {
231     pub uuid: [u8; 16usize],
232 }
233 
234 #[repr(C)]
235 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
236 pub struct virtio_video_resource_create {
237     pub queue_type: Le32,
238     pub resource_id: Le32,
239     pub planes_layout: Le32,
240     pub num_planes: Le32,
241     pub plane_offsets: [Le32; 8usize],
242     pub num_entries: [Le32; 8usize],
243 }
244 
245 #[repr(C)]
246 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
247 pub struct virtio_video_resource_queue {
248     pub queue_type: Le32,
249     pub resource_id: Le32,
250     pub timestamp: Le64,
251     pub num_data_sizes: Le32,
252     pub data_sizes: [Le32; 8usize],
253     pub padding: [u8; 4usize],
254 }
255 
256 pub const VIRTIO_VIDEO_BUFFER_FLAG_ERR: virtio_video_buffer_flag = 1;
257 pub const VIRTIO_VIDEO_BUFFER_FLAG_EOS: virtio_video_buffer_flag = 2;
258 pub const VIRTIO_VIDEO_BUFFER_FLAG_IFRAME: virtio_video_buffer_flag = 4;
259 pub const VIRTIO_VIDEO_BUFFER_FLAG_PFRAME: virtio_video_buffer_flag = 8;
260 pub const VIRTIO_VIDEO_BUFFER_FLAG_BFRAME: virtio_video_buffer_flag = 16;
261 pub type virtio_video_buffer_flag = u32;
262 #[repr(C)]
263 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
264 pub struct virtio_video_resource_queue_resp {
265     pub hdr: virtio_video_cmd_hdr,
266     pub timestamp: Le64,
267     pub flags: Le32,
268     pub size: Le32,
269 }
270 
271 #[repr(C)]
272 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
273 pub struct virtio_video_resource_destroy_all {
274     pub queue_type: Le32,
275     pub padding: [u8; 4usize],
276 }
277 
278 #[repr(C)]
279 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
280 pub struct virtio_video_queue_clear {
281     pub queue_type: Le32,
282     pub padding: [u8; 4usize],
283 }
284 
285 #[repr(C)]
286 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
287 pub struct virtio_video_plane_format {
288     pub plane_size: Le32,
289     pub stride: Le32,
290 }
291 #[repr(C)]
292 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
293 pub struct virtio_video_crop {
294     pub left: Le32,
295     pub top: Le32,
296     pub width: Le32,
297     pub height: Le32,
298 }
299 #[repr(C)]
300 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
301 pub struct virtio_video_params {
302     pub queue_type: Le32,
303     pub format: Le32,
304     pub frame_width: Le32,
305     pub frame_height: Le32,
306     pub min_buffers: Le32,
307     pub max_buffers: Le32,
308     pub crop: virtio_video_crop,
309     pub frame_rate: Le32,
310     pub num_planes: Le32,
311     pub plane_formats: [virtio_video_plane_format; 8usize],
312 }
313 #[repr(C)]
314 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
315 pub struct virtio_video_get_params {
316     pub queue_type: Le32,
317     pub padding: [u8; 4usize],
318 }
319 
320 #[repr(C)]
321 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
322 pub struct virtio_video_get_params_resp {
323     pub hdr: virtio_video_cmd_hdr,
324     pub params: virtio_video_params,
325 }
326 
327 #[repr(C)]
328 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
329 pub struct virtio_video_set_params {
330     pub params: virtio_video_params,
331 }
332 
333 /// Extension of the {GET,SET}_PARAMS data to also include the resource type. Not including it
334 /// was an oversight and the {GET,SET}_PARAMS_EXT commands use this structure to fix it, while
335 /// the older {GET,SET}_PARAMS commands are kept for backward compatibility.
336 #[repr(C)]
337 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
338 pub struct virtio_video_params_ext {
339     pub base: virtio_video_params,
340     pub resource_type: Le32,
341     pub padding: [u8; 4usize],
342 }
343 #[repr(C)]
344 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
345 pub struct virtio_video_get_params_ext {
346     pub queue_type: Le32,
347     pub padding: [u8; 4usize],
348 }
349 
350 #[repr(C)]
351 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
352 pub struct virtio_video_get_params_ext_resp {
353     pub hdr: virtio_video_cmd_hdr,
354     pub params: virtio_video_params_ext,
355 }
356 
357 #[repr(C)]
358 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
359 pub struct virtio_video_set_params_ext {
360     pub params: virtio_video_params_ext,
361 }
362 
363 pub const VIRTIO_VIDEO_CONTROL_BITRATE: virtio_video_control_type = 1;
364 pub const VIRTIO_VIDEO_CONTROL_PROFILE: virtio_video_control_type = 2;
365 pub const VIRTIO_VIDEO_CONTROL_LEVEL: virtio_video_control_type = 3;
366 pub const VIRTIO_VIDEO_CONTROL_FORCE_KEYFRAME: virtio_video_control_type = 4;
367 pub const VIRTIO_VIDEO_CONTROL_BITRATE_MODE: virtio_video_control_type = 5;
368 pub const VIRTIO_VIDEO_CONTROL_BITRATE_PEAK: virtio_video_control_type = 6;
369 pub const VIRTIO_VIDEO_CONTROL_PREPEND_SPSPPS_TO_IDR: virtio_video_control_type = 7;
370 pub type virtio_video_control_type = u32;
371 #[repr(C)]
372 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
373 pub struct virtio_video_query_control_profile {
374     pub format: Le32,
375     pub padding: [u8; 4usize],
376 }
377 
378 #[repr(C)]
379 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
380 pub struct virtio_video_query_control_level {
381     pub format: Le32,
382     pub padding: [u8; 4usize],
383 }
384 
385 #[repr(C)]
386 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
387 pub struct virtio_video_query_control {
388     pub control: Le32,
389     pub padding: [u8; 4usize],
390 }
391 
392 #[repr(C)]
393 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
394 pub struct virtio_video_query_control_resp_profile {
395     pub num: Le32,
396     pub padding: [u8; 4usize],
397 }
398 
399 #[repr(C)]
400 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
401 pub struct virtio_video_query_control_resp_level {
402     pub num: Le32,
403     pub padding: [u8; 4usize],
404 }
405 
406 #[repr(C)]
407 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
408 pub struct virtio_video_query_control_resp {
409     pub hdr: virtio_video_cmd_hdr,
410 }
411 
412 #[repr(C)]
413 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
414 pub struct virtio_video_get_control {
415     pub control: Le32,
416     pub padding: [u8; 4usize],
417 }
418 
419 #[repr(C)]
420 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
421 pub struct virtio_video_control_val_bitrate {
422     pub bitrate: Le32,
423     pub padding: [u8; 4usize],
424 }
425 
426 #[repr(C)]
427 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
428 pub struct virtio_video_control_val_bitrate_peak {
429     pub bitrate_peak: Le32,
430     pub padding: [u8; 4usize],
431 }
432 
433 #[repr(C)]
434 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
435 pub struct virtio_video_control_val_bitrate_mode {
436     pub bitrate_mode: Le32,
437     pub padding: [u8; 4usize],
438 }
439 
440 #[repr(C)]
441 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
442 pub struct virtio_video_control_val_profile {
443     pub profile: Le32,
444     pub padding: [u8; 4usize],
445 }
446 
447 #[repr(C)]
448 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
449 pub struct virtio_video_control_val_level {
450     pub level: Le32,
451     pub padding: [u8; 4usize],
452 }
453 
454 #[repr(C)]
455 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
456 pub struct virtio_video_control_val_prepend_spspps_to_idr {
457     pub prepend_spspps_to_idr: Le32,
458     pub padding: [u8; 4usize],
459 }
460 
461 #[repr(C)]
462 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
463 pub struct virtio_video_get_control_resp {
464     pub hdr: virtio_video_cmd_hdr,
465 }
466 
467 #[repr(C)]
468 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
469 pub struct virtio_video_set_control {
470     pub control: Le32,
471     pub padding: [u8; 4usize],
472 }
473 
474 #[repr(C)]
475 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
476 pub struct virtio_video_set_control_resp {
477     pub hdr: virtio_video_cmd_hdr,
478 }
479 
480 pub const VIRTIO_VIDEO_EVENT_ERROR: virtio_video_event_type = 256;
481 pub const VIRTIO_VIDEO_EVENT_DECODER_RESOLUTION_CHANGED: virtio_video_event_type = 512;
482 pub type virtio_video_event_type = u32;
483 #[repr(C)]
484 #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
485 pub struct virtio_video_event {
486     pub event_type: Le32,
487     pub stream_id: Le32,
488 }
489