1use crate::bindings;
8
9pub struct VP9PicFields(bindings::_VADecPictureParameterBufferVP9__bindgen_ty_1);
11
12impl VP9PicFields {
13 #[allow(clippy::too_many_arguments)]
15 pub fn new(
16 subsampling_x: u32,
17 subsampling_y: u32,
18 frame_type: u32,
19 show_frame: u32,
20 error_resilient_mode: u32,
21 intra_only: 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,
31 last_ref_frame: u32,
32 last_ref_frame_sign_bias: u32,
33 golden_ref_frame: u32,
34 golden_ref_frame_sign_bias: u32,
35 alt_ref_frame: u32,
36 alt_ref_frame_sign_bias: u32,
37 lossless_flag: u32,
38 ) -> Self {
39 let _bitfield_1 = bindings::_VADecPictureParameterBufferVP9__bindgen_ty_1__bindgen_ty_1::new_bitfield_1(
40 subsampling_x,
41 subsampling_y,
42 frame_type,
43 show_frame,
44 error_resilient_mode,
45 intra_only,
46 allow_high_precision_mv,
47 mcomp_filter_type,
48 frame_parallel_decoding_mode,
49 reset_frame_context,
50 refresh_frame_context,
51 frame_context_idx,
52 segmentation_enabled,
53 segmentation_temporal_update,
54 segmentation_update_map,
55 last_ref_frame,
56 last_ref_frame_sign_bias,
57 golden_ref_frame,
58 golden_ref_frame_sign_bias,
59 alt_ref_frame,
60 alt_ref_frame_sign_bias,
61 lossless_flag,
62 );
63
64 Self(bindings::_VADecPictureParameterBufferVP9__bindgen_ty_1 {
65 bits: bindings::_VADecPictureParameterBufferVP9__bindgen_ty_1__bindgen_ty_1 {
66 _bitfield_align_1: Default::default(),
67 _bitfield_1,
68 },
69 })
70 }
71
72 pub fn inner(&mut self) -> &bindings::_VADecPictureParameterBufferVP9__bindgen_ty_1 {
74 &self.0
75 }
76}
77
78pub struct PictureParameterBufferVP9(Box<bindings::VADecPictureParameterBufferVP9>);
80
81impl PictureParameterBufferVP9 {
82 #[allow(clippy::too_many_arguments)]
84 pub fn new(
85 frame_width: u16,
86 frame_height: u16,
87 reference_frames: [bindings::VASurfaceID; 8],
88 pic_fields: &VP9PicFields,
89 filter_level: u8,
90 sharpness_level: u8,
91 log2_tile_rows: u8,
92 log2_tile_columns: u8,
93 frame_header_length_in_bytes: u8,
94 first_partition_size: u16,
95 mb_segment_tree_probs: [u8; 7usize],
96 segment_pred_probs: [u8; 3usize],
97 profile: u8,
98 bit_depth: u8,
99 ) -> Self {
100 let pic_fields = pic_fields.0;
101
102 Self(Box::new(bindings::VADecPictureParameterBufferVP9 {
103 frame_width,
104 frame_height,
105 reference_frames,
106 pic_fields,
107 filter_level,
108 sharpness_level,
109 log2_tile_rows,
110 log2_tile_columns,
111 frame_header_length_in_bytes,
112 first_partition_size,
113 mb_segment_tree_probs,
114 segment_pred_probs,
115 profile,
116 bit_depth,
117 va_reserved: Default::default(),
118 }))
119 }
120
121 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VADecPictureParameterBufferVP9 {
122 self.0.as_mut()
123 }
124
125 pub fn inner(&self) -> &bindings::VADecPictureParameterBufferVP9 {
127 self.0.as_ref()
128 }
129}
130
131pub struct VP9SegmentFlags(bindings::_VASegmentParameterVP9__bindgen_ty_1);
133
134impl VP9SegmentFlags {
135 pub fn new(segment_reference_enabled: u16, segment_reference: u16, segment_reference_skipped: u16) -> Self {
137 let _bitfield_1 = bindings::_VASegmentParameterVP9__bindgen_ty_1__bindgen_ty_1::new_bitfield_1(
138 segment_reference_enabled,
139 segment_reference,
140 segment_reference_skipped,
141 );
142
143 Self(bindings::_VASegmentParameterVP9__bindgen_ty_1 {
144 fields: bindings::_VASegmentParameterVP9__bindgen_ty_1__bindgen_ty_1 {
145 _bitfield_align_1: Default::default(),
146 _bitfield_1,
147 __bindgen_padding_0: Default::default(),
148 },
149 })
150 }
151
152 pub fn inner(&mut self) -> &bindings::_VASegmentParameterVP9__bindgen_ty_1 {
154 &self.0
155 }
156}
157
158pub struct SegmentParameterVP9(bindings::VASegmentParameterVP9);
160
161impl SegmentParameterVP9 {
162 pub fn new(
164 segment_flags: &VP9SegmentFlags,
165 filter_level: [[u8; 2usize]; 4usize],
166 luma_ac_quant_scale: i16,
167 luma_dc_quant_scale: i16,
168 chroma_ac_quant_scale: i16,
169 chroma_dc_quant_scale: i16,
170 ) -> Self {
171 let segment_flags = segment_flags.0;
172
173 Self(bindings::VASegmentParameterVP9 {
174 segment_flags,
175 filter_level,
176 luma_ac_quant_scale,
177 luma_dc_quant_scale,
178 chroma_ac_quant_scale,
179 chroma_dc_quant_scale,
180 va_reserved: Default::default(),
181 })
182 }
183}
184
185pub struct SliceParameterBufferVP9(Box<bindings::VASliceParameterBufferVP9>);
187
188impl SliceParameterBufferVP9 {
189 pub fn new(
191 slice_data_size: u32,
192 slice_data_offset: u32,
193 slice_data_flag: u32,
194 seg_param: [SegmentParameterVP9; 8usize],
195 ) -> Self {
196 let seg_param = seg_param.map(|param| param.0);
197
198 Self(Box::new(bindings::VASliceParameterBufferVP9 {
199 slice_data_size,
200 slice_data_offset,
201 slice_data_flag,
202 seg_param,
203 va_reserved: Default::default(),
204 }))
205 }
206
207 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VASliceParameterBufferVP9 {
208 self.0.as_mut()
209 }
210
211 pub fn inner(&self) -> &bindings::VASliceParameterBufferVP9 {
213 self.0.as_ref()
214 }
215}
216
217pub struct CodedBufferVP9Status(Box<bindings::VACodedBufferVP9Status>);
218
219impl CodedBufferVP9Status {
220 pub fn new(
221 base_qp_index: u16,
222 loop_filter_level: u8,
223 long_term_indication: u8,
224 next_frame_width: u16,
225 next_frame_height: u16,
226 ) -> Self {
227 Self(Box::new(bindings::VACodedBufferVP9Status {
228 base_qp_index,
229 loop_filter_level,
230 long_term_indication,
231 next_frame_width,
232 next_frame_height,
233 va_reserved: Default::default(),
234 }))
235 }
236}
237
238pub struct EncSequenceParameterBufferVP9(Box<bindings::VAEncSequenceParameterBufferVP9>);
239
240impl EncSequenceParameterBufferVP9 {
241 pub fn new(
242 max_frame_width: u32,
243 max_frame_height: u32,
244 kf_auto: u32,
245 kf_min_dist: u32,
246 kf_max_dist: u32,
247 bits_per_second: u32,
248 intra_period: u32,
249 ) -> Self {
250 Self(Box::new(bindings::VAEncSequenceParameterBufferVP9 {
251 max_frame_width,
252 max_frame_height,
253 kf_auto,
254 kf_min_dist,
255 kf_max_dist,
256 bits_per_second,
257 intra_period,
258 va_reserved: Default::default(),
259 }))
260 }
261
262 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAEncSequenceParameterBufferVP9 {
263 &mut self.0
264 }
265}
266
267pub struct VP9EncRefFlags(bindings::_VAEncPictureParameterBufferVP9__bindgen_ty_1);
268
269impl VP9EncRefFlags {
270 #[allow(clippy::too_many_arguments)]
271 pub fn new(
272 force_kf: u32,
273 ref_frame_ctrl_l0: u32,
274 ref_frame_ctrl_l1: u32,
275 ref_last_idx: u32,
276 ref_last_sign_bias: u32,
277 ref_gf_idx: u32,
278 ref_gf_sign_bias: u32,
279 ref_arf_idx: u32,
280 ref_arf_sign_bias: u32,
281 temporal_id: u32,
282 ) -> Self {
283 let _bitfield_1 = bindings::_VAEncPictureParameterBufferVP9__bindgen_ty_1__bindgen_ty_1::new_bitfield_1(
284 force_kf,
285 ref_frame_ctrl_l0,
286 ref_frame_ctrl_l1,
287 ref_last_idx,
288 ref_last_sign_bias,
289 ref_gf_idx,
290 ref_gf_sign_bias,
291 ref_arf_idx,
292 ref_arf_sign_bias,
293 temporal_id,
294 Default::default(),
295 );
296
297 Self(bindings::_VAEncPictureParameterBufferVP9__bindgen_ty_1 {
298 bits: bindings::_VAEncPictureParameterBufferVP9__bindgen_ty_1__bindgen_ty_1 {
299 _bitfield_align_1: Default::default(),
300 _bitfield_1,
301 },
302 })
303 }
304}
305
306pub struct VP9EncPicFlags(bindings::_VAEncPictureParameterBufferVP9__bindgen_ty_2);
307
308impl VP9EncPicFlags {
309 #[allow(clippy::too_many_arguments)]
310 pub fn new(
311 frame_type: u32,
312 show_frame: u32,
313 error_resilient_mode: u32,
314 intra_only: u32,
315 allow_high_precision_mv: u32,
316 mcomp_filter_type: u32,
317 frame_parallel_decoding_mode: u32,
318 reset_frame_context: u32,
319 refresh_frame_context: u32,
320 frame_context_idx: u32,
321 segmentation_enabled: u32,
322 segmentation_temporal_update: u32,
323 segmentation_update_map: u32,
324 lossless_mode: u32,
325 comp_prediction_mode: u32,
326 auto_segmentation: u32,
327 super_frame_flag: u32,
328 ) -> Self {
329 let _bitfield_1 = bindings::_VAEncPictureParameterBufferVP9__bindgen_ty_2__bindgen_ty_1::new_bitfield_1(
330 frame_type,
331 show_frame,
332 error_resilient_mode,
333 intra_only,
334 allow_high_precision_mv,
335 mcomp_filter_type,
336 frame_parallel_decoding_mode,
337 reset_frame_context,
338 refresh_frame_context,
339 frame_context_idx,
340 segmentation_enabled,
341 segmentation_temporal_update,
342 segmentation_update_map,
343 lossless_mode,
344 comp_prediction_mode,
345 auto_segmentation,
346 super_frame_flag,
347 Default::default(),
348 );
349
350 Self(bindings::_VAEncPictureParameterBufferVP9__bindgen_ty_2 {
351 bits: bindings::_VAEncPictureParameterBufferVP9__bindgen_ty_2__bindgen_ty_1 {
352 _bitfield_align_1: Default::default(),
353 _bitfield_1,
354 },
355 })
356 }
357}
358
359pub struct EncPictureParameterBufferVP9(Box<bindings::VAEncPictureParameterBufferVP9>);
360
361impl EncPictureParameterBufferVP9 {
362 #[allow(clippy::too_many_arguments)]
363 pub fn new(
364 frame_width_src: u32,
365 frame_height_src: u32,
366 frame_width_dst: u32,
367 frame_height_dst: u32,
368 reconstructed_frame: bindings::VASurfaceID,
369 reference_frames: [bindings::VASurfaceID; 8usize],
370 coded_buf: bindings::VABufferID,
371 ref_flags: &VP9EncRefFlags,
372 pic_flags: &VP9EncPicFlags,
373 refresh_frame_flags: u8,
374 luma_ac_qindex: u8,
375 luma_dc_qindex_delta: i8,
376 chroma_ac_qindex_delta: i8,
377 chroma_dc_qindex_delta: i8,
378 filter_level: u8,
379 sharpness_level: u8,
380 ref_lf_delta: [i8; 4usize],
381 mode_lf_delta: [i8; 2usize],
382 bit_offset_ref_lf_delta: u16,
383 bit_offset_mode_lf_delta: u16,
384 bit_offset_lf_level: u16,
385 bit_offset_qindex: u16,
386 bit_offset_first_partition_size: u16,
387 bit_offset_segmentation: u16,
388 bit_size_segmentation: u16,
389 log2_tile_rows: u8,
390 log2_tile_columns: u8,
391 skip_frame_flag: u8,
392 number_skip_frames: u8,
393 skip_frames_size: u32,
394 ) -> Self {
395 let ref_flags = ref_flags.0;
396 let pic_flags = pic_flags.0;
397
398 Self(Box::new(bindings::VAEncPictureParameterBufferVP9 {
399 frame_width_src,
400 frame_height_src,
401 frame_width_dst,
402 frame_height_dst,
403 reconstructed_frame,
404 reference_frames,
405 coded_buf,
406 ref_flags,
407 pic_flags,
408 refresh_frame_flags,
409 luma_ac_qindex,
410 luma_dc_qindex_delta,
411 chroma_ac_qindex_delta,
412 chroma_dc_qindex_delta,
413 filter_level,
414 sharpness_level,
415 ref_lf_delta,
416 mode_lf_delta,
417 bit_offset_ref_lf_delta,
418 bit_offset_mode_lf_delta,
419 bit_offset_lf_level,
420 bit_offset_qindex,
421 bit_offset_first_partition_size,
422 bit_offset_segmentation,
423 bit_size_segmentation,
424 log2_tile_rows,
425 log2_tile_columns,
426 skip_frame_flag,
427 number_skip_frames,
428 skip_frames_size,
429 ..Default::default()
433 }))
434 }
435
436 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAEncPictureParameterBufferVP9 {
437 &mut self.0
438 }
439}