pub struct WlFrame<B = Vec<u8>> {
pub(crate) id: usize,
pub(crate) buf: B,
pub(crate) source: Option<Dmabuf>,
pub(crate) scanout: bool,
pub(crate) shm: Option<Buffer>,
pub(crate) frame_id: u16,
pub(crate) damage: Vec<Rectangle<i32, Physical>>,
pub(crate) is_animated: bool,
pub(crate) captured_ns: i64,
}Expand description
One captured frame in flight from the calloop (render/readback) to the Wayland encode thread: the slot’s buffer (a readback’s packed rows, or the zero-copy session’s GPU target) plus the per-frame inputs of the encode dispatch (damage, overlay animation); the IDR request travels separately via the controls atomic.
Fields§
§id: usizePool slot id; travels with the buffer so recycle returns it to the right slot.
buf: B§source: Option<Dmabuf>Zero-copy: a buffer encoded in place of the slot’s own, the host frame the host
compositor blitted into or a client’s own buffer (scanout); the slot’s buffer then
only holds the place in flight.
scanout: boolsource is a client’s buffer encoded as it stands (scanout_candidate): the encode
thread waits out the client’s GPU work on it first, and a session that cannot import
it refuses the direct path for the capture rather than failing the session.
shm: Option<Buffer>Readback: a client’s shm buffer whose rows are encoded in place of the slot’s
(scanout_shm), read inside its pool’s mapping on the encode thread; the slot’s buffer
then only holds the place in flight.
frame_id: u16§damage: Vec<Rectangle<i32, Physical>>§is_animated: bool§captured_ns: i64CLOCK_MONOTONIC nanoseconds at which the pixels were in hand.
Auto Trait Implementations§
impl<B = Vec<u8>> !RefUnwindSafe for WlFrame<B>
impl<B = Vec<u8>> !UnwindSafe for WlFrame<B>
impl<B> Freeze for WlFrame<B>where
B: Freeze,
impl<B> Send for WlFrame<B>where
B: Send,
impl<B> Sync for WlFrame<B>where
B: Sync,
impl<B> Unpin for WlFrame<B>where
B: Unpin,
impl<B> UnsafeUnpin for WlFrame<B>where
B: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more