--- /dev/null
+// Copyright 2023 The ChromiumOS Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+//! Wrappers around MPEG2 `VABuffer` types.
+
+use crate::bindings;
+
+/// Wrapper over the `picture_coding_extension` bindgen field in `VAPictureParameterBufferMPEG2`.
+pub struct MPEG2PictureCodingExtension(bindings::_VAPictureParameterBufferMPEG2__bindgen_ty_1);
+
+impl MPEG2PictureCodingExtension {
+ /// Creates the bindgen field.
+ #[allow(clippy::too_many_arguments)]
+ pub fn new(
+ intra_dc_precision: u32,
+ picture_structure: u32,
+ top_field_first: u32,
+ frame_pred_frame_dct: u32,
+ concealment_motion_vectors: u32,
+ q_scale_type: u32,
+ intra_vlc_format: u32,
+ alternate_scan: u32,
+ repeat_first_field: u32,
+ progressive_frame: u32,
+ is_first_field: u32,
+ ) -> Self {
+ let _bitfield_1 =
+ bindings::_VAPictureParameterBufferMPEG2__bindgen_ty_1__bindgen_ty_1::new_bitfield_1(
+ intra_dc_precision,
+ picture_structure,
+ top_field_first,
+ frame_pred_frame_dct,
+ concealment_motion_vectors,
+ q_scale_type,
+ intra_vlc_format,
+ alternate_scan,
+ repeat_first_field,
+ progressive_frame,
+ is_first_field,
+ );
+
+ Self(bindings::_VAPictureParameterBufferMPEG2__bindgen_ty_1 {
+ bits: bindings::_VAPictureParameterBufferMPEG2__bindgen_ty_1__bindgen_ty_1 {
+ _bitfield_align_1: Default::default(),
+ _bitfield_1,
+ __bindgen_padding_0: Default::default(),
+ },
+ })
+ }
+
+ /// Returns the inner FFI type. Useful for testing purposes.
+ pub fn inner(&mut self) -> &bindings::_VAPictureParameterBufferMPEG2__bindgen_ty_1 {
+ &self.0
+ }
+}
+
+/// Wrapper over the `PictureParameterBufferMPEG2` FFI type.
+pub struct PictureParameterBufferMPEG2(Box<bindings::VAPictureParameterBufferMPEG2>);
+
+impl PictureParameterBufferMPEG2 {
+ /// Creates the wrapper.
+ pub fn new(
+ horizontal_size: u16,
+ vertical_size: u16,
+ forward_reference_picture: bindings::VASurfaceID,
+ backward_reference_picture: bindings::VASurfaceID,
+ picture_coding_type: i32,
+ f_code: i32,
+ picture_coding_extension: &MPEG2PictureCodingExtension,
+ ) -> Self {
+ let picture_coding_extension = picture_coding_extension.0;
+
+ Self(Box::new(bindings::VAPictureParameterBufferMPEG2 {
+ horizontal_size,
+ vertical_size,
+ forward_reference_picture,
+ backward_reference_picture,
+ picture_coding_type,
+ f_code,
+ picture_coding_extension,
+ va_reserved: Default::default(),
+ }))
+ }
+
+ pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAPictureParameterBufferMPEG2 {
+ self.0.as_mut()
+ }
+
+ /// Returns the inner FFI type. Useful for testing purposes.
+ pub fn inner(&mut self) -> &bindings::VAPictureParameterBufferMPEG2 {
+ self.0.as_ref()
+ }
+}
+
+/// Wrapper over the `VASliceParameterBufferMPEG2` FFI type.
+pub struct SliceParameterBufferMPEG2(Box<bindings::VASliceParameterBufferMPEG2>);
+
+impl SliceParameterBufferMPEG2 {
+ /// Creates the wrapper.
+ #[allow(clippy::too_many_arguments)]
+ pub fn new(
+ slice_data_size: u32,
+ slice_data_offset: u32,
+ slice_data_flag: u32,
+ macroblock_offset: u32,
+ slice_horizontal_position: u32,
+ slice_vertical_position: u32,
+ quantiser_scale_code: i32,
+ intra_slice_flag: i32,
+ ) -> Self {
+ Self(Box::new(bindings::VASliceParameterBufferMPEG2 {
+ slice_data_size,
+ slice_data_offset,
+ slice_data_flag,
+ macroblock_offset,
+ slice_horizontal_position,
+ slice_vertical_position,
+ quantiser_scale_code,
+ intra_slice_flag,
+ va_reserved: Default::default(),
+ }))
+ }
+
+ pub(crate) fn inner_mut(&mut self) -> &mut bindings::VASliceParameterBufferMPEG2 {
+ self.0.as_mut()
+ }
+
+ /// Returns the inner FFI type. Useful for testing purposes.
+ pub fn inner(&self) -> &bindings::VASliceParameterBufferMPEG2 {
+ self.0.as_ref()
+ }
+}
+
+/// Wrapper over the `VAIQMatrixBufferMPEG2` FFI type.
+pub struct IQMatrixBufferMPEG2(Box<bindings::VAIQMatrixBufferMPEG2>);
+
+impl IQMatrixBufferMPEG2 {
+ /// Creates the wrapper.
+ #[allow(clippy::too_many_arguments)]
+ pub fn new(
+ load_intra_quantiser_matrix: i32,
+ load_non_intra_quantiser_matrix: i32,
+ load_chroma_intra_quantiser_matrix: i32,
+ load_chroma_non_intra_quantiser_matrix: i32,
+ intra_quantiser_matrix: [u8; 64usize],
+ non_intra_quantiser_matrix: [u8; 64usize],
+ chroma_intra_quantiser_matrix: [u8; 64usize],
+ chroma_non_intra_quantiser_matrix: [u8; 64usize],
+ ) -> Self {
+ Self(Box::new(bindings::VAIQMatrixBufferMPEG2 {
+ load_intra_quantiser_matrix,
+ load_non_intra_quantiser_matrix,
+ load_chroma_intra_quantiser_matrix,
+ load_chroma_non_intra_quantiser_matrix,
+ intra_quantiser_matrix,
+ non_intra_quantiser_matrix,
+ chroma_intra_quantiser_matrix,
+ chroma_non_intra_quantiser_matrix,
+ va_reserved: Default::default(),
+ }))
+ }
+
+ pub(crate) fn inner_mut(&mut self) -> &mut bindings::VAIQMatrixBufferMPEG2 {
+ self.0.as_mut()
+ }
+
+ /// Returns the inner FFI type. Useful for testing purposes.
+ pub fn inner(&self) -> &bindings::VAIQMatrixBufferMPEG2 {
+ self.0.as_ref()
+ }
+}