pulse: delay smoother update only when unpausing, not when pausing, since we don...
authorLennart Poettering <lennart@poettering.net>
Fri, 20 Nov 2009 18:48:08 +0000 (19:48 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 20 Nov 2009 18:48:08 +0000 (19:48 +0100)
src/pulse/stream.c

index 04a4242..4a44c31 100644 (file)
@@ -376,22 +376,6 @@ 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) {
@@ -403,8 +387,26 @@ static void check_smoother_status(pa_stream *s, pa_bool_t aposteriori, pa_bool_t
 
     if (s->suspended || s->corked || force_stop)
         pa_smoother_pause(s->smoother, x);
-    else if (force_start || s->buffer_attr.prebuf == 0)
+    else if (force_start || s->buffer_attr.prebuf == 0) {
+
+        if (!s->timing_info_valid &&
+            !aposteriori &&
+            !force_start &&
+            !force_stop &&
+            s->context->version >= 13) {
+
+            /* If the server supports STARTED 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 add too much noise to our time
+             * calculations. */
+
+            return;
+        }
+
         pa_smoother_resume(s->smoother, x, TRUE);
+    }
 
     /* Please note that we have no idea if playback actually started
      * if prebuf is non-zero! */