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