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
impl VaapiDecoderSession
sourcefn output_picture(
decoded_frame: &dyn DecodedHandle<Descriptor = BufferDescWithPicId>,
event_queue: &mut EventQueue<DecoderEvent>
) -> Result<()>
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
fn try_emit_flush_completed(&mut self) -> Result<()>
fn drain_submit_queue(&mut self) -> Result<(), VideoError>
fn process_decoder_events(&mut self) -> Result<(), VideoError>
fn try_make_progress(&mut self) -> Result<(), VideoError>
Trait Implementations§
source§impl DecoderSession for VaapiDecoderSession
impl DecoderSession for VaapiDecoderSession
source§fn set_output_parameters(
&mut self,
_: usize,
_: Format
) -> Result<(), VideoError>
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>
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 moresource§fn flush(&mut self) -> Result<(), VideoError>
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>
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>
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
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>
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 moresource§fn reuse_output_buffer(
&mut self,
picture_buffer_id: i32
) -> Result<(), VideoError>
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 moresource§fn read_event(&mut self) -> Result<DecoderEvent, VideoError>
fn read_event(&mut self) -> Result<DecoderEvent, VideoError>
Blocking call to read a single event from the event pipe.
Auto Trait Implementations§
impl !RefUnwindSafe for VaapiDecoderSession
impl !Send for VaapiDecoderSession
impl !Sync for VaapiDecoderSession
impl Unpin for VaapiDecoderSession
impl !UnwindSafe for VaapiDecoderSession
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
Mutably borrows from an owned value. Read more
§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>
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>
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)
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)
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.