Struct devices::virtio::video::EosBufferManager
source · struct EosBufferManager {
stream_id: u32,
eos_buffer: Option<u32>,
client_awaits_eos: bool,
responses: Vec<VideoEvtResponseType>,
}
Expand description
Manages the zero-length, EOS-marked buffer signaling the end of a stream.
Both the decoder and encoder need to signal end-of-stream events using a zero-sized buffer
marked with the VIRTIO_VIDEO_BUFFER_FLAG_EOS
flag. This struct allows to keep a buffer aside
for that purpose.
TODO(b/149725148): Remove this when libvda supports buffer flags.
Fields§
§stream_id: u32
§eos_buffer: Option<u32>
§client_awaits_eos: bool
§responses: Vec<VideoEvtResponseType>
Implementations§
source§impl EosBufferManager
impl EosBufferManager
sourcefn try_reserve_eos_buffer(&mut self, buffer_id: u32) -> bool
fn try_reserve_eos_buffer(&mut self, buffer_id: u32) -> bool
Attempt to reserve buffer buffer_id
for use as EOS buffer.
This method should be called by the output buffer queueing code of the device. It returns
true
if the buffer has been kept aside for EOS, false
otherwise (which means another
buffer is already kept aside for EOS). If true
is returned, the client must not use the
buffer for any other purpose.
sourcefn try_complete_eos(
&mut self,
responses: Vec<VideoEvtResponseType>
) -> Option<Vec<VideoEvtResponseType>>
fn try_complete_eos( &mut self, responses: Vec<VideoEvtResponseType> ) -> Option<Vec<VideoEvtResponseType>>
Attempt to complete an EOS event using the previously reserved buffer, if available.
responses
is a vector of responses to be sent to the driver along with the EOS buffer. If
an EOS buffer has been made available using the try_reserve_eos_buffer
method, then this
method returns the responses
vector with the EOS buffer dequeue appended in first
position.
If no EOS buffer is available, then the contents of responses
is put aside, and will be
returned the next time this method is called with an EOS buffer available. When this
happens, client_awaits_eos
will be set to true, and the client can check this member and
call this method again right after queuing the next buffer to obtain the EOS response as
soon as is possible.
Auto Trait Implementations§
impl RefUnwindSafe for EosBufferManager
impl Send for EosBufferManager
impl Sync for EosBufferManager
impl Unpin for EosBufferManager
impl UnwindSafe for EosBufferManager
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<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.