use std::io::Cursor;
use std::io::Seek;
use bytes::Buf;
#[cfg(test)]
pub(crate) mod dummy;
pub mod nalu;
pub(crate) mod nalu_reader;
#[cfg(feature = "vaapi")]
pub mod vaapi;
pub struct IvfIterator<'a> {
data: &'a [u8],
cursor: Cursor<&'a [u8]>,
}
impl<'a> IvfIterator<'a> {
pub fn new(data: &'a [u8]) -> Self {
let mut cursor = Cursor::new(data);
cursor.seek(std::io::SeekFrom::Start(32)).unwrap();
Self { data, cursor }
}
}
impl<'a> Iterator for IvfIterator<'a> {
type Item = &'a [u8];
fn next(&mut self) -> Option<Self::Item> {
if self.cursor.remaining() < 6 {
return None;
}
let len = self.cursor.get_u32_le() as usize;
let _ = self.cursor.get_u64_le();
if self.cursor.remaining() < len {
return None;
}
let start = self.cursor.position() as usize;
let _ = self.cursor.seek(std::io::SeekFrom::Current(len as i64));
let end = self.cursor.position() as usize;
Some(&self.data[start..end])
}
}