pulse: try to fix inaccuracy with uncork timing for streams that are created in corke...
authorLennart Poettering <lennart@poettering.net>
Fri, 20 Nov 2009 16:49:30 +0000 (17:49 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 20 Nov 2009 16:49:30 +0000 (17:49 +0100)
src/pulse/stream.c

index 2997962..04a4242 100644 (file)
@@ -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! */
 }