pub struct VaapiDecoderSession {
    codec: Box<dyn StatelessVideoDecoder<BufferDescWithPicId>>,
    output_queue_state: OutputQueueState,
    held_frames: BTreeMap<i32, BorrowedFrame>,
    submit_queue: VecDeque<PendingJob>,
    event_queue: EventQueue<DecoderEvent>,
    flushing: bool,
}
Expand description

A decoder session for the libva backend

Fields§

§codec: Box<dyn StatelessVideoDecoder<BufferDescWithPicId>>

The implementation for the codec specific logic.

§output_queue_state: OutputQueueState

The state for the output queue. Updated when set_output_buffer_count is called or when we detect a dynamic resolution change.

§held_frames: BTreeMap<i32, BorrowedFrame>

Frames currently held by us, indexed by picture_buffer_id.

§submit_queue: VecDeque<PendingJob>

Queue containing the buffers we have not yet submitted to the codec.

§event_queue: EventQueue<DecoderEvent>

The event queue we can use to signal new events.

§flushing: bool

Whether the decoder is currently flushing.

Implementations§

source§

impl VaapiDecoderSession

source

fn output_picture( decoded_frame: &dyn DecodedHandle<Descriptor = BufferDescWithPicId>, event_queue: &mut EventQueue<DecoderEvent> ) -> Result<()>

Copy raw decoded data from image into the output buffer

source

fn try_emit_flush_completed(&mut self) -> Result<()>

source

fn drain_submit_queue(&mut self) -> Result<(), VideoError>

source

fn process_decoder_events(&mut self) -> Result<(), VideoError>

source

fn try_make_progress(&mut self) -> Result<(), VideoError>

Trait Implementations§

source§

impl DecoderSession for VaapiDecoderSession

source§

fn set_output_parameters( &mut self, _: usize, _: Format ) -> Result<(), VideoError>

Tell how many output buffers will be used for this session and which format they will carry. This method must be called after a ProvidePictureBuffers event is emitted, and before the first call to use_output_buffer().
source§

fn decode( &mut self, resource_id: u32, timestamp: u64, resource: GuestResourceHandle, offset: u32, bytes_used: u32 ) -> Result<(), VideoError>

Decode the compressed stream contained in [offset..offset+bytes_used] of the shared memory in the input resource. Read more
source§

fn flush(&mut self) -> Result<(), VideoError>

Flush the decoder device, i.e. finish processing all queued decode requests and emit frames for them. Read more
source§

fn reset(&mut self) -> Result<(), VideoError>

Reset the decoder device, i.e. cancel all pending decoding requests. Read more
source§

fn clear_output_buffers(&mut self) -> Result<(), VideoError>

Immediately release all buffers passed using use_output_buffer() and reuse_output_buffer().
source§

fn event_pipe(&self) -> &dyn AsRawDescriptor

Returns the event pipe on which the availability of events will be signaled. Note that the returned value is borrowed and only valid as long as the session is alive.
source§

fn use_output_buffer( &mut self, picture_buffer_id: i32, resource: GuestResource ) -> Result<(), VideoError>

Ask the device to use resource to store decoded frames according to its layout. picture_buffer_id is the ID of the picture that will be reproduced in PictureReady events using this buffer. Read more
source§

fn reuse_output_buffer( &mut self, picture_buffer_id: i32 ) -> Result<(), VideoError>

Ask the device to reuse an output buffer previously passed to use_output_buffer and that has previously been returned to the decoder in a PictureReady event. Read more
source§

fn read_event(&mut self) -> Result<DecoderEvent, VideoError>

Blocking call to read a single event from the event pipe.

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