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