diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-11-20 17:49:30 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-11-20 17:49:30 +0100 |
commit | a3b5a944885ff92233aa02e390312fbc04671686 (patch) | |
tree | 24777d81f87357a846447d951d1613d64c2612c8 /src | |
parent | b8acf5586f3f8e2af61b81569a53749f4afd090b (diff) |
pulse: try to fix inaccuracy with uncork timing for streams that are created in corked state
Diffstat (limited to 'src')
-rw-r--r-- | src/pulse/stream.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/pulse/stream.c b/src/pulse/stream.c index 299796256..04a4242c0 100644 --- a/src/pulse/stream.c +++ b/src/pulse/stream.c @@ -376,6 +376,22 @@ static void check_smoother_status(pa_stream *s, pa_bool_t aposteriori, pa_bool_t if (!s->smoother) return; + if (!s->timing_info_valid && + !aposteriori && + !force_start && + !force_stop && + s->context->version >= 13) { + + /* If the server supports STARTED and UNDERFLOW events we take + * them as indications when audio really starts/stops playing, + * if we don't have any timing info yet -- instead of trying + * to be smart and guessing the server time. Otherwise the + * unknown transport delay we don't know might add too much + * noise to our time calculations. */ + + return; + } + x = pa_rtclock_now(); if (s->timing_info_valid) { @@ -390,7 +406,6 @@ static void check_smoother_status(pa_stream *s, pa_bool_t aposteriori, pa_bool_t else if (force_start || s->buffer_attr.prebuf == 0) pa_smoother_resume(s->smoother, x, TRUE); - /* Please note that we have no idea if playback actually started * if prebuf is non-zero! */ } |