[pulseaudio-discuss] [PATCH] client: Don't update smoother while corked

Arun Raghavan arun.raghavan at collabora.co.uk
Tue Jan 11 10:28:25 PST 2011

This prevents the smoother attached to the stream clock from being
updated while the stream is corked, which in turn ensures that once
corking is completed, pa_stream_get_time() always returns the same value
until the stream is uncorked - i.e., the clock does not advance when the
client believes that it will not.

The actual call to pa_smoother_put() happens on things like stream
suspend/unsuspend, which trigger timing updates. This changes the
smoother coefficients, which means that a call to pa_smoother_get() for
the same value of 'x' can return different values before and after a
timing update.
 src/pulse/stream.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 87c24ba..addc36a 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -1733,8 +1733,8 @@ static void stream_get_timing_info_callback(pa_pdispatch *pd, uint32_t command,
                 i->read_index -= (int64_t) pa_memblockq_get_length(o->stream->record_memblockq);
-        /* Update smoother */
-        if (o->stream->smoother) {
+        /* Update smoother if we're not corked */
+        if (o->stream->smoother && !o->stream->corked) {
             pa_usec_t u, x;
             u = x = pa_rtclock_now() - i->transport_usec;

More information about the pulseaudio-discuss mailing list