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