use crate::error::{Error, Result};
use core::mem::MaybeUninit;
use whereat::*;
pub(crate) struct Picture {
inner: libwebp_sys::WebPPicture,
}
impl Picture {
pub(crate) fn new() -> Result<Self> {
let mut pic = MaybeUninit::<libwebp_sys::WebPPicture>::zeroed();
let ok = unsafe { libwebp_sys::WebPPictureInit(pic.as_mut_ptr()) };
if !ok {
return Err(at!(Error::InvalidConfig(
"WebPPictureInit failed (libwebp ABI mismatch)".into(),
)));
}
Ok(Self {
inner: unsafe { pic.assume_init() },
})
}
pub(crate) fn inner_mut(&mut self) -> &mut libwebp_sys::WebPPicture {
&mut self.inner
}
pub(crate) fn as_mut_ptr(&mut self) -> *mut libwebp_sys::WebPPicture {
&mut self.inner
}
}
impl Drop for Picture {
fn drop(&mut self) {
unsafe { libwebp_sys::WebPPictureFree(&mut self.inner) };
}
}