use crate::control;
pub use drm_fourcc::{DrmFourcc, DrmModifier, DrmVendor, UnrecognizedFourcc, UnrecognizedVendor};
#[repr(transparent)]
#[derive(Copy, Clone, Hash, PartialEq, Eq)]
pub struct Handle(control::RawResourceHandle);
unsafe impl bytemuck::ZeroableInOption for Handle {}
unsafe impl bytemuck::PodInOption for Handle {}
impl From<Handle> for control::RawResourceHandle {
fn from(handle: Handle) -> Self {
handle.0
}
}
impl From<Handle> for u32 {
fn from(handle: Handle) -> Self {
handle.0.into()
}
}
impl From<control::RawResourceHandle> for Handle {
fn from(handle: control::RawResourceHandle) -> Self {
Handle(handle)
}
}
impl std::fmt::Debug for Handle {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_tuple("buffer::Handle").field(&self.0).finish()
}
}
#[repr(transparent)]
#[derive(Copy, Clone, Hash, PartialEq, Eq)]
pub struct Name(u32);
impl From<Name> for u32 {
fn from(name: Name) -> u32 {
name.0
}
}
impl std::fmt::Debug for Name {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_tuple("buffer::Name").field(&self.0).finish()
}
}
pub trait Buffer {
fn size(&self) -> (u32, u32);
fn format(&self) -> DrmFourcc;
fn pitch(&self) -> u32;
fn handle(&self) -> Handle;
}
pub trait PlanarBuffer {
fn size(&self) -> (u32, u32);
fn format(&self) -> DrmFourcc;
fn modifier(&self) -> Option<DrmModifier>;
fn pitches(&self) -> [u32; 4];
fn handles(&self) -> [Option<Handle>; 4];
fn offsets(&self) -> [u32; 4];
}