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