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; -- 1.7.4.rc1