use std::ptr::NonNull;
use crate::error::Error;
use crate::sys;
pub(crate) struct Packet(pub(crate) NonNull<sys::AVPacket>);
impl Packet {
pub(crate) fn new() -> Result<Self, Error> {
let ptr = unsafe { sys::av_packet_alloc() };
NonNull::new(ptr).map(Packet).ok_or(Error::OutOfMemory)
}
}
impl Drop for Packet {
fn drop(&mut self) {
unsafe {
let mut p = self.0.as_ptr();
sys::av_packet_free(&mut p);
}
}
}
pub(crate) struct Frame(pub(crate) NonNull<sys::AVFrame>);
impl Frame {
pub(crate) fn new() -> Result<Self, Error> {
let ptr = unsafe { sys::av_frame_alloc() };
NonNull::new(ptr).map(Frame).ok_or(Error::OutOfMemory)
}
}
impl Drop for Frame {
fn drop(&mut self) {
unsafe {
let mut p = self.0.as_ptr();
sys::av_frame_free(&mut p);
}
}
}