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.
5 //! Wrappers around VP9 `VABuffer` types.
9 /// Wrapper over the `pic_fields` bindgen field in `VAPictureParameterBufferVP9`.
10 pub struct VP9PicFields(bindings::_VADecPictureParameterBufferVP9__bindgen_ty_1);
13 /// Creates the bindgen field
14 #[allow(clippy::too_many_arguments)]
20 error_resilient_mode: u32,
22 allow_high_precision_mv: u32,
23 mcomp_filter_type: u32,
24 frame_parallel_decoding_mode: u32,
25 reset_frame_context: u32,
26 refresh_frame_context: u32,
27 frame_context_idx: u32,
28 segmentation_enabled: u32,
29 segmentation_temporal_update: u32,
30 segmentation_update_map: u32,
32 last_ref_frame_sign_bias: u32,
33 golden_ref_frame: u32,
34 golden_ref_frame_sign_bias: u32,
36 alt_ref_frame_sign_bias: u32,
40 bindings::_VADecPictureParameterBufferVP9__bindgen_ty_1__bindgen_ty_1::new_bitfield_1(
47 allow_high_precision_mv,
49 frame_parallel_decoding_mode,
51 refresh_frame_context,
54 segmentation_temporal_update,
55 segmentation_update_map,
57 last_ref_frame_sign_bias,
59 golden_ref_frame_sign_bias,
61 alt_ref_frame_sign_bias,
65 Self(bindings::_VADecPictureParameterBufferVP9__bindgen_ty_1 {
66 bits: bindings::_VADecPictureParameterBufferVP9__bindgen_ty_1__bindgen_ty_1 {
67 _bitfield_align_1: Default::default(),
73 /// Returns the inner FFI type. Useful for testing purposes.
74 pub fn inner(&mut self) -> &bindings::_VADecPictureParameterBufferVP9__bindgen_ty_1 {
79 /// Wrapper over the `PictureParameterBufferVP9` FFI type.
80 pub struct PictureParameterBufferVP9(Box<bindings::VADecPictureParameterBufferVP9>);
82 impl PictureParameterBufferVP9 {
83 /// Creates the wrapper
84 #[allow(clippy::too_many_arguments)]
88 reference_frames: [bindings::VASurfaceID; 8],
89 pic_fields: &VP9PicFields,
93 log2_tile_columns: u8,
94 frame_header_length_in_bytes: u8,
95 first_partition_size: u16,
96 mb_segment_tree_probs: [u8; 7usize],
97 segment_pred_probs: [u8; 3usize],
101 let pic_fields = pic_fields.0;
103 Self(Box::new(bindings::VADecPictureParameterBufferVP9 {
112 frame_header_length_in_bytes,
113 first_partition_size,
114 mb_segment_tree_probs,
118 va_reserved: Default::default(),
122 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VADecPictureParameterBufferVP9 {
126 /// Returns the inner FFI type. Useful for testing purposes.
127 pub fn inner(&self) -> &bindings::VADecPictureParameterBufferVP9 {
132 /// Wrapper over the `segment_flags` bindgen field in `VASegmentParameterVP9`.
133 pub struct VP9SegmentFlags(bindings::_VASegmentParameterVP9__bindgen_ty_1);
135 impl VP9SegmentFlags {
136 /// Creates the wrapper.
138 segment_reference_enabled: u16,
139 segment_reference: u16,
140 segment_reference_skipped: u16,
143 bindings::_VASegmentParameterVP9__bindgen_ty_1__bindgen_ty_1::new_bitfield_1(
144 segment_reference_enabled,
146 segment_reference_skipped,
149 Self(bindings::_VASegmentParameterVP9__bindgen_ty_1 {
150 fields: bindings::_VASegmentParameterVP9__bindgen_ty_1__bindgen_ty_1 {
151 _bitfield_align_1: Default::default(),
153 __bindgen_padding_0: Default::default(),
158 /// Returns the inner FFI type. Useful for testing purposes.
159 pub fn inner(&mut self) -> &bindings::_VASegmentParameterVP9__bindgen_ty_1 {
164 /// Wrapper over the `VASegmentParameterVP9` FFI type.
165 pub struct SegmentParameterVP9(bindings::VASegmentParameterVP9);
167 impl SegmentParameterVP9 {
168 /// Creates the wrapper.
170 segment_flags: &VP9SegmentFlags,
171 filter_level: [[u8; 2usize]; 4usize],
172 luma_ac_quant_scale: i16,
173 luma_dc_quant_scale: i16,
174 chroma_ac_quant_scale: i16,
175 chroma_dc_quant_scale: i16,
177 let segment_flags = segment_flags.0;
179 Self(bindings::VASegmentParameterVP9 {
184 chroma_ac_quant_scale,
185 chroma_dc_quant_scale,
186 va_reserved: Default::default(),
191 /// Wrapper over the `VASliceParameterBufferVP9` FFI type.
192 pub struct SliceParameterBufferVP9(Box<bindings::VASliceParameterBufferVP9>);
194 impl SliceParameterBufferVP9 {
195 /// Creates the wrapper.
197 slice_data_size: u32,
198 slice_data_offset: u32,
199 slice_data_flag: u32,
200 seg_param: [SegmentParameterVP9; 8usize],
202 let seg_param = seg_param.map(|param| param.0);
204 Self(Box::new(bindings::VASliceParameterBufferVP9 {
209 va_reserved: Default::default(),
213 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VASliceParameterBufferVP9 {
217 /// Returns the inner FFI type. Useful for testing purposes.
218 pub fn inner(&self) -> &bindings::VASliceParameterBufferVP9 {