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