Skip to main content

AudioFrameGrid

Struct AudioFrameGrid 

Source
pub struct AudioFrameGrid {
    pub anchor: i64,
    pub period: i64,
    pub start_tolerance: i64,
    pub trimmed_tolerance: i64,
}
Expand description

The source samples an audio stream’s frames start at, read from its first packets’ timestamps (audio_frame_grid): every period samples from anchor, at the stream’s rate.

A container that rounds timestamps (Matroska and WebM to the millisecond) stores a frame up to half its unit from where the frame starts, so the timestamp alone says where a frame starts only to that half unit, which is 24 samples at 48 kHz. A decode straight through places each frame where the one before it ended and is off by whatever the first timestamp was; a seek places the first frame after it by that frame’s own timestamp and is off by another amount. A codec whose frames are all one length (AAC’s 1024 samples, Opus’s 20 ms) puts every frame on one grid, and the first timestamps together say where it lies far more closely than any one of them: placing a first frame on it gives the samples a decode straight through gives, however it is reached.

Fields§

§anchor: i64

A source sample, at the stream’s rate, that a frame starts at.

§period: i64

The samples in every frame.

§start_tolerance: i64

The farthest a frame’s timestamp, as a sample, is from the start it stands for: half the rounding unit and the half sample of rounding it to a sample, rounded down to a whole sample after adding one.

§trimmed_tolerance: i64

The farthest the end of a frame shorter than period is from the grid: a decoder that drops a codec’s delay from the first frame after a start or a seek (Opus’s pre-skip) moves its timestamp by the samples dropped, rounded to the unit again, so twice the half unit and a sample.

Implementations§

Source§

impl AudioFrameGrid

Source

pub fn place(&self, at: i64, frames: i64) -> i64

Where a frame of frames samples whose timestamp puts it at source sample at starts: on the grid when its timestamp is within the grid’s rounding of it, otherwise at at.

A frame shorter than Self::period is first taken as the end of a frame a decoder dropped the start of (Opus’s pre-skip, after a start or a seek): it ends on the grid. Otherwise a frame starts on it.

Trait Implementations§

Source§

impl Clone for AudioFrameGrid

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for AudioFrameGrid

Source§

impl Debug for AudioFrameGrid

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Eq for AudioFrameGrid

Source§

impl PartialEq for AudioFrameGrid

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for AudioFrameGrid

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.