mirror of
https://github.com/mpv-player/mpv
synced 2025-02-14 19:07:14 +00:00
The internal time update function involved multiple problems: - Time was updated after WSOLA iteration. The means speed was updated one iteration later than it could be. - The update functions caused spikes of too many or too few samples advanced, leading to audio glitches on speed changes. - The inconsistent updates made it very difficult to produce gapless audio packets. - The `output_time` update function involved complicated feedback: `search_block_index` influenced how many frames from `input_buffer` are retained, which influenced how much `output_time` is changed, which influenced `search_block_index`. With these changes: - Time is updated before WSOLA iterations. Speed changes are effective instantly. - There are no spikes in playback speed during speed changes. - No significant gaps are introduced in output packets. - The time update function becomes (function calls omitted for brevity) output_time += ola_hop_size * playback_rate Functions received a `playback_rate` parameter to check how many samples are needed before iteration. Internal state is only updated when the iteration is actually run, so the speed is allowed to change until enough data is received. |
||
---|---|---|
.. | ||
decode | ||
filter | ||
out | ||
aframe.c | ||
aframe.h | ||
chmap_avchannel.c | ||
chmap_avchannel.h | ||
chmap_sel.c | ||
chmap_sel.h | ||
chmap.c | ||
chmap.h | ||
fmt-conversion.c | ||
fmt-conversion.h | ||
format.c | ||
format.h |