mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-21 05:26:23 +00:00
A common problem for audio-playback is that the timestamps might not be completely linear. This is specially common when doing streaming over a network, where you can have jittery and/or bursty packettransmission, which again will often be reflected on the buffertimestamps. Now, the current implementation have a threshold that says how far the buffertimestamp is allowed o drift from the ideal aligned time in the ringbuffer. This was an instant reaction, and ment that if one buffer arrived with a timestamp that would breach the drift-tolerance, a resync would take place, and the result would be an audible gap for the listener. The annoying thing would be that in the case of a "timestamp-outlier", you would first resync one way, say +100ms, and then, if the next timestamp was "back on track", you would end up resyncing the other way (-100ms) So in fact, when you had only one buffer with slightly off timestamping, you would end up with *two* audible gaps. This is the problem this patch addresses. The way to "fix" this problem with the previous implementation, would have been to increase the "drift-tolerance" to a value that was greater than the largest timestamp-outlier one would normally expect. The big problem with this approach, however, is that it will allow normal operations with a huge offset timestamp vs running-time, which is detrimental to lip-sync. If the drift-tolerance is set to 200ms, it basically means that lip-sync can easily end up being off by that much. This patch will basically start a timer when the first breach of drift-tolerance is detected. If any following timestamp for the next n nanoseconds gets "back on track" within the threshold, it has basically eliminated the effect of an outlier, and the timer is stopped. If, however, all timestamps within this time-limit are breaching the threshold, we are probably facing a more permanent offset in the timestamps, and a resync is allowed to happen. So basically this patch offers something as rare as both higher accuracy, it terms of allowing smaller drift-tolerances, as well as much smoother, less glitchy playback! Commit message and improvments by Havard Graff. Fixes bug #640859. |
||
---|---|---|
.. | ||
.gitignore | ||
audio.c | ||
audio.def | ||
audio.h | ||
audio.vcproj | ||
audiofilter.vcproj | ||
gstaudioclock.c | ||
gstaudioclock.h | ||
gstaudiodecoder.c | ||
gstaudiodecoder.h | ||
gstaudioencoder.c | ||
gstaudioencoder.h | ||
gstaudiofilter.c | ||
gstaudiofilter.h | ||
gstaudioiec61937.c | ||
gstaudioiec61937.h | ||
gstaudiosink.c | ||
gstaudiosink.h | ||
gstaudiosrc.c | ||
gstaudiosrc.h | ||
gstbaseaudiosink.c | ||
gstbaseaudiosink.h | ||
gstbaseaudiosrc.c | ||
gstbaseaudiosrc.h | ||
gstringbuffer.c | ||
gstringbuffer.h | ||
Makefile.am | ||
mixerutils.c | ||
mixerutils.h | ||
multichannel.c | ||
multichannel.h | ||
TODO |