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: i64A source sample, at the stream’s rate, that a frame starts at.
period: i64The samples in every frame.
start_tolerance: i64The 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: i64The 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
impl AudioFrameGrid
Sourcepub fn place(&self, at: i64, frames: i64) -> i64
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.