rusty_av2d 0.1.2

Pure-Rust AV2 video decoder, no C/FFI. Byte-identical to the AVM reference decoder across a 45-clip conformance corpus.
Documentation
#![deny(unsafe_op_in_unsafe_fn)]

use crate::c_arc::CArc;
use crate::c_box::CRef;
use crate::error::Rav1dResult;
use crate::include::dav1d::common::Rav1dDataProps;
use crate::include::dav1d::data::Rav1dData;

impl From<CArc<[u8]>> for Rav1dData {
    fn from(data: CArc<[u8]>) -> Self {
        let size = data.len();
        Self {
            data: Some(data),
            m: Rav1dDataProps {
                size,
                ..Default::default()
            },
        }
    }
}

impl Rav1dData {
    pub fn create(size: usize) -> Rav1dResult<Self> {
        let data = CArc::zeroed_slice(size)?;
        Ok(data.into())
    }

    pub fn wrap(data: CRef<[u8]>) -> Rav1dResult<Self> {
        Ok(CArc::wrap(data)?.into())
    }

    pub fn wrap_user_data(&mut self, user_data: CRef<u8>) -> Rav1dResult {
        self.m.user_data = Some(CArc::wrap(user_data)?);
        Ok(())
    }
}

impl AsRef<[u8]> for Rav1dData {
    fn as_ref(&self) -> &[u8] {
        match &self.data {
            Some(data) => data.as_ref(),
            None => &[],
        }
    }
}