}
/// Frame skipping mode for decoders.
-#[derive(Clone,Copy,PartialEq,Debug)]
+#[derive(Clone,Copy,PartialEq,Debug,Default)]
pub enum FrameSkipMode {
/// Decode all frames.
+ #[default]
None,
/// Decode all key frames.
KeyframesOnly,
IntraOnly,
}
-impl Default for FrameSkipMode {
- fn default() -> Self {
- FrameSkipMode::None
- }
-}
-
impl FromStr for FrameSkipMode {
type Err = DecoderError;
pub struct EncodeParameters {
/// Input format.
pub format: NACodecTypeInfo,
- /// Time base numerator. Ignored for audio.
+ /// Time base numerator.
+ ///
+ /// Audio encoders generally do not need it but some may use it to set e.g. frame length, so set it to the video/container codec timebase in such case.
pub tb_num: u32,
- /// Time base denominator. Ignored for audio.
+ /// Time base denominator.
+ ///
+ /// Audio encoders generally do not need it but some may use it to set e.g. frame length, so set it to the video/container codec timebase in such case.
pub tb_den: u32,
/// Bitrate in bits per second.
pub bitrate: u32,
/// Trait for packetisers (objects that form full packets from raw stream data).
pub trait NAPacketiser {
+ /// Provides the reference stream from the demuxer to the packetiser.
+ ///
+ /// This may be useful in cases when packetiser cannot determine stream parameters by itself.
+ fn attach_stream(&mut self, stream: NAStreamRef);
/// Queues new raw stream data for parsing.
///
/// Returns false is the internal buffer grows too large.
fn add_data(&mut self, src: &[u8]) -> bool;
/// Tries to retrieve stream information from the data.
///
- /// Returns [`NAStream`] reference on success (with stream ID set to `id`), [`ShortData`] when there is not enough data to parse the headers and other errors in case there was an error parsing the data.
+ /// Returns [`NAStream`] reference on success (with stream ID set to `id`), [`ShortData`] when there is not enough data to parse the headers, [`MissingReference`] when stream parsing is not possible without reference information provided by [`attach_stream`] and other errors in case there was an error parsing the data.
///
/// [`NAStream`]: ../frame/struct.NAStream.html
/// [`ShortData`]: ./enum.DecoderError.html#variant.ShortData
+ /// [`MissingReference`]: ./enum.DecoderError.html#variant.MissingReference
+ /// [`attach_stream`]: ./trait.NAPacketiser.html#tymethod.attach_stream
fn parse_stream(&mut self, id: u32) -> DecoderResult<NAStreamRef>;
/// Tries to discard junk data until the first possible packet header.
///