summaryrefslogtreecommitdiffstats
path: root/src/pulse/stream.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2009-11-20 17:49:30 +0100
committerLennart Poettering <lennart@poettering.net>2009-11-20 17:49:30 +0100
commita3b5a944885ff92233aa02e390312fbc04671686 (patch)
tree24777d81f87357a846447d951d1613d64c2612c8 /src/pulse/stream.c
parentb8acf5586f3f8e2af61b81569a53749f4afd090b (diff)
pulse: try to fix inaccuracy with uncork timing for streams that are created in corked state
Diffstat (limited to 'src/pulse/stream.c')
-rw-r--r--src/pulse/stream.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 29979625..04a4242c 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! */
}