alsa: Improve chunk timings.
authorAndre Noll <maan@systemlinux.org>
Tue, 25 Nov 2008 23:27:55 +0000 (00:27 +0100)
committerAndre Noll <maan@systemlinux.org>
Tue, 25 Nov 2008 23:27:55 +0000 (00:27 +0100)
And get rid of magic constants.

alsa_write.c

index 8e8b693..9163815 100644 (file)
@@ -186,14 +186,16 @@ static int alsa_write_post_select(__a_unused struct sched *s,
                        frames, (int)ret);
                return -E_ALSA_WRITE;
        }
-       if (ret == -EAGAIN) { /* try again in 5ms */
-               PARA_WARNING_LOG("EAGAIN\n");
-               ms2tv(5, &tv);
-       } else {
+       if (ret == -EAGAIN)
+               PARA_DEBUG_LOG("EAGAIN\n");
+       else
                wn->written += ret * pad->bytes_per_frame;
-               ms2tv(pad->buffer_time / 4000, &tv);
+       if (ret == frames) /* we wrote everything, try again immediately */
+               pad->next_chunk = *now;
+       else {
+               ms2tv(pad->buffer_time / pad->bytes_per_frame / 1000, &tv);
+               tv_add(now, &tv, &pad->next_chunk);
        }
-       tv_add(now, &tv, &pad->next_chunk);
        return 1;
 }