use super::queue::{direction::Direction, Queue, QueueInit};
use crate::ioctl::{self, DqBufResult, V4l2BufferFromError};
use std::fmt::Debug;
pub trait TryDequeue {
type Dequeued: Debug + Send;
fn try_dequeue(&self) -> DqBufResult<Self::Dequeued, V4l2BufferFromError>;
}
pub trait Stream {
type Canceled;
fn stream_on(&self) -> Result<(), ioctl::StreamOnError>;
fn stream_off(&self) -> Result<Vec<Self::Canceled>, ioctl::StreamOffError>;
}
pub struct FreeBuffersResult<D: Direction, S: Stream> {
pub queue: Queue<D, QueueInit>,
pub canceled_buffers: Vec<S::Canceled>,
}
pub trait AllocatedQueue<'a, D: Direction>: TryDequeue + Stream + Sized {
fn num_buffers(&self) -> usize;
fn num_free_buffers(&self) -> usize;
fn num_queued_buffers(&self) -> usize;
fn free_buffers(self) -> Result<FreeBuffersResult<D, Self>, ioctl::ReqbufsError>;
}