Skip to content

Commit 9f3c0d9

Browse files
authored
Add bindings for encoding packed headers (#35)
1 parent 89454d6 commit 9f3c0d9

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

lib/bindgen_gen.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
const ALLOW_LIST_TYPE: &str =
77
".*ExternalBuffers.*|.*PRIME.*|.*MPEG2.*|.*VP8.*|.*VP9.*|.*H264.*|.*HEVC.*|\
88
.*JPEG.*|VACodedBufferSegment|.*AV1.*|VAEncMisc.*|VASurfaceDecodeMBErrors|\
9-
VADecodeErrorType|.*VAProc.*|\
9+
VADecodeErrorType|.*VAProc.*|VAEncPacked.*|\
1010
VACenc.*|VA_TEE_.*|VAEncryption.*|VA_PROTECTED_.*";
1111

1212
// The common bindgen builder for VA-API.

lib/src/buffer.rs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,14 @@ impl Buffer {
294294
std::mem::size_of_val(wrapper.inner_mut()),
295295
),
296296
},
297+
BufferType::EncPackedHeaderParameter(ref mut wrapper) => (
298+
wrapper.inner_mut() as *mut _ as *mut std::ffi::c_void,
299+
std::mem::size_of_val(wrapper.inner_mut()),
300+
),
301+
302+
BufferType::EncPackedHeaderData(ref data) => {
303+
(data.as_ptr() as *mut std::ffi::c_void, data.len())
304+
}
297305
};
298306

299307
// Safe because `self` represents a valid `VAContext`. `ptr` and `size` are also ensured to
@@ -368,6 +376,10 @@ pub enum BufferType {
368376
ProcPipelineParameter(proc_pipeline::ProcPipelineParameterBuffer),
369377
/// Abstraction over `VAQMatrixBufferType`.
370378
QMatrix(QMatrix),
379+
/// Abstraction over `VAEncPackedHeaderParameterBufferType`.
380+
EncPackedHeaderParameter(EncPackedHeaderParameter),
381+
/// Abstraction over `VAEncPackedHeaderDataBufferType`.
382+
EncPackedHeaderData(Vec<u8>),
371383
}
372384

373385
impl BufferType {
@@ -404,7 +416,16 @@ impl BufferType {
404416
BufferType::ProcPipelineParameter(_) => {
405417
bindings::VABufferType::VAProcPipelineParameterBufferType
406418
}
419+
407420
BufferType::QMatrix(_) => bindings::VABufferType::VAQMatrixBufferType,
421+
422+
BufferType::EncPackedHeaderParameter(_) => {
423+
bindings::VABufferType::VAEncPackedHeaderParameterBufferType
424+
}
425+
426+
BufferType::EncPackedHeaderData(_) => {
427+
bindings::VABufferType::VAEncPackedHeaderDataBufferType
428+
}
408429
}
409430
}
410431
}
@@ -628,3 +649,36 @@ pub enum EncMiscParameter {
628649
/// Wrapper over `VAEncMiscParameterBuffer` with `VAEncMiscParameterQuantization`.
629650
Quantization(EncMiscParameterQuantization),
630651
}
652+
653+
/// Abstraction over the `VAEncPackedHeaderType` enum values we support.
654+
#[repr(u32)]
655+
pub enum EncPackedHeaderType {
656+
/// Sequence header
657+
Sequence = bindings::VAEncPackedHeaderType::VAEncPackedHeaderSequence,
658+
/// Picture header
659+
Picture = bindings::VAEncPackedHeaderType::VAEncPackedHeaderPicture,
660+
/// Slice header
661+
Slice = bindings::VAEncPackedHeaderType::VAEncPackedHeaderSlice,
662+
/// Raw data
663+
RawData = bindings::VAEncPackedHeaderType::VAEncPackedHeaderRawData,
664+
}
665+
666+
/// Abstraction over `EncPackedHeaderParameterBuffer` types we support
667+
pub struct EncPackedHeaderParameter(Box<bindings::VAEncPackedHeaderParameterBuffer>);
668+
669+
impl EncPackedHeaderParameter {
670+
/// Creates a new `EncPackedHeaderParameter` from the given `VAEncPackedHeaderParameterBuffer`.
671+
pub fn new(type_: EncPackedHeaderType, length_in_bits: u32, has_emulation: bool) -> Self {
672+
Self(Box::new(bindings::VAEncPackedHeaderParameterBuffer {
673+
type_: type_ as _,
674+
bit_length: length_in_bits,
675+
has_emulation_bytes: has_emulation as u8,
676+
..Default::default()
677+
}))
678+
}
679+
680+
/// Returns a mutable reference to the inner `VAEncPackedHeaderParameterBuffer`.
681+
pub fn inner_mut(&mut self) -> &mut bindings::VAEncPackedHeaderParameterBuffer {
682+
&mut self.0
683+
}
684+
}

0 commit comments

Comments
 (0)