]> code.delx.au - pulseaudio/commitdiff
client: Don't update smoother while corked
authorArun Raghavan <arun.raghavan@collabora.co.uk>
Tue, 11 Jan 2011 18:28:25 +0000 (23:58 +0530)
committerColin Guthrie <cguthrie@mandriva.org>
Sat, 15 Jan 2011 16:08:45 +0000 (16:08 +0000)
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

index 87c24ba83c187ad9c3d289d3e30684eade46e467..addc36aedfd2d240a9cb9cb817ecacfd17aff5fd 100644 (file)
@@ -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;