// 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); 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); 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); 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() } }