1 // Copyright 2023 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 //! Wrappers around AV1 `VABuffer` types. 6 7 use crate::bindings; 8 9 /// Wrapper over the `seq_fields` bindgen field in `VADecPictureParameterBufferAV1`. 10 pub struct AV1SeqFields(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_1); 11 12 impl AV1SeqFields { 13 /// Creates the bindgen field 14 #[allow(clippy::too_many_arguments)] new( still_picture: u32, use_128x128_superblock: u32, enable_filter_intra: u32, enable_intra_edge_filter: u32, enable_interintra_compound: u32, enable_masked_compound: u32, enable_dual_filter: u32, enable_order_hint: u32, enable_jnt_comp: u32, enable_cdef: u32, mono_chrome: u32, color_range: u32, subsampling_x: u32, subsampling_y: u32, chroma_sample_position: u32, film_grain_params_present: u32, ) -> Self15 pub fn new( 16 still_picture: u32, 17 use_128x128_superblock: u32, 18 enable_filter_intra: u32, 19 enable_intra_edge_filter: u32, 20 enable_interintra_compound: u32, 21 enable_masked_compound: u32, 22 enable_dual_filter: u32, 23 enable_order_hint: u32, 24 enable_jnt_comp: u32, 25 enable_cdef: u32, 26 mono_chrome: u32, 27 color_range: u32, 28 subsampling_x: u32, 29 subsampling_y: u32, 30 chroma_sample_position: u32, 31 film_grain_params_present: u32, 32 ) -> Self { 33 let _bitfield_1 = 34 bindings::_VADecPictureParameterBufferAV1__bindgen_ty_1__bindgen_ty_1::new_bitfield_1( 35 still_picture, 36 use_128x128_superblock, 37 enable_filter_intra, 38 enable_intra_edge_filter, 39 enable_interintra_compound, 40 enable_masked_compound, 41 enable_dual_filter, 42 enable_order_hint, 43 enable_jnt_comp, 44 enable_cdef, 45 mono_chrome, 46 color_range, 47 subsampling_x, 48 subsampling_y, 49 chroma_sample_position, 50 film_grain_params_present, 51 0, 52 ); 53 54 Self(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_1 { 55 fields: bindings::_VADecPictureParameterBufferAV1__bindgen_ty_1__bindgen_ty_1 { 56 _bitfield_align_1: Default::default(), 57 _bitfield_1, 58 }, 59 }) 60 } 61 } 62 63 /// Wrapper over the `segment_info_fields` bindgen field in `VASegmentationStructAV1`. 64 pub struct AV1SegmentInfoFields(bindings::_VASegmentationStructAV1__bindgen_ty_1); 65 66 impl AV1SegmentInfoFields { 67 /// Creates the bindgen field new(enabled: u32, update_map: u32, temporal_update: u32, update_data: u32) -> Self68 pub fn new(enabled: u32, update_map: u32, temporal_update: u32, update_data: u32) -> Self { 69 let _bitfield_1 = 70 bindings::_VASegmentationStructAV1__bindgen_ty_1__bindgen_ty_1::new_bitfield_1( 71 enabled, 72 update_map, 73 temporal_update, 74 update_data, 75 0, 76 ); 77 78 Self(bindings::_VASegmentationStructAV1__bindgen_ty_1 { 79 bits: bindings::_VASegmentationStructAV1__bindgen_ty_1__bindgen_ty_1 { 80 _bitfield_align_1: Default::default(), 81 _bitfield_1, 82 }, 83 }) 84 } 85 } 86 87 /// Wrapper over the `seg_info` bindgen field in `VADecPictureParameterBufferAV1`. 88 pub struct AV1Segmentation(bindings::VASegmentationStructAV1); 89 90 impl AV1Segmentation { 91 /// Creates the bindgen field new( segment_info_fields: &AV1SegmentInfoFields, feature_data: [[i16; 8usize]; 8usize], feature_mask: [u8; 8usize], ) -> Self92 pub fn new( 93 segment_info_fields: &AV1SegmentInfoFields, 94 feature_data: [[i16; 8usize]; 8usize], 95 feature_mask: [u8; 8usize], 96 ) -> Self { 97 let segment_info_fields = segment_info_fields.0; 98 Self(bindings::VASegmentationStructAV1 { 99 segment_info_fields, 100 feature_data, 101 feature_mask, 102 va_reserved: Default::default(), 103 }) 104 } 105 } 106 107 /// Wrapper over the `film_grain_fields` bindgen field in `VADecPictureParameterBufferAV1`. 108 pub struct AV1FilmGrainFields(bindings::_VAFilmGrainStructAV1__bindgen_ty_1); 109 110 impl AV1FilmGrainFields { 111 /// Creates the bindgen field 112 #[allow(clippy::too_many_arguments)] new( apply_grain: u32, chroma_scaling_from_luma: u32, grain_scaling_minus_8: u32, ar_coeff_lag: u32, ar_coeff_shift_minus_6: u32, grain_scale_shift: u32, overlap_flag: u32, clip_to_restricted_range: u32, ) -> Self113 pub fn new( 114 apply_grain: u32, 115 chroma_scaling_from_luma: u32, 116 grain_scaling_minus_8: u32, 117 ar_coeff_lag: u32, 118 ar_coeff_shift_minus_6: u32, 119 grain_scale_shift: u32, 120 overlap_flag: u32, 121 clip_to_restricted_range: u32, 122 ) -> Self { 123 let _bitfield_1 = 124 bindings::_VAFilmGrainStructAV1__bindgen_ty_1__bindgen_ty_1::new_bitfield_1( 125 apply_grain, 126 chroma_scaling_from_luma, 127 grain_scaling_minus_8, 128 ar_coeff_lag, 129 ar_coeff_shift_minus_6, 130 grain_scale_shift, 131 overlap_flag, 132 clip_to_restricted_range, 133 0, 134 ); 135 Self(bindings::_VAFilmGrainStructAV1__bindgen_ty_1 { 136 bits: bindings::_VAFilmGrainStructAV1__bindgen_ty_1__bindgen_ty_1 { 137 _bitfield_align_1: Default::default(), 138 _bitfield_1, 139 }, 140 }) 141 } 142 } 143 144 /// Wrapper over the `film_grain_info` bindgen field in `VADecPictureParameterBufferAV1`. 145 pub struct AV1FilmGrain(bindings::VAFilmGrainStructAV1); 146 147 impl AV1FilmGrain { 148 /// Creates the wrapper 149 #[allow(clippy::too_many_arguments)] new( film_grain_info_fields: &AV1FilmGrainFields, grain_seed: u16, num_y_points: u8, point_y_value: [u8; 14usize], point_y_scaling: [u8; 14usize], num_cb_points: u8, point_cb_value: [u8; 10usize], point_cb_scaling: [u8; 10usize], num_cr_points: u8, point_cr_value: [u8; 10usize], point_cr_scaling: [u8; 10usize], ar_coeffs_y: [i8; 24usize], ar_coeffs_cb: [i8; 25usize], ar_coeffs_cr: [i8; 25usize], cb_mult: u8, cb_luma_mult: u8, cb_offset: u16, cr_mult: u8, cr_luma_mult: u8, cr_offset: u16, ) -> Self150 pub fn new( 151 film_grain_info_fields: &AV1FilmGrainFields, 152 grain_seed: u16, 153 num_y_points: u8, 154 point_y_value: [u8; 14usize], 155 point_y_scaling: [u8; 14usize], 156 num_cb_points: u8, 157 point_cb_value: [u8; 10usize], 158 point_cb_scaling: [u8; 10usize], 159 num_cr_points: u8, 160 point_cr_value: [u8; 10usize], 161 point_cr_scaling: [u8; 10usize], 162 ar_coeffs_y: [i8; 24usize], 163 ar_coeffs_cb: [i8; 25usize], 164 ar_coeffs_cr: [i8; 25usize], 165 cb_mult: u8, 166 cb_luma_mult: u8, 167 cb_offset: u16, 168 cr_mult: u8, 169 cr_luma_mult: u8, 170 cr_offset: u16, 171 ) -> Self { 172 let film_grain_info_fields = film_grain_info_fields.0; 173 Self(bindings::VAFilmGrainStructAV1 { 174 film_grain_info_fields, 175 grain_seed, 176 num_y_points, 177 point_y_value, 178 point_y_scaling, 179 num_cb_points, 180 point_cb_value, 181 point_cb_scaling, 182 num_cr_points, 183 point_cr_value, 184 point_cr_scaling, 185 ar_coeffs_y, 186 ar_coeffs_cb, 187 ar_coeffs_cr, 188 cb_mult, 189 cb_luma_mult, 190 cb_offset, 191 cr_mult, 192 cr_luma_mult, 193 cr_offset, 194 va_reserved: Default::default(), 195 }) 196 } 197 } 198 199 /// Wrapper over the `pic_info_fields` bindgen field in `VADecPictureParameterBufferAV1`. 200 pub struct AV1PicInfoFields(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_2); 201 202 impl AV1PicInfoFields { 203 /// Creates the wrapper 204 #[allow(clippy::too_many_arguments)] new( frame_type: u32, show_frame: u32, showable_frame: u32, error_resilient_mode: u32, disable_cdf_update: u32, allow_screen_content_tools: u32, force_integer_mv: u32, allow_intrabc: u32, use_superres: u32, allow_high_precision_mv: u32, is_motion_mode_switchable: u32, use_ref_frame_mvs: u32, disable_frame_end_update_cdf: u32, uniform_tile_spacing_flag: u32, allow_warped_motion: u32, large_scale_tile: u32, ) -> Self205 pub fn new( 206 frame_type: u32, 207 show_frame: u32, 208 showable_frame: u32, 209 error_resilient_mode: u32, 210 disable_cdf_update: u32, 211 allow_screen_content_tools: u32, 212 force_integer_mv: u32, 213 allow_intrabc: u32, 214 use_superres: u32, 215 allow_high_precision_mv: u32, 216 is_motion_mode_switchable: u32, 217 use_ref_frame_mvs: u32, 218 disable_frame_end_update_cdf: u32, 219 uniform_tile_spacing_flag: u32, 220 allow_warped_motion: u32, 221 large_scale_tile: u32, 222 ) -> Self { 223 let _bitfield_1 = 224 bindings::_VADecPictureParameterBufferAV1__bindgen_ty_2__bindgen_ty_1::new_bitfield_1( 225 frame_type, 226 show_frame, 227 showable_frame, 228 error_resilient_mode, 229 disable_cdf_update, 230 allow_screen_content_tools, 231 force_integer_mv, 232 allow_intrabc, 233 use_superres, 234 allow_high_precision_mv, 235 is_motion_mode_switchable, 236 use_ref_frame_mvs, 237 disable_frame_end_update_cdf, 238 uniform_tile_spacing_flag, 239 allow_warped_motion, 240 large_scale_tile, 241 0, 242 ); 243 Self(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_2 { 244 bits: bindings::_VADecPictureParameterBufferAV1__bindgen_ty_2__bindgen_ty_1 { 245 _bitfield_align_1: Default::default(), 246 _bitfield_1, 247 }, 248 }) 249 } 250 } 251 252 /// Wrapper over the `loop_filter_fields` bindgen field in `VADecPictureParameterBufferAV1`. 253 pub struct AV1LoopFilterFields(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_3); 254 255 impl AV1LoopFilterFields { 256 /// Creates the wrapper new(sharpness_level: u8, mode_ref_delta_enabled: u8, mode_ref_delta_update: u8) -> Self257 pub fn new(sharpness_level: u8, mode_ref_delta_enabled: u8, mode_ref_delta_update: u8) -> Self { 258 let _bitfield_1 = 259 bindings::_VADecPictureParameterBufferAV1__bindgen_ty_3__bindgen_ty_1::new_bitfield_1( 260 sharpness_level, 261 mode_ref_delta_enabled, 262 mode_ref_delta_update, 263 0, 264 ); 265 Self(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_3 { 266 bits: bindings::_VADecPictureParameterBufferAV1__bindgen_ty_3__bindgen_ty_1 { 267 _bitfield_align_1: Default::default(), 268 _bitfield_1, 269 }, 270 }) 271 } 272 } 273 274 /// Wrapper over the `wm` bindgen field in `VADecPictureParameterBufferAV1`. 275 pub struct AV1WarpedMotionParams(bindings::VAWarpedMotionParamsAV1); 276 277 impl AV1WarpedMotionParams { 278 /// Creates the wrapper new( wmtype: bindings::VAAV1TransformationType::Type, wmmat: [i32; 8], invalid: u8, ) -> Self279 pub fn new( 280 wmtype: bindings::VAAV1TransformationType::Type, 281 wmmat: [i32; 8], 282 invalid: u8, 283 ) -> Self { 284 Self(bindings::VAWarpedMotionParamsAV1 { 285 wmtype, 286 wmmat, 287 invalid, 288 va_reserved: Default::default(), 289 }) 290 } 291 } 292 293 /// Wrapper over the `loop_restoration_fields` bindgen field in `VADecPictureParameterBufferAV1`. 294 pub struct AV1LoopRestorationFields(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_6); 295 296 impl AV1LoopRestorationFields { 297 /// Creates the wrapper new( yframe_restoration_type: u16, cbframe_restoration_type: u16, crframe_restoration_type: u16, lr_unit_shift: u16, lr_uv_shift: u16, ) -> Self298 pub fn new( 299 yframe_restoration_type: u16, 300 cbframe_restoration_type: u16, 301 crframe_restoration_type: u16, 302 lr_unit_shift: u16, 303 lr_uv_shift: u16, 304 ) -> Self { 305 let _bitfield_1 = 306 bindings::_VADecPictureParameterBufferAV1__bindgen_ty_6__bindgen_ty_1::new_bitfield_1( 307 yframe_restoration_type, 308 cbframe_restoration_type, 309 crframe_restoration_type, 310 lr_unit_shift, 311 lr_uv_shift, 312 0, 313 ); 314 Self(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_6 { 315 bits: bindings::_VADecPictureParameterBufferAV1__bindgen_ty_6__bindgen_ty_1 { 316 _bitfield_align_1: Default::default(), 317 _bitfield_1, 318 }, 319 }) 320 } 321 } 322 323 /// Wrapper over the `mode_control_fields` bindgen field in `VADecPictureParameterBufferAV1`. 324 pub struct AV1ModeControlFields(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_5); 325 326 impl AV1ModeControlFields { 327 /// Creates the wrapper 328 #[allow(clippy::too_many_arguments)] new( delta_q_present_flag: u32, log2_delta_q_res: u32, delta_lf_present_flag: u32, log2_delta_lf_res: u32, delta_lf_multi: u32, tx_mode: u32, reference_select: u32, reduced_tx_set_used: u32, skip_mode_present: u32, ) -> Self329 pub fn new( 330 delta_q_present_flag: u32, 331 log2_delta_q_res: u32, 332 delta_lf_present_flag: u32, 333 log2_delta_lf_res: u32, 334 delta_lf_multi: u32, 335 tx_mode: u32, 336 reference_select: u32, 337 reduced_tx_set_used: u32, 338 skip_mode_present: u32, 339 ) -> Self { 340 let _bitfield_1 = 341 bindings::_VADecPictureParameterBufferAV1__bindgen_ty_5__bindgen_ty_1::new_bitfield_1( 342 delta_q_present_flag, 343 log2_delta_q_res, 344 delta_lf_present_flag, 345 log2_delta_lf_res, 346 delta_lf_multi, 347 tx_mode, 348 reference_select, 349 reduced_tx_set_used, 350 skip_mode_present, 351 0, 352 ); 353 Self(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_5 { 354 bits: bindings::_VADecPictureParameterBufferAV1__bindgen_ty_5__bindgen_ty_1 { 355 _bitfield_align_1: Default::default(), 356 _bitfield_1, 357 }, 358 }) 359 } 360 } 361 362 /// Wrapper over the `qmatrix_fields` bindgen field in `VADecPictureParameterBufferAV1`. 363 pub struct AV1QMatrixFields(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_4); 364 365 impl AV1QMatrixFields { 366 /// Creates the wrapper new(using_qmatrix: u16, qm_y: u16, qm_u: u16, qm_v: u16) -> Self367 pub fn new(using_qmatrix: u16, qm_y: u16, qm_u: u16, qm_v: u16) -> Self { 368 let _bitfield_1 = 369 bindings::_VADecPictureParameterBufferAV1__bindgen_ty_4__bindgen_ty_1::new_bitfield_1( 370 using_qmatrix, 371 qm_y, 372 qm_u, 373 qm_v, 374 0, 375 ); 376 Self(bindings::_VADecPictureParameterBufferAV1__bindgen_ty_4 { 377 bits: bindings::_VADecPictureParameterBufferAV1__bindgen_ty_4__bindgen_ty_1 { 378 _bitfield_align_1: Default::default(), 379 _bitfield_1, 380 }, 381 }) 382 } 383 } 384 385 /// A wrapper over `VADecPictureParameterBufferAV1` FFI type 386 pub struct PictureParameterBufferAV1(Box<bindings::VADecPictureParameterBufferAV1>); 387 388 impl PictureParameterBufferAV1 { 389 /// Creates the wrapper 390 #[allow(clippy::too_many_arguments)] new( profile: u8, order_hint_bits_minus_1: u8, bit_depth_idx: u8, matrix_coefficients: u8, seq_info_fields: &AV1SeqFields, current_frame: bindings::VASurfaceID, current_display_picture: bindings::VASurfaceID, mut anchor_frames_list: Vec<bindings::VASurfaceID>, frame_width_minus1: u16, frame_height_minus1: u16, output_frame_width_in_tiles_minus_1: u16, output_frame_height_in_tiles_minus_1: u16, ref_frame_map: [bindings::VASurfaceID; 8usize], ref_frame_idx: [u8; 7usize], primary_ref_frame: u8, order_hint: u8, seg_info: &AV1Segmentation, film_grain_info: &AV1FilmGrain, tile_cols: u8, tile_rows: u8, width_in_sbs_minus_1: [u16; 63usize], height_in_sbs_minus_1: [u16; 63usize], tile_count_minus_1: u16, context_update_tile_id: u16, pic_info_fields: &AV1PicInfoFields, superres_scale_denominator: u8, interp_filter: u8, filter_level: [u8; 2usize], filter_level_u: u8, filter_level_v: u8, loop_filter_info_fields: &AV1LoopFilterFields, ref_deltas: [i8; 8usize], mode_deltas: [i8; 2usize], base_qindex: u8, y_dc_delta_q: i8, u_dc_delta_q: i8, u_ac_delta_q: i8, v_dc_delta_q: i8, v_ac_delta_q: i8, qmatrix_fields: &AV1QMatrixFields, mode_control_fields: &AV1ModeControlFields, cdef_damping_minus_3: u8, cdef_bits: u8, cdef_y_strengths: [u8; 8usize], cdef_uv_strengths: [u8; 8usize], loop_restoration_fields: &AV1LoopRestorationFields, wm: &[AV1WarpedMotionParams; 7usize], ) -> Self391 pub fn new( 392 profile: u8, 393 order_hint_bits_minus_1: u8, 394 bit_depth_idx: u8, 395 matrix_coefficients: u8, 396 seq_info_fields: &AV1SeqFields, 397 current_frame: bindings::VASurfaceID, 398 current_display_picture: bindings::VASurfaceID, 399 mut anchor_frames_list: Vec<bindings::VASurfaceID>, 400 frame_width_minus1: u16, 401 frame_height_minus1: u16, 402 output_frame_width_in_tiles_minus_1: u16, 403 output_frame_height_in_tiles_minus_1: u16, 404 ref_frame_map: [bindings::VASurfaceID; 8usize], 405 ref_frame_idx: [u8; 7usize], 406 primary_ref_frame: u8, 407 order_hint: u8, 408 seg_info: &AV1Segmentation, 409 film_grain_info: &AV1FilmGrain, 410 tile_cols: u8, 411 tile_rows: u8, 412 width_in_sbs_minus_1: [u16; 63usize], 413 height_in_sbs_minus_1: [u16; 63usize], 414 tile_count_minus_1: u16, 415 context_update_tile_id: u16, 416 pic_info_fields: &AV1PicInfoFields, 417 superres_scale_denominator: u8, 418 interp_filter: u8, 419 filter_level: [u8; 2usize], 420 filter_level_u: u8, 421 filter_level_v: u8, 422 loop_filter_info_fields: &AV1LoopFilterFields, 423 ref_deltas: [i8; 8usize], 424 mode_deltas: [i8; 2usize], 425 base_qindex: u8, 426 y_dc_delta_q: i8, 427 u_dc_delta_q: i8, 428 u_ac_delta_q: i8, 429 v_dc_delta_q: i8, 430 v_ac_delta_q: i8, 431 qmatrix_fields: &AV1QMatrixFields, 432 mode_control_fields: &AV1ModeControlFields, 433 cdef_damping_minus_3: u8, 434 cdef_bits: u8, 435 cdef_y_strengths: [u8; 8usize], 436 cdef_uv_strengths: [u8; 8usize], 437 loop_restoration_fields: &AV1LoopRestorationFields, 438 wm: &[AV1WarpedMotionParams; 7usize], 439 ) -> Self { 440 let seq_info_fields = seq_info_fields.0; 441 let seg_info = seg_info.0; 442 let pic_info_fields = pic_info_fields.0; 443 let loop_filter_info_fields = loop_filter_info_fields.0; 444 let qmatrix_fields = qmatrix_fields.0; 445 let mode_control_fields = mode_control_fields.0; 446 447 let anchor_frames_num = anchor_frames_list.len() as u8; 448 let anchor_frames_list = anchor_frames_list.as_mut_ptr(); 449 450 let film_grain_info = film_grain_info.0; 451 let loop_restoration_fields = loop_restoration_fields.0; 452 453 // Will not panic, as the arrays are the same size. 454 let wm = wm 455 .iter() 456 .map(|wm| wm.0) 457 .collect::<Vec<_>>() 458 .try_into() 459 .unwrap(); 460 461 Self(Box::new(bindings::VADecPictureParameterBufferAV1 { 462 profile, 463 order_hint_bits_minus_1, 464 bit_depth_idx, 465 matrix_coefficients, 466 seq_info_fields, 467 current_frame, 468 current_display_picture, 469 anchor_frames_num, 470 anchor_frames_list, 471 frame_width_minus1, 472 frame_height_minus1, 473 output_frame_width_in_tiles_minus_1, 474 output_frame_height_in_tiles_minus_1, 475 ref_frame_map, 476 ref_frame_idx, 477 primary_ref_frame, 478 order_hint, 479 seg_info, 480 film_grain_info, 481 tile_cols, 482 tile_rows, 483 width_in_sbs_minus_1, 484 height_in_sbs_minus_1, 485 tile_count_minus_1, 486 context_update_tile_id, 487 pic_info_fields, 488 superres_scale_denominator, 489 interp_filter, 490 filter_level, 491 filter_level_u, 492 filter_level_v, 493 loop_filter_info_fields, 494 ref_deltas, 495 mode_deltas, 496 base_qindex, 497 y_dc_delta_q, 498 u_dc_delta_q, 499 u_ac_delta_q, 500 v_dc_delta_q, 501 v_ac_delta_q, 502 qmatrix_fields, 503 mode_control_fields, 504 cdef_damping_minus_3, 505 cdef_bits, 506 cdef_y_strengths, 507 cdef_uv_strengths, 508 loop_restoration_fields, 509 wm, 510 va_reserved: Default::default(), 511 })) 512 } 513 inner_mut(&mut self) -> &mut bindings::VADecPictureParameterBufferAV1514 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VADecPictureParameterBufferAV1 { 515 self.0.as_mut() 516 } 517 } 518 519 /// A wrapper over an array of the `VASliceParameterBufferAV1` FFI type. This 520 /// allows for passing all tile parameters in a single call if multiple tiles 521 /// are present in the tile group. 522 #[derive(Default)] 523 pub struct SliceParameterBufferAV1(Vec<bindings::VASliceParameterBufferAV1>); 524 525 impl SliceParameterBufferAV1 { 526 /// Creates the wrapper new() -> Self527 pub fn new() -> Self { 528 Default::default() 529 } 530 531 /// Adds a slice parameter to the wrapper 532 #[allow(clippy::too_many_arguments)] add_slice_parameter( &mut self, slice_data_size: u32, slice_data_offset: u32, slice_data_flag: u32, tile_row: u16, tile_column: u16, tg_start: u16, tg_end: u16, anchor_frame_idx: u8, tile_idx_in_tile_list: u16, )533 pub fn add_slice_parameter( 534 &mut self, 535 slice_data_size: u32, 536 slice_data_offset: u32, 537 slice_data_flag: u32, 538 tile_row: u16, 539 tile_column: u16, 540 tg_start: u16, 541 tg_end: u16, 542 anchor_frame_idx: u8, 543 tile_idx_in_tile_list: u16, 544 ) { 545 self.0.push(bindings::VASliceParameterBufferAV1 { 546 slice_data_size, 547 slice_data_offset, 548 slice_data_flag, 549 tile_row, 550 tile_column, 551 tg_start, 552 tg_end, 553 anchor_frame_idx, 554 tile_idx_in_tile_list, 555 va_reserved: Default::default(), 556 }); 557 } 558 inner_mut(&mut self) -> &mut Vec<bindings::VASliceParameterBufferAV1>559 pub(crate) fn inner_mut(&mut self) -> &mut Vec<bindings::VASliceParameterBufferAV1> { 560 self.0.as_mut() 561 } 562 } 563 564 pub struct AV1EncSeqFields(bindings::_VAEncSequenceParameterBufferAV1__bindgen_ty_1); 565 566 impl AV1EncSeqFields { new( still_picture: bool, use_128x128_superblock: bool, enable_filter_intra: bool, enable_intra_edge_filter: bool, enable_interintra_compound: bool, enable_masked_compound: bool, enable_warped_motion: bool, enable_dual_filter: bool, enable_order_hint: bool, enable_jnt_comp: bool, enable_ref_frame_mvs: bool, enable_superres: bool, enable_cdef: bool, enable_restoration: bool, bit_depth_minus8: u32, subsampling_x: bool, subsampling_y: bool, mono_chrome: bool, ) -> Self567 pub fn new( 568 still_picture: bool, 569 use_128x128_superblock: bool, 570 enable_filter_intra: bool, 571 enable_intra_edge_filter: bool, 572 enable_interintra_compound: bool, 573 enable_masked_compound: bool, 574 enable_warped_motion: bool, 575 enable_dual_filter: bool, 576 enable_order_hint: bool, 577 enable_jnt_comp: bool, 578 enable_ref_frame_mvs: bool, 579 enable_superres: bool, 580 enable_cdef: bool, 581 enable_restoration: bool, 582 bit_depth_minus8: u32, 583 subsampling_x: bool, 584 subsampling_y: bool, 585 mono_chrome: bool, 586 ) -> Self { 587 let still_picture = still_picture as u32; 588 let use_128x128_superblock = use_128x128_superblock as u32; 589 let enable_filter_intra = enable_filter_intra as u32; 590 let enable_intra_edge_filter = enable_intra_edge_filter as u32; 591 let enable_interintra_compound = enable_interintra_compound as u32; 592 let enable_masked_compound = enable_masked_compound as u32; 593 let enable_warped_motion = enable_warped_motion as u32; 594 let enable_dual_filter = enable_dual_filter as u32; 595 let enable_order_hint = enable_order_hint as u32; 596 let enable_jnt_comp = enable_jnt_comp as u32; 597 let enable_ref_frame_mvs = enable_ref_frame_mvs as u32; 598 let enable_superres = enable_superres as u32; 599 let enable_cdef = enable_cdef as u32; 600 let enable_restoration = enable_restoration as u32; 601 let subsampling_x = subsampling_x as u32; 602 let subsampling_y = subsampling_y as u32; 603 let mono_chrome = mono_chrome as u32; 604 605 let _bitfield_1 = 606 bindings::_VAEncSequenceParameterBufferAV1__bindgen_ty_1__bindgen_ty_1::new_bitfield_1( 607 still_picture, 608 use_128x128_superblock, 609 enable_filter_intra, 610 enable_intra_edge_filter, 611 enable_interintra_compound, 612 enable_masked_compound, 613 enable_warped_motion, 614 enable_dual_filter, 615 enable_order_hint, 616 enable_jnt_comp, 617 enable_ref_frame_mvs, 618 enable_superres, 619 enable_cdef, 620 enable_restoration, 621 bit_depth_minus8, 622 subsampling_x, 623 subsampling_y, 624 mono_chrome, 625 Default::default(), 626 ); 627 628 Self(bindings::_VAEncSequenceParameterBufferAV1__bindgen_ty_1 { 629 bits: bindings::_VAEncSequenceParameterBufferAV1__bindgen_ty_1__bindgen_ty_1 { 630 _bitfield_align_1: Default::default(), 631 _bitfield_1, 632 }, 633 }) 634 } 635 } 636 637 #[derive(Default)] 638 pub struct EncSequenceParameterBufferAV1(Box<bindings::VAEncSequenceParameterBufferAV1>); 639 640 impl EncSequenceParameterBufferAV1 { new( seq_profile: u8, seq_level_idx: u8, seq_tier: u8, hierarchical_flag: u8, intra_period: u32, ip_period: u32, bits_per_second: u32, seq_fields: &AV1EncSeqFields, order_hint_bits_minus_1: u8, ) -> Self641 pub fn new( 642 seq_profile: u8, 643 seq_level_idx: u8, 644 seq_tier: u8, 645 hierarchical_flag: u8, 646 intra_period: u32, 647 ip_period: u32, 648 bits_per_second: u32, 649 seq_fields: &AV1EncSeqFields, 650 order_hint_bits_minus_1: u8, 651 ) -> Self { 652 let seq_fields = seq_fields.0; 653 654 Self(Box::new(bindings::_VAEncSequenceParameterBufferAV1 { 655 seq_profile, 656 seq_level_idx, 657 seq_tier, 658 hierarchical_flag, 659 intra_period, 660 ip_period, 661 bits_per_second, 662 seq_fields, 663 order_hint_bits_minus_1, 664 ..Default::default() 665 })) 666 } 667 inner_mut(&mut self) -> &mut bindings::VAEncSequenceParameterBufferAV1668 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAEncSequenceParameterBufferAV1 { 669 &mut self.0 670 } 671 } 672 673 #[derive(Default)] 674 pub struct RefFrameCtrlAV1(bindings::VARefFrameCtrlAV1); 675 676 impl RefFrameCtrlAV1 { new( search_idx0: u32, search_idx1: u32, search_idx2: u32, search_idx3: u32, search_idx4: u32, search_idx5: u32, search_idx6: u32, ) -> Self677 pub fn new( 678 search_idx0: u32, 679 search_idx1: u32, 680 search_idx2: u32, 681 search_idx3: u32, 682 search_idx4: u32, 683 search_idx5: u32, 684 search_idx6: u32, 685 ) -> Self { 686 let _bitfield_1 = bindings::VARefFrameCtrlAV1__bindgen_ty_1::new_bitfield_1( 687 search_idx0, 688 search_idx1, 689 search_idx2, 690 search_idx3, 691 search_idx4, 692 search_idx5, 693 search_idx6, 694 Default::default(), 695 ); 696 697 Self(bindings::VARefFrameCtrlAV1 { 698 fields: bindings::VARefFrameCtrlAV1__bindgen_ty_1 { 699 _bitfield_align_1: Default::default(), 700 _bitfield_1, 701 }, 702 }) 703 } 704 } 705 706 #[derive(Default)] 707 pub struct AV1EncPictureFlags(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_1); 708 709 impl AV1EncPictureFlags { new( frame_type: u32, error_resilient_mode: bool, disable_cdf_update: bool, use_superres: bool, allow_high_precision_mv: bool, use_ref_frame_mvs: bool, disable_frame_end_update_cdf: bool, reduced_tx_set: bool, enable_frame_obu: bool, long_term_reference: bool, disable_frame_recon: bool, allow_intrabc: bool, palette_mode_enable: bool, allow_screen_content_tools: bool, force_integer_mv: bool, ) -> Self710 pub fn new( 711 frame_type: u32, 712 error_resilient_mode: bool, 713 disable_cdf_update: bool, 714 use_superres: bool, 715 allow_high_precision_mv: bool, 716 use_ref_frame_mvs: bool, 717 disable_frame_end_update_cdf: bool, 718 reduced_tx_set: bool, 719 enable_frame_obu: bool, 720 long_term_reference: bool, 721 disable_frame_recon: bool, 722 allow_intrabc: bool, 723 palette_mode_enable: bool, 724 allow_screen_content_tools: bool, 725 force_integer_mv: bool, 726 ) -> Self { 727 let error_resilient_mode = error_resilient_mode as u32; 728 let disable_cdf_update = disable_cdf_update as u32; 729 let use_superres = use_superres as u32; 730 let allow_high_precision_mv = allow_high_precision_mv as u32; 731 let use_ref_frame_mvs = use_ref_frame_mvs as u32; 732 let disable_frame_end_update_cdf = disable_frame_end_update_cdf as u32; 733 let reduced_tx_set = reduced_tx_set as u32; 734 let enable_frame_obu = enable_frame_obu as u32; 735 let long_term_reference = long_term_reference as u32; 736 let disable_frame_recon = disable_frame_recon as u32; 737 let allow_intrabc = allow_intrabc as u32; 738 let palette_mode_enable = palette_mode_enable as u32; 739 let allow_screen_content_tools = allow_screen_content_tools as u32; 740 let force_integer_mv = force_integer_mv as u32; 741 742 let _bitfield_1 = 743 bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_1__bindgen_ty_1::new_bitfield_1( 744 frame_type, 745 error_resilient_mode, 746 disable_cdf_update, 747 use_superres, 748 allow_high_precision_mv, 749 use_ref_frame_mvs, 750 disable_frame_end_update_cdf, 751 reduced_tx_set, 752 enable_frame_obu, 753 long_term_reference, 754 disable_frame_recon, 755 allow_intrabc, 756 palette_mode_enable, 757 allow_screen_content_tools, 758 force_integer_mv, 759 Default::default(), 760 ); 761 762 Self(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_1 { 763 bits: bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_1__bindgen_ty_1 { 764 _bitfield_align_1: Default::default(), 765 _bitfield_1, 766 }, 767 }) 768 } 769 } 770 771 #[derive(Default)] 772 pub struct AV1EncLoopFilterFlags(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_2); 773 774 impl AV1EncLoopFilterFlags { new( sharpness_level: u8, mode_ref_delta_enabled: bool, mode_ref_delta_update: bool, ) -> Self775 pub fn new( 776 sharpness_level: u8, 777 mode_ref_delta_enabled: bool, 778 mode_ref_delta_update: bool, 779 ) -> Self { 780 let mode_ref_delta_enabled = mode_ref_delta_enabled as u8; 781 let mode_ref_delta_update = mode_ref_delta_update as u8; 782 783 let _bitfield_1 = 784 bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_2__bindgen_ty_1::new_bitfield_1( 785 sharpness_level, 786 mode_ref_delta_enabled, 787 mode_ref_delta_update, 788 Default::default(), 789 ); 790 791 Self(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_2 { 792 bits: bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_2__bindgen_ty_1 { 793 _bitfield_align_1: Default::default(), 794 _bitfield_1, 795 }, 796 }) 797 } 798 } 799 800 #[derive(Default)] 801 pub struct AV1EncQMatrixFlags(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_3); 802 803 impl AV1EncQMatrixFlags { new(using_qmatrix: bool, qm_y: u16, qm_u: u16, qm_v: u16) -> Self804 pub fn new(using_qmatrix: bool, qm_y: u16, qm_u: u16, qm_v: u16) -> Self { 805 let using_qmatrix = using_qmatrix as u16; 806 807 let _bitfield_1 = 808 bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_3__bindgen_ty_1::new_bitfield_1( 809 using_qmatrix, 810 qm_y, 811 qm_u, 812 qm_v, 813 Default::default(), 814 ); 815 816 Self(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_3 { 817 bits: bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_3__bindgen_ty_1 { 818 _bitfield_1, 819 _bitfield_align_1: Default::default(), 820 }, 821 }) 822 } 823 } 824 825 #[derive(Default)] 826 pub struct AV1EncModeControlFlags(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_4); 827 828 impl AV1EncModeControlFlags { new( delta_q_present: bool, delta_q_res: u32, delta_lf_present: bool, delta_lf_res: u32, delta_lf_multi: bool, tx_mode: u32, reference_mode: u32, skip_mode_present: bool, ) -> Self829 pub fn new( 830 delta_q_present: bool, 831 delta_q_res: u32, 832 delta_lf_present: bool, 833 delta_lf_res: u32, 834 delta_lf_multi: bool, 835 tx_mode: u32, 836 reference_mode: u32, 837 skip_mode_present: bool, 838 ) -> Self { 839 let delta_q_present = delta_q_present as u32; 840 let delta_lf_present = delta_lf_present as u32; 841 let delta_lf_multi = delta_lf_multi as u32; 842 let skip_mode_present = skip_mode_present as u32; 843 844 let _bitfield_1 = 845 bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_4__bindgen_ty_1::new_bitfield_1( 846 delta_q_present, 847 delta_q_res, 848 delta_lf_present, 849 delta_lf_res, 850 delta_lf_multi, 851 tx_mode, 852 reference_mode, 853 skip_mode_present, 854 Default::default(), 855 ); 856 857 Self(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_4 { 858 bits: bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_4__bindgen_ty_1 { 859 _bitfield_align_1: Default::default(), 860 _bitfield_1, 861 }, 862 }) 863 } 864 } 865 866 #[derive(Default)] 867 pub struct EncSegParamFlagsAV1(bindings::_VAEncSegParamAV1__bindgen_ty_1); 868 869 impl EncSegParamFlagsAV1 { new( segmentation_enabled: bool, segmentation_update_map: bool, segmentation_temporal_update: bool, ) -> Self870 pub fn new( 871 segmentation_enabled: bool, 872 segmentation_update_map: bool, 873 segmentation_temporal_update: bool, 874 ) -> Self { 875 let segmentation_enabled = segmentation_enabled as u8; 876 let segmentation_update_map = segmentation_update_map as u8; 877 let segmentation_temporal_update = segmentation_temporal_update as u8; 878 879 let _bitfield_1 = bindings::_VAEncSegParamAV1__bindgen_ty_1__bindgen_ty_1::new_bitfield_1( 880 segmentation_enabled, 881 segmentation_update_map, 882 segmentation_temporal_update, 883 Default::default(), 884 ); 885 886 Self(bindings::_VAEncSegParamAV1__bindgen_ty_1 { 887 bits: bindings::_VAEncSegParamAV1__bindgen_ty_1__bindgen_ty_1 { 888 _bitfield_align_1: Default::default(), 889 _bitfield_1, 890 }, 891 }) 892 } 893 } 894 895 #[derive(Default)] 896 pub struct EncSegParamAV1(bindings::VAEncSegParamAV1); 897 898 impl EncSegParamAV1 { new( seg_flags: &EncSegParamFlagsAV1, segment_number: u8, feature_data: [[i16; 8usize]; 8usize], feature_mask: [u8; 8usize], ) -> Self899 pub fn new( 900 seg_flags: &EncSegParamFlagsAV1, 901 segment_number: u8, 902 feature_data: [[i16; 8usize]; 8usize], 903 feature_mask: [u8; 8usize], 904 ) -> Self { 905 let seg_flags = seg_flags.0; 906 907 Self(bindings::_VAEncSegParamAV1 { 908 seg_flags, 909 segment_number, 910 feature_data, 911 feature_mask, 912 va_reserved: Default::default(), 913 }) 914 } 915 } 916 917 pub struct AV1EncLoopRestorationFlags(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_5); 918 919 impl AV1EncLoopRestorationFlags { new( yframe_restoration_type: u16, cbframe_restoration_type: u16, crframe_restoration_type: u16, lr_unit_shift: u16, lr_uv_shift: bool, ) -> Self920 pub fn new( 921 yframe_restoration_type: u16, 922 cbframe_restoration_type: u16, 923 crframe_restoration_type: u16, 924 lr_unit_shift: u16, 925 lr_uv_shift: bool, 926 ) -> Self { 927 let lr_uv_shift = lr_uv_shift as u16; 928 929 let _bitfield_1 = 930 bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_5__bindgen_ty_1::new_bitfield_1( 931 yframe_restoration_type, 932 cbframe_restoration_type, 933 crframe_restoration_type, 934 lr_unit_shift, 935 lr_uv_shift, 936 Default::default(), 937 ); 938 939 Self(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_5 { 940 bits: bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_5__bindgen_ty_1 { 941 _bitfield_align_1: Default::default(), 942 _bitfield_1, 943 }, 944 }) 945 } 946 } 947 948 #[derive(Default, Copy, Clone)] 949 pub struct EncWarpedMotionParamsAV1(bindings::VAEncWarpedMotionParamsAV1); 950 951 impl EncWarpedMotionParamsAV1 { new( wmtype: bindings::VAEncTransformationTypeAV1::Type, wmmat: [i32; 8usize], invalid: u8, ) -> Self952 pub fn new( 953 wmtype: bindings::VAEncTransformationTypeAV1::Type, 954 wmmat: [i32; 8usize], 955 invalid: u8, 956 ) -> Self { 957 Self(bindings::_VAEncWarpedMotionParamsAV1 { 958 wmtype, 959 wmmat, 960 invalid, 961 va_reserved: Default::default(), 962 }) 963 } 964 } 965 966 pub struct AV1EncTileGroupObuHdrInfo(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_6); 967 968 impl AV1EncTileGroupObuHdrInfo { new( obu_extension_flag: bool, obu_has_size_field: bool, temporal_id: u8, spatial_id: u8, ) -> Self969 pub fn new( 970 obu_extension_flag: bool, 971 obu_has_size_field: bool, 972 temporal_id: u8, 973 spatial_id: u8, 974 ) -> Self { 975 let obu_extension_flag = obu_extension_flag as u8; 976 let obu_has_size_field = obu_has_size_field as u8; 977 978 let _bitfield_1 = 979 bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_6__bindgen_ty_1::new_bitfield_1( 980 obu_extension_flag, 981 obu_has_size_field, 982 temporal_id, 983 spatial_id, 984 Default::default(), 985 ); 986 987 Self(bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_6 { 988 bits: bindings::_VAEncPictureParameterBufferAV1__bindgen_ty_6__bindgen_ty_1 { 989 _bitfield_align_1: Default::default(), 990 _bitfield_1, 991 }, 992 }) 993 } 994 } 995 996 #[derive(Default)] 997 pub struct EncPictureParameterBufferAV1(Box<bindings::VAEncPictureParameterBufferAV1>); 998 999 impl EncPictureParameterBufferAV1 { new( frame_width_minus_1: u16, frame_height_minus_1: u16, reconstructed_frame: bindings::VASurfaceID, coded_buf: bindings::VABufferID, reference_frames: [bindings::VASurfaceID; 8usize], ref_frame_idx: [u8; 7usize], hierarchical_level_plus1: u8, primary_ref_frame: u8, order_hint: u8, refresh_frame_flags: u8, ref_frame_ctrl_l0: &RefFrameCtrlAV1, ref_frame_ctrl_l1: &RefFrameCtrlAV1, picture_flags: &AV1EncPictureFlags, seg_id_block_size: u8, num_tile_groups_minus1: u8, temporal_id: u8, filter_level: [u8; 2usize], filter_level_u: u8, filter_level_v: u8, loop_filter_flags: &AV1EncLoopFilterFlags, superres_scale_denominator: u8, interpolation_filter: u8, ref_deltas: [i8; 8usize], mode_deltas: [i8; 2usize], base_qindex: u8, y_dc_delta_q: i8, u_dc_delta_q: i8, u_ac_delta_q: i8, v_dc_delta_q: i8, v_ac_delta_q: i8, min_base_qindex: u8, max_base_qindex: u8, qmatrix_flags: &AV1EncQMatrixFlags, mode_control_flags: &AV1EncModeControlFlags, segments: &EncSegParamAV1, tile_cols: u8, tile_rows: u8, width_in_sbs_minus_1: [u16; 63usize], height_in_sbs_minus_1: [u16; 63usize], context_update_tile_id: u16, cdef_damping_minus_3: u8, cdef_bits: u8, cdef_y_strengths: [u8; 8usize], cdef_uv_strengths: [u8; 8usize], loop_restoration_flags: &AV1EncLoopRestorationFlags, wm: [EncWarpedMotionParamsAV1; 7usize], bit_offset_qindex: u32, bit_offset_segmentation: u32, bit_offset_loopfilter_params: u32, bit_offset_cdef_params: u32, size_in_bits_cdef_params: u32, byte_offset_frame_hdr_obu_size: u32, size_in_bits_frame_hdr_obu: u32, tile_group_obu_hdr_info: &AV1EncTileGroupObuHdrInfo, number_skip_frames: u8, skip_frames_reduced_size: i32, ) -> Self1000 pub fn new( 1001 frame_width_minus_1: u16, 1002 frame_height_minus_1: u16, 1003 reconstructed_frame: bindings::VASurfaceID, 1004 coded_buf: bindings::VABufferID, 1005 reference_frames: [bindings::VASurfaceID; 8usize], 1006 ref_frame_idx: [u8; 7usize], 1007 hierarchical_level_plus1: u8, 1008 primary_ref_frame: u8, 1009 order_hint: u8, 1010 refresh_frame_flags: u8, 1011 ref_frame_ctrl_l0: &RefFrameCtrlAV1, 1012 ref_frame_ctrl_l1: &RefFrameCtrlAV1, 1013 picture_flags: &AV1EncPictureFlags, 1014 seg_id_block_size: u8, 1015 num_tile_groups_minus1: u8, 1016 temporal_id: u8, 1017 filter_level: [u8; 2usize], 1018 filter_level_u: u8, 1019 filter_level_v: u8, 1020 loop_filter_flags: &AV1EncLoopFilterFlags, 1021 superres_scale_denominator: u8, 1022 interpolation_filter: u8, 1023 ref_deltas: [i8; 8usize], 1024 mode_deltas: [i8; 2usize], 1025 base_qindex: u8, 1026 y_dc_delta_q: i8, 1027 u_dc_delta_q: i8, 1028 u_ac_delta_q: i8, 1029 v_dc_delta_q: i8, 1030 v_ac_delta_q: i8, 1031 min_base_qindex: u8, 1032 max_base_qindex: u8, 1033 qmatrix_flags: &AV1EncQMatrixFlags, 1034 mode_control_flags: &AV1EncModeControlFlags, 1035 segments: &EncSegParamAV1, 1036 tile_cols: u8, 1037 tile_rows: u8, 1038 width_in_sbs_minus_1: [u16; 63usize], 1039 height_in_sbs_minus_1: [u16; 63usize], 1040 context_update_tile_id: u16, 1041 cdef_damping_minus_3: u8, 1042 cdef_bits: u8, 1043 cdef_y_strengths: [u8; 8usize], 1044 cdef_uv_strengths: [u8; 8usize], 1045 loop_restoration_flags: &AV1EncLoopRestorationFlags, 1046 wm: [EncWarpedMotionParamsAV1; 7usize], 1047 bit_offset_qindex: u32, 1048 bit_offset_segmentation: u32, 1049 bit_offset_loopfilter_params: u32, 1050 bit_offset_cdef_params: u32, 1051 size_in_bits_cdef_params: u32, 1052 byte_offset_frame_hdr_obu_size: u32, 1053 size_in_bits_frame_hdr_obu: u32, 1054 tile_group_obu_hdr_info: &AV1EncTileGroupObuHdrInfo, 1055 number_skip_frames: u8, 1056 skip_frames_reduced_size: i32, 1057 ) -> Self { 1058 let ref_frame_ctrl_l0 = ref_frame_ctrl_l0.0; 1059 let ref_frame_ctrl_l1 = ref_frame_ctrl_l1.0; 1060 let picture_flags = picture_flags.0; 1061 let loop_filter_flags = loop_filter_flags.0; 1062 let qmatrix_flags = qmatrix_flags.0; 1063 let mode_control_flags = mode_control_flags.0; 1064 let segments = segments.0; 1065 let loop_restoration_flags = loop_restoration_flags.0; 1066 let wm = wm.map(|e| e.0); 1067 let tile_group_obu_hdr_info = tile_group_obu_hdr_info.0; 1068 1069 Self(Box::new(bindings::_VAEncPictureParameterBufferAV1 { 1070 frame_width_minus_1, 1071 frame_height_minus_1, 1072 reconstructed_frame, 1073 coded_buf, 1074 reference_frames, 1075 ref_frame_idx, 1076 hierarchical_level_plus1, 1077 primary_ref_frame, 1078 order_hint, 1079 refresh_frame_flags, 1080 ref_frame_ctrl_l0, 1081 ref_frame_ctrl_l1, 1082 picture_flags, 1083 seg_id_block_size, 1084 num_tile_groups_minus1, 1085 temporal_id, 1086 filter_level, 1087 filter_level_u, 1088 filter_level_v, 1089 loop_filter_flags, 1090 superres_scale_denominator, 1091 interpolation_filter, 1092 ref_deltas, 1093 mode_deltas, 1094 base_qindex, 1095 y_dc_delta_q, 1096 u_dc_delta_q, 1097 u_ac_delta_q, 1098 v_dc_delta_q, 1099 v_ac_delta_q, 1100 min_base_qindex, 1101 max_base_qindex, 1102 qmatrix_flags, 1103 mode_control_flags, 1104 segments, 1105 tile_cols, 1106 tile_rows, 1107 width_in_sbs_minus_1, 1108 height_in_sbs_minus_1, 1109 context_update_tile_id, 1110 cdef_damping_minus_3, 1111 cdef_bits, 1112 cdef_y_strengths, 1113 cdef_uv_strengths, 1114 loop_restoration_flags, 1115 wm, 1116 bit_offset_qindex, 1117 bit_offset_segmentation, 1118 bit_offset_loopfilter_params, 1119 bit_offset_cdef_params, 1120 size_in_bits_cdef_params, 1121 byte_offset_frame_hdr_obu_size, 1122 size_in_bits_frame_hdr_obu, 1123 tile_group_obu_hdr_info, 1124 number_skip_frames, 1125 skip_frames_reduced_size, 1126 ..Default::default() 1127 })) 1128 } 1129 inner_mut(&mut self) -> &mut bindings::VAEncPictureParameterBufferAV11130 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAEncPictureParameterBufferAV1 { 1131 &mut self.0 1132 } 1133 } 1134 1135 pub struct EncTileGroupBufferAV1(Box<bindings::VAEncTileGroupBufferAV1>); 1136 1137 impl EncTileGroupBufferAV1 { new(tg_start: u8, tg_end: u8) -> Self1138 pub fn new(tg_start: u8, tg_end: u8) -> Self { 1139 Self(Box::new(bindings::VAEncTileGroupBufferAV1 { 1140 tg_start, 1141 tg_end, 1142 va_reserved: Default::default(), 1143 })) 1144 } 1145 inner_mut(&mut self) -> &mut bindings::VAEncTileGroupBufferAV11146 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAEncTileGroupBufferAV1 { 1147 &mut self.0 1148 } 1149 } 1150