diff options
| author | Lennart Poettering <lennart@poettering.net> | 2009-11-20 17:49:30 +0100 | 
|---|---|---|
| committer | Lennart Poettering <lennart@poettering.net> | 2009-11-23 05:03:13 +0100 | 
| commit | d6a851cd1609a39053d5ef34c180b9d07d56bf86 (patch) | |
| tree | 51cd6b0d29fcd3d4908b6fb6bc8a27ccfcbe4759 | |
| parent | 5c90723d31afd47510f89c4dc218401486072020 (diff) | |
pulse: try to fix inaccuracy with uncork timing for streams that are created in corked state
| -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 2bc2b1e4..5e53570e 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! */  } | 
