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

source

fn new(stream_id: u32) -> Self

Create a new EOS manager for stream stream_id.

source

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.

source

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.

source

fn reset(&mut self)

Reset the state of the manager, for use during e.g. stream resets.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V