1use crate::bindings;
8
9pub struct PictureH264(bindings::VAPictureH264);
11
12impl PictureH264 {
13 pub fn new(
15 picture_id: bindings::VASurfaceID,
16 frame_idx: u32,
17 flags: u32,
18 top_field_order_cnt: i32,
19 bottom_field_order_cnt: i32,
20 ) -> Self {
21 Self(bindings::VAPictureH264 {
22 picture_id,
23 frame_idx,
24 flags,
25 TopFieldOrderCnt: top_field_order_cnt,
26 BottomFieldOrderCnt: bottom_field_order_cnt,
27 va_reserved: Default::default(),
28 })
29 }
30}
31
32pub struct H264SeqFields(bindings::_VAPictureParameterBufferH264__bindgen_ty_1);
34
35impl H264SeqFields {
36 #[allow(clippy::too_many_arguments)]
38 pub fn new(
39 chroma_format_idc: u32,
40 residual_colour_transform_flag: u32,
41 gaps_in_frame_num_value_allowed_flag: u32,
42 frame_mbs_only_flag: u32,
43 mb_adaptive_frame_field_flag: u32,
44 direct_8x8_inference_flag: u32,
45 min_luma_bi_pred_size8x8: u32,
46 log2_max_frame_num_minus4: u32,
47 pic_order_cnt_type: u32,
48 log2_max_pic_order_cnt_lsb_minus4: u32,
49 delta_pic_order_always_zero_flag: u32,
50 ) -> Self {
51 let _bitfield_1 = bindings::_VAPictureParameterBufferH264__bindgen_ty_1__bindgen_ty_1::new_bitfield_1(
52 chroma_format_idc,
53 residual_colour_transform_flag,
54 gaps_in_frame_num_value_allowed_flag,
55 frame_mbs_only_flag,
56 mb_adaptive_frame_field_flag,
57 direct_8x8_inference_flag,
58 min_luma_bi_pred_size8x8,
59 log2_max_frame_num_minus4,
60 pic_order_cnt_type,
61 log2_max_pic_order_cnt_lsb_minus4,
62 delta_pic_order_always_zero_flag,
63 );
64
65 Self(bindings::_VAPictureParameterBufferH264__bindgen_ty_1 {
66 bits: bindings::_VAPictureParameterBufferH264__bindgen_ty_1__bindgen_ty_1 {
67 _bitfield_align_1: Default::default(),
68 _bitfield_1,
69 __bindgen_padding_0: Default::default(),
70 },
71 })
72 }
73
74 pub fn inner(&mut self) -> &bindings::_VAPictureParameterBufferH264__bindgen_ty_1 {
76 &self.0
77 }
78}
79
80pub struct H264PicFields(bindings::_VAPictureParameterBufferH264__bindgen_ty_2);
82
83impl H264PicFields {
84 #[allow(clippy::too_many_arguments)]
86 pub fn new(
87 entropy_coding_mode_flag: u32,
88 weighted_pred_flag: u32,
89 weighted_bipred_idc: u32,
90 transform_8x8_mode_flag: u32,
91 field_pic_flag: u32,
92 constrained_intra_pred_flag: u32,
93 pic_order_present_flag: u32,
94 deblocking_filter_control_present_flag: u32,
95 redundant_pic_cnt_present_flag: u32,
96 reference_pic_flag: u32,
97 ) -> Self {
98 let _bitfield_1 = bindings::_VAPictureParameterBufferH264__bindgen_ty_2__bindgen_ty_1::new_bitfield_1(
99 entropy_coding_mode_flag,
100 weighted_pred_flag,
101 weighted_bipred_idc,
102 transform_8x8_mode_flag,
103 field_pic_flag,
104 constrained_intra_pred_flag,
105 pic_order_present_flag,
106 deblocking_filter_control_present_flag,
107 redundant_pic_cnt_present_flag,
108 reference_pic_flag,
109 );
110
111 Self(bindings::_VAPictureParameterBufferH264__bindgen_ty_2 {
112 bits: bindings::_VAPictureParameterBufferH264__bindgen_ty_2__bindgen_ty_1 {
113 _bitfield_align_1: Default::default(),
114 _bitfield_1,
115 __bindgen_padding_0: Default::default(),
116 },
117 })
118 }
119
120 pub fn inner(&mut self) -> &bindings::_VAPictureParameterBufferH264__bindgen_ty_2 {
122 &self.0
123 }
124}
125
126pub struct PictureParameterBufferH264(Box<bindings::VAPictureParameterBufferH264>);
128
129impl PictureParameterBufferH264 {
130 #[allow(clippy::too_many_arguments)]
132 pub fn new(
133 curr_pic: PictureH264,
134 reference_frames: [PictureH264; 16],
135 picture_width_in_mbs_minus1: u16,
136 picture_height_in_mbs_minus1: u16,
137 bit_depth_luma_minus8: u8,
138 bit_depth_chroma_minus8: u8,
139 num_ref_frames: u8,
140 seq_fields: &H264SeqFields,
141 num_slice_groups_minus1: u8,
142 slice_group_map_type: u8,
143 slice_group_change_rate_minus1: u16,
144 pic_init_qp_minus26: i8,
145 pic_init_qs_minus26: i8,
146 chroma_qp_index_offset: i8,
147 second_chroma_qp_index_offset: i8,
148 pic_fields: &H264PicFields,
149 frame_num: u16,
150 ) -> Self {
151 let reference_frames = (0..16usize)
152 .map(|i| reference_frames[i].0)
153 .collect::<Vec<_>>()
154 .try_into()
155 .unwrap();
158
159 let seq_fields = seq_fields.0;
160 let pic_fields = pic_fields.0;
161
162 Self(Box::new(bindings::VAPictureParameterBufferH264 {
163 CurrPic: curr_pic.0,
164 ReferenceFrames: reference_frames,
165 picture_width_in_mbs_minus1,
166 picture_height_in_mbs_minus1,
167 bit_depth_luma_minus8,
168 bit_depth_chroma_minus8,
169 num_ref_frames,
170 seq_fields,
171 num_slice_groups_minus1,
172 slice_group_map_type,
173 slice_group_change_rate_minus1,
174 pic_init_qp_minus26,
175 pic_init_qs_minus26,
176 chroma_qp_index_offset,
177 second_chroma_qp_index_offset,
178 pic_fields,
179 frame_num,
180 va_reserved: Default::default(),
181 }))
182 }
183
184 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAPictureParameterBufferH264 {
185 self.0.as_mut()
186 }
187
188 pub fn inner(&self) -> &bindings::VAPictureParameterBufferH264 {
190 self.0.as_ref()
191 }
192}
193
194pub struct SliceParameterBufferH264(Vec<bindings::VASliceParameterBufferH264>);
196
197impl SliceParameterBufferH264 {
198 pub fn new_array() -> Self {
199 Self(Vec::new())
200 }
201
202 #[allow(clippy::too_many_arguments)]
204 pub fn new(
205 slice_data_size: u32,
206 slice_data_offset: u32,
207 slice_data_flag: u32,
208 slice_data_bit_offset: u16,
209 first_mb_in_slice: u16,
210 slice_type: u8,
211 direct_spatial_mv_pred_flag: u8,
212 num_ref_idx_l0_active_minus1: u8,
213 num_ref_idx_l1_active_minus1: u8,
214 cabac_init_idc: u8,
215 slice_qp_delta: i8,
216 disable_deblocking_filter_idc: u8,
217 slice_alpha_c0_offset_div2: i8,
218 slice_beta_offset_div2: i8,
219 ref_pic_list_0: [PictureH264; 32usize],
220 ref_pic_list_1: [PictureH264; 32usize],
221 luma_log2_weight_denom: u8,
222 chroma_log2_weight_denom: u8,
223 luma_weight_l0_flag: u8,
224 luma_weight_l0: [i16; 32usize],
225 luma_offset_l0: [i16; 32usize],
226 chroma_weight_l0_flag: u8,
227 chroma_weight_l0: [[i16; 2usize]; 32usize],
228 chroma_offset_l0: [[i16; 2usize]; 32usize],
229 luma_weight_l1_flag: u8,
230 luma_weight_l1: [i16; 32usize],
231 luma_offset_l1: [i16; 32usize],
232 chroma_weight_l1_flag: u8,
233 chroma_weight_l1: [[i16; 2usize]; 32usize],
234 chroma_offset_l1: [[i16; 2usize]; 32usize],
235 ) -> Self {
236 let mut array = Self::new_array();
237
238 array.add_slice_parameter(
239 slice_data_size,
240 slice_data_offset,
241 slice_data_flag,
242 slice_data_bit_offset,
243 first_mb_in_slice,
244 slice_type,
245 direct_spatial_mv_pred_flag,
246 num_ref_idx_l0_active_minus1,
247 num_ref_idx_l1_active_minus1,
248 cabac_init_idc,
249 slice_qp_delta,
250 disable_deblocking_filter_idc,
251 slice_alpha_c0_offset_div2,
252 slice_beta_offset_div2,
253 ref_pic_list_0,
254 ref_pic_list_1,
255 luma_log2_weight_denom,
256 chroma_log2_weight_denom,
257 luma_weight_l0_flag,
258 luma_weight_l0,
259 luma_offset_l0,
260 chroma_weight_l0_flag,
261 chroma_weight_l0,
262 chroma_offset_l0,
263 luma_weight_l1_flag,
264 luma_weight_l1,
265 luma_offset_l1,
266 chroma_weight_l1_flag,
267 chroma_weight_l1,
268 chroma_offset_l1,
269 );
270
271 array
272 }
273
274 #[allow(clippy::too_many_arguments)]
276 pub fn add_slice_parameter(
277 &mut self,
278 slice_data_size: u32,
279 slice_data_offset: u32,
280 slice_data_flag: u32,
281 slice_data_bit_offset: u16,
282 first_mb_in_slice: u16,
283 slice_type: u8,
284 direct_spatial_mv_pred_flag: u8,
285 num_ref_idx_l0_active_minus1: u8,
286 num_ref_idx_l1_active_minus1: u8,
287 cabac_init_idc: u8,
288 slice_qp_delta: i8,
289 disable_deblocking_filter_idc: u8,
290 slice_alpha_c0_offset_div2: i8,
291 slice_beta_offset_div2: i8,
292 ref_pic_list_0: [PictureH264; 32usize],
293 ref_pic_list_1: [PictureH264; 32usize],
294 luma_log2_weight_denom: u8,
295 chroma_log2_weight_denom: u8,
296 luma_weight_l0_flag: u8,
297 luma_weight_l0: [i16; 32usize],
298 luma_offset_l0: [i16; 32usize],
299 chroma_weight_l0_flag: u8,
300 chroma_weight_l0: [[i16; 2usize]; 32usize],
301 chroma_offset_l0: [[i16; 2usize]; 32usize],
302 luma_weight_l1_flag: u8,
303 luma_weight_l1: [i16; 32usize],
304 luma_offset_l1: [i16; 32usize],
305 chroma_weight_l1_flag: u8,
306 chroma_weight_l1: [[i16; 2usize]; 32usize],
307 chroma_offset_l1: [[i16; 2usize]; 32usize],
308 ) {
309 let ref_pic_list_0 = ref_pic_list_0.map(|pic| pic.0);
310 let ref_pic_list_1 = ref_pic_list_1.map(|pic| pic.0);
311
312 let buf = bindings::VASliceParameterBufferH264 {
313 slice_data_size,
314 slice_data_offset,
315 slice_data_flag,
316 slice_data_bit_offset,
317 first_mb_in_slice,
318 slice_type,
319 direct_spatial_mv_pred_flag,
320 num_ref_idx_l0_active_minus1,
321 num_ref_idx_l1_active_minus1,
322 cabac_init_idc,
323 slice_qp_delta,
324 disable_deblocking_filter_idc,
325 slice_alpha_c0_offset_div2,
326 slice_beta_offset_div2,
327 RefPicList0: ref_pic_list_0,
328 RefPicList1: ref_pic_list_1,
329 luma_log2_weight_denom,
330 chroma_log2_weight_denom,
331 luma_weight_l0_flag,
332 luma_weight_l0,
333 luma_offset_l0,
334 chroma_weight_l0_flag,
335 chroma_weight_l0,
336 chroma_offset_l0,
337 luma_weight_l1_flag,
338 luma_weight_l1,
339 luma_offset_l1,
340 chroma_weight_l1_flag,
341 chroma_weight_l1,
342 chroma_offset_l1,
343 va_reserved: Default::default(),
344 };
345
346 self.0.push(buf);
347 }
348
349 pub(crate) fn inner_mut(&mut self) -> &mut Vec<bindings::VASliceParameterBufferH264> {
350 &mut self.0
351 }
352
353 pub fn inner(&self) -> &Vec<bindings::VASliceParameterBufferH264> {
355 &self.0
356 }
357}
358
359pub struct IQMatrixBufferH264(Box<bindings::VAIQMatrixBufferH264>);
361
362impl IQMatrixBufferH264 {
363 pub fn new(scaling_list4x4: [[u8; 16usize]; 6usize], scaling_list8x8: [[u8; 64usize]; 2usize]) -> Self {
365 Self(Box::new(bindings::VAIQMatrixBufferH264 {
366 ScalingList4x4: scaling_list4x4,
367 ScalingList8x8: scaling_list8x8,
368 va_reserved: Default::default(),
369 }))
370 }
371
372 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAIQMatrixBufferH264 {
373 self.0.as_mut()
374 }
375
376 pub fn inner(&self) -> &bindings::VAIQMatrixBufferH264 {
378 self.0.as_ref()
379 }
380}
381
382pub struct H264EncSeqFields(bindings::_VAEncSequenceParameterBufferH264__bindgen_ty_1);
384
385impl H264EncSeqFields {
386 #[allow(clippy::too_many_arguments)]
387 pub fn new(
388 chroma_format_idc: u32,
389 frame_mbs_only_flag: u32,
390 mb_adaptive_frame_field_flag: u32,
391 seq_scaling_matrix_present_flag: u32,
392 direct_8x8_inference_flag: u32,
393 log2_max_frame_num_minus4: u32,
394 pic_order_cnt_type: u32,
395 log2_max_pic_order_cnt_lsb_minus4: u32,
396 delta_pic_order_always_zero_flag: u32,
397 ) -> Self {
398 let _bitfield_1 = bindings::_VAEncSequenceParameterBufferH264__bindgen_ty_1__bindgen_ty_1::new_bitfield_1(
399 chroma_format_idc,
400 frame_mbs_only_flag,
401 mb_adaptive_frame_field_flag,
402 seq_scaling_matrix_present_flag,
403 direct_8x8_inference_flag,
404 log2_max_frame_num_minus4,
405 pic_order_cnt_type,
406 log2_max_pic_order_cnt_lsb_minus4,
407 delta_pic_order_always_zero_flag,
408 );
409
410 Self(bindings::_VAEncSequenceParameterBufferH264__bindgen_ty_1 {
411 bits: bindings::_VAEncSequenceParameterBufferH264__bindgen_ty_1__bindgen_ty_1 {
412 _bitfield_align_1: Default::default(),
413 _bitfield_1,
414 __bindgen_padding_0: Default::default(),
415 },
416 })
417 }
418
419 pub fn inner(&self) -> &bindings::_VAEncSequenceParameterBufferH264__bindgen_ty_1 {
420 &self.0
421 }
422}
423
424#[derive(Default)]
425pub struct H264VuiFields(bindings::_VAEncSequenceParameterBufferH264__bindgen_ty_2);
426
427impl H264VuiFields {
428 #[allow(clippy::too_many_arguments)]
429 pub fn new(
430 aspect_ratio_info_present_flag: u32,
431 timing_info_present_flag: u32,
432 bitstream_restriction_flag: u32,
433 log2_max_mv_length_horizontal: u32,
434 log2_max_mv_length_vertical: u32,
435 fixed_frame_rate_flag: u32,
436 low_delay_hrd_flag: u32,
437 motion_vectors_over_pic_boundaries_flag: u32,
438 ) -> Self {
439 let _bitfield_1 = bindings::_VAEncSequenceParameterBufferH264__bindgen_ty_2__bindgen_ty_1::new_bitfield_1(
440 aspect_ratio_info_present_flag,
441 timing_info_present_flag,
442 bitstream_restriction_flag,
443 log2_max_mv_length_horizontal,
444 log2_max_mv_length_vertical,
445 fixed_frame_rate_flag,
446 low_delay_hrd_flag,
447 motion_vectors_over_pic_boundaries_flag,
448 Default::default(),
449 );
450
451 Self(bindings::_VAEncSequenceParameterBufferH264__bindgen_ty_2 {
452 bits: bindings::_VAEncSequenceParameterBufferH264__bindgen_ty_2__bindgen_ty_1 {
453 _bitfield_align_1: Default::default(),
454 _bitfield_1,
455 },
456 })
457 }
458}
459
460#[derive(Default)]
461pub struct H264EncFrameCropOffsets {
462 pub left: u32,
463 pub right: u32,
464 pub top: u32,
465 pub bottom: u32,
466}
467
468impl H264EncFrameCropOffsets {
469 pub fn new(
470 frame_crop_left_offset: u32,
471 frame_crop_right_offset: u32,
472 frame_crop_top_offset: u32,
473 frame_crop_bottom_offset: u32,
474 ) -> Self {
475 Self {
476 left: frame_crop_left_offset,
477 right: frame_crop_right_offset,
478 top: frame_crop_top_offset,
479 bottom: frame_crop_bottom_offset,
480 }
481 }
482}
483
484pub struct EncSequenceParameterBufferH264(Box<bindings::VAEncSequenceParameterBufferH264>);
485
486impl EncSequenceParameterBufferH264 {
487 #[allow(clippy::too_many_arguments)]
488 pub fn new(
489 seq_parameter_set_id: u8,
490 level_idc: u8,
491 intra_period: u32,
492 intra_idr_period: u32,
493 ip_period: u32,
494 bits_per_second: u32,
495 max_num_ref_frames: u32,
496 picture_width_in_mbs: u16,
497 picture_height_in_mbs: u16,
498 seq_fields: &H264EncSeqFields,
499 bit_depth_luma_minus8: u8,
500 bit_depth_chroma_minus8: u8,
501 num_ref_frames_in_pic_order_cnt_cycle: u8,
502 offset_for_non_ref_pic: i32,
503 offset_for_top_to_bottom_field: i32,
504 offset_for_ref_frame: [i32; 256usize],
505 frame_crop: Option<H264EncFrameCropOffsets>,
506 vui_fields: Option<H264VuiFields>,
507 aspect_ratio_idc: u8,
508 sar_width: u32,
509 sar_height: u32,
510 num_units_in_tick: u32,
511 time_scale: u32,
512 ) -> Self {
513 let seq_fields = seq_fields.0;
514
515 let frame_cropping_flag = if frame_crop.is_some() { 1 } else { 0 };
516 let frame_crop = frame_crop.unwrap_or_default();
517
518 let frame_crop_left_offset = frame_crop.left;
519 let frame_crop_right_offset = frame_crop.right;
520 let frame_crop_top_offset = frame_crop.top;
521 let frame_crop_bottom_offset = frame_crop.bottom;
522
523 let vui_parameters_present_flag = if vui_fields.is_some() { 1 } else { 0 };
524 let vui_fields = vui_fields.unwrap_or_default().0;
525
526 Self(Box::new(bindings::VAEncSequenceParameterBufferH264 {
527 seq_parameter_set_id,
528 level_idc,
529 intra_period,
530 intra_idr_period,
531 ip_period,
532 bits_per_second,
533 max_num_ref_frames,
534 picture_width_in_mbs,
535 picture_height_in_mbs,
536 seq_fields,
537 bit_depth_luma_minus8,
538 bit_depth_chroma_minus8,
539 num_ref_frames_in_pic_order_cnt_cycle,
540 offset_for_non_ref_pic,
541 offset_for_top_to_bottom_field,
542 offset_for_ref_frame,
543 frame_cropping_flag,
544 frame_crop_left_offset,
545 frame_crop_right_offset,
546 frame_crop_top_offset,
547 frame_crop_bottom_offset,
548 vui_parameters_present_flag,
549 vui_fields,
550 aspect_ratio_idc,
551 sar_width,
552 sar_height,
553 num_units_in_tick,
554 time_scale,
555 ..Default::default()
556 }))
557 }
558
559 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAEncSequenceParameterBufferH264 {
560 self.0.as_mut()
561 }
562}
563
564pub struct H264EncPicFields(bindings::_VAEncPictureParameterBufferH264__bindgen_ty_1);
565
566impl H264EncPicFields {
567 #[allow(clippy::too_many_arguments)]
568 pub fn new(
569 idr_pic_flag: u32,
570 reference_pic_flag: u32,
571 entropy_coding_mode_flag: u32,
572 weighted_pred_flag: u32,
573 weighted_bipred_idc: u32,
574 constrained_intra_pred_flag: u32,
575 transform_8x8_mode_flag: u32,
576 deblocking_filter_control_present_flag: u32,
577 redundant_pic_cnt_present_flag: u32,
578 pic_order_present_flag: u32,
579 pic_scaling_matrix_present_flag: u32,
580 ) -> Self {
581 let _bitfield_1 = bindings::_VAEncPictureParameterBufferH264__bindgen_ty_1__bindgen_ty_1::new_bitfield_1(
582 idr_pic_flag,
583 reference_pic_flag,
584 entropy_coding_mode_flag,
585 weighted_pred_flag,
586 weighted_bipred_idc,
587 constrained_intra_pred_flag,
588 transform_8x8_mode_flag,
589 deblocking_filter_control_present_flag,
590 redundant_pic_cnt_present_flag,
591 pic_order_present_flag,
592 pic_scaling_matrix_present_flag,
593 );
594
595 Self(bindings::_VAEncPictureParameterBufferH264__bindgen_ty_1 {
596 bits: bindings::_VAEncPictureParameterBufferH264__bindgen_ty_1__bindgen_ty_1 {
597 _bitfield_align_1: Default::default(),
598 _bitfield_1,
599 __bindgen_padding_0: Default::default(),
600 },
601 })
602 }
603}
604
605pub struct EncPictureParameterBufferH264(Box<bindings::VAEncPictureParameterBufferH264>);
606
607impl EncPictureParameterBufferH264 {
608 #[allow(clippy::too_many_arguments)]
609 pub fn new(
610 curr_pic: PictureH264,
611 reference_frames: [PictureH264; 16usize],
612 coded_buf: bindings::VABufferID,
613 pic_parameter_set_id: u8,
614 seq_parameter_set_id: u8,
615 last_picture: u8,
616 frame_num: u16,
617 pic_init_qp: u8,
618 num_ref_idx_l0_active_minus1: u8,
619 num_ref_idx_l1_active_minus1: u8,
620 chroma_qp_index_offset: i8,
621 second_chroma_qp_index_offset: i8,
622 pic_fields: &H264EncPicFields,
623 ) -> Self {
624 let reference_frames = (0..16usize)
625 .map(|i| reference_frames[i].0)
626 .collect::<Vec<_>>()
627 .try_into()
628 .unwrap();
631
632 let pic_fields = pic_fields.0;
633
634 Self(Box::new(bindings::_VAEncPictureParameterBufferH264 {
635 CurrPic: curr_pic.0,
636 ReferenceFrames: reference_frames,
637 coded_buf,
638 pic_parameter_set_id,
639 seq_parameter_set_id,
640 last_picture,
641 frame_num,
642 pic_init_qp,
643 num_ref_idx_l0_active_minus1,
644 num_ref_idx_l1_active_minus1,
645 chroma_qp_index_offset,
646 second_chroma_qp_index_offset,
647 pic_fields,
648 ..Default::default()
649 }))
650 }
651
652 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAEncPictureParameterBufferH264 {
653 self.0.as_mut()
654 }
655}
656
657pub struct EncSliceParameterBufferH264(Box<bindings::VAEncSliceParameterBufferH264>);
658
659impl EncSliceParameterBufferH264 {
660 #[allow(clippy::too_many_arguments)]
661 pub fn new(
662 macroblock_address: u32,
663 num_macroblocks: u32,
664 macroblock_info: bindings::VABufferID,
665 slice_type: u8,
666 pic_parameter_set_id: u8,
667 idr_pic_id: u16,
668 pic_order_cnt_lsb: u16,
669 delta_pic_order_cnt_bottom: i32,
670 delta_pic_order_cnt: [i32; 2usize],
671 direct_spatial_mv_pred_flag: u8,
672 num_ref_idx_active_override_flag: u8,
673 num_ref_idx_l0_active_minus1: u8,
674 num_ref_idx_l1_active_minus1: u8,
675 ref_pic_list_0: [PictureH264; 32usize],
676 ref_pic_list_1: [PictureH264; 32usize],
677 luma_log2_weight_denom: u8,
678 chroma_log2_weight_denom: u8,
679 luma_weight_l0_flag: u8,
680 luma_weight_l0: [i16; 32usize],
681 luma_offset_l0: [i16; 32usize],
682 chroma_weight_l0_flag: u8,
683 chroma_weight_l0: [[i16; 2usize]; 32usize],
684 chroma_offset_l0: [[i16; 2usize]; 32usize],
685 luma_weight_l1_flag: u8,
686 luma_weight_l1: [i16; 32usize],
687 luma_offset_l1: [i16; 32usize],
688 chroma_weight_l1_flag: u8,
689 chroma_weight_l1: [[i16; 2usize]; 32usize],
690 chroma_offset_l1: [[i16; 2usize]; 32usize],
691 cabac_init_idc: u8,
692 slice_qp_delta: i8,
693 disable_deblocking_filter_idc: u8,
694 slice_alpha_c0_offset_div2: i8,
695 slice_beta_offset_div2: i8,
696 ) -> Self {
697 let ref_pic_list_0 = ref_pic_list_0.map(|pic| pic.0);
698 let ref_pic_list_1 = ref_pic_list_1.map(|pic| pic.0);
699
700 Self(Box::new(bindings::VAEncSliceParameterBufferH264 {
701 macroblock_address,
702 num_macroblocks,
703 macroblock_info,
704 slice_type,
705 pic_parameter_set_id,
706 idr_pic_id,
707 pic_order_cnt_lsb,
708 delta_pic_order_cnt_bottom,
709 delta_pic_order_cnt,
710 direct_spatial_mv_pred_flag,
711 num_ref_idx_active_override_flag,
712 num_ref_idx_l0_active_minus1,
713 num_ref_idx_l1_active_minus1,
714 RefPicList0: ref_pic_list_0,
715 RefPicList1: ref_pic_list_1,
716 luma_log2_weight_denom,
717 chroma_log2_weight_denom,
718 luma_weight_l0_flag,
719 luma_weight_l0,
720 luma_offset_l0,
721 chroma_weight_l0_flag,
722 chroma_weight_l0,
723 chroma_offset_l0,
724 luma_weight_l1_flag,
725 luma_weight_l1,
726 luma_offset_l1,
727 chroma_weight_l1_flag,
728 chroma_weight_l1,
729 chroma_offset_l1,
730 cabac_init_idc,
731 slice_qp_delta,
732 disable_deblocking_filter_idc,
733 slice_alpha_c0_offset_div2,
734 slice_beta_offset_div2,
735 ..Default::default()
736 }))
737 }
738
739 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAEncSliceParameterBufferH264 {
740 self.0.as_mut()
741 }
742
743 pub fn inner(&self) -> &bindings::VAEncSliceParameterBufferH264 {
745 self.0.as_ref()
746 }
747}
748
749pub struct H264EncMacroblockInfo(bindings::_VAEncMacroblockParameterBufferH264__bindgen_ty_1);
750
751impl H264EncMacroblockInfo {
752 pub fn new_intra(pred_avail_override_flag: u32, pred_avail_flags: u32) -> Self {
753 let _bitfield_1 =
754 bindings::_VAEncMacroblockParameterBufferH264__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1::new_bitfield_1(
755 pred_avail_override_flag,
756 pred_avail_flags,
757 );
758
759 Self(bindings::_VAEncMacroblockParameterBufferH264__bindgen_ty_1 {
760 intra_fields: bindings::_VAEncMacroblockParameterBufferH264__bindgen_ty_1__bindgen_ty_1 {
761 bits: bindings::_VAEncMacroblockParameterBufferH264__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1 {
762 _bitfield_align_1: Default::default(),
763 _bitfield_1,
764 __bindgen_padding_0: Default::default(),
765 },
766 },
767 })
768 }
769
770 pub fn new_inter() -> Self {
771 Self(bindings::_VAEncMacroblockParameterBufferH264__bindgen_ty_1 {
772 inter_fields: bindings::_VAEncMacroblockParameterBufferH264__bindgen_ty_1__bindgen_ty_2 {
773 bits: bindings::_VAEncMacroblockParameterBufferH264__bindgen_ty_1__bindgen_ty_2__bindgen_ty_1 {
774 reserved: Default::default(),
775 },
776 },
777 })
778 }
779}
780
781pub struct EncMacroblockParameterBufferH264(Box<bindings::VAEncMacroblockParameterBufferH264>);
782
783impl EncMacroblockParameterBufferH264 {
784 pub fn new(qp: u8, info: &H264EncMacroblockInfo) -> Self {
785 let info = info.0;
786
787 Self(Box::new(bindings::VAEncMacroblockParameterBufferH264 {
788 qp,
789 info,
790 ..Default::default()
791 }))
792 }
793
794 pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAEncMacroblockParameterBufferH264 {
795 self.0.as_mut()
796 }
797
798 pub fn inner(&self) -> &bindings::VAEncMacroblockParameterBufferH264 {
800 self.0.as_ref()
801 }
802}