Skip to main content

VideoDecoder

Struct VideoDecoder 

Source
pub struct VideoDecoder { /* private fields */ }
Expand description

A hardware video decoder.

Feed access units in decode order with decode, which returns every picture and format change that is ready, and collect the rest with flush at the end of the stream.

Implementations§

Source§

impl VideoDecoder

Source

pub fn new(config: DecoderConfig) -> Result<Self>

Opens a decoder for config.

On Linux the first V4L2 memory-to-memory device that decodes the codec to NV12 is used. Setting EDGEFIRST_CODEC_V4L2_DECODER to a device node uses that node only.

§Errors

CodecError::InvalidConfig when a provided pool is empty or not in DMA-BUF memory, and CodecError::NoDevice when there is no decoder.

Source

pub fn decode( &mut self, access_unit: &[u8], pts: u64, ) -> Result<Vec<DecodeEvent>>

Decodes one access unit (see access_units), whose picture is tagged with pts.

Returns, in order, every event ready by the time the device has taken the access unit; it may be empty, and frames may belong to earlier access units, since devices hold pictures back for reordering. The first access unit yields DecodeEvent::Reconfigured once the headers are parsed.

§Errors

CodecError::PoolExhausted when the caller holds the frames in every output buffer, so the device cannot decode further; drop frames and decode the same access unit again. CodecError::Timeout when the device makes no progress otherwise. CodecError::InvalidInput when the access unit is empty or larger than the device’s bitstream buffers. Events that became ready before an error are returned by the next call.

Source

pub fn flush(&mut self) -> Result<Vec<DecodeEvent>>

Drains the decoder: returns every event not yet returned, in order.

The decoder accepts new access units afterwards, starting a new sequence: the next access unit must be decodable on its own, an IDR picture with its SPS and PPS, as at the start of a stream or after a seek.

§Errors

CodecError::PoolExhausted when the caller holds the frames in every output buffer the drain needs; drop frames and flush again. CodecError::Timeout when the device does not finish draining.

Source

pub fn stream_info(&self) -> Option<&StreamInfo>

The current stream’s geometry, once known.

Source

pub fn device(&self) -> String

The device that decodes, for logs (a device node on Linux).

Trait Implementations§

Source§

impl Debug for VideoDecoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more