prepare test for tracking down ens1371 issue
authorLennart Poettering <lennart@poettering.net>
Sun, 22 Feb 2009 02:55:54 +0000 (03:55 +0100)
committerLennart Poettering <lennart@poettering.net>
Sun, 22 Feb 2009 02:55:54 +0000 (03:55 +0100)
src/tests/alsa-time-test.c

index 3858bf7bfdb5741adb3dfb475e91131d20984179..e852c3f7a73010e8fbe892283adca28621c57a3c 100644 (file)
@@ -18,7 +18,7 @@ int main(int argc, char *argv[]) {
     snd_pcm_status_t *status;
     snd_pcm_t *pcm;
     unsigned rate = 44100;
-    unsigned periods = 0;
+    unsigned periods = 2;
     snd_pcm_uframes_t boundary, buffer_size = 44100/10; /* 100s */
     int dir = 1;
     struct timespec start, last_timestamp = { 0, 0 };
@@ -75,10 +75,13 @@ int main(int argc, char *argv[]) {
     r = snd_pcm_hw_params_current(pcm, hwparams);
     assert(r == 0);
 
+    r = snd_pcm_sw_params_current(pcm, swparams);
+    assert(r == 0);
+
     r = snd_pcm_sw_params_set_avail_min(pcm, swparams, 1);
     assert(r == 0);
 
-    r = snd_pcm_sw_params_set_period_event(pcm, swparams, 1);
+    r = snd_pcm_sw_params_set_period_event(pcm, swparams, 0);
     assert(r == 0);
 
     r = snd_pcm_hw_params_get_buffer_size(hwparams, &buffer_size);
@@ -116,7 +119,6 @@ int main(int argc, char *argv[]) {
 
     for (;;) {
         snd_pcm_sframes_t avail, delay;
-/*         snd_pcm_uframes_t avail2; */
         struct timespec now, timestamp;
         unsigned short revents;
         int written = 0;
@@ -131,29 +133,20 @@ int main(int argc, char *argv[]) {
 
         assert((revents & ~POLLOUT) == 0);
 
-/*         state = snd_pcm_get_state(pcm); */
-
         avail = snd_pcm_avail(pcm);
         assert(avail >= 0);
 
         r = snd_pcm_status(pcm, status);
         assert(r == 0);
 
-        printf("%lu %lu\n", (unsigned long) avail, (unsigned long) snd_pcm_status_get_avail(status));
+        /* This assertion fails from time to time. ALSA seems to be broken */
+/*         assert(avail == (snd_pcm_sframes_t) snd_pcm_status_get_avail(status)); */
+/*         printf("%lu %lu\n", (unsigned long) avail, (unsigned long) snd_pcm_status_get_avail(status)); */
 
-        assert(avail == (snd_pcm_sframes_t) snd_pcm_status_get_avail(status));
         snd_pcm_status_get_htstamp(status, &timestamp);
         delay = snd_pcm_status_get_delay(status);
         state = snd_pcm_status_get_state(status);
 
-/*         r = snd_pcm_avail_delay(pcm, &avail, &delay); */
-/*         assert(r == 0); */
-
-/*         r = snd_pcm_htimestamp(pcm, &avail2, &timestamp); */
-/*         assert(r == 0); */
-
-/*         assert(avail == (snd_pcm_sframes_t) avail2); */
-
         r = clock_gettime(CLOCK_MONOTONIC, &now);
         assert(r == 0);
 
@@ -191,6 +184,10 @@ int main(int argc, char *argv[]) {
                written,
                state);
 
+        /** When this assert is hit, most likely something bad
+         * happened, i.e. the avail jumped suddenly. */
+        assert((unsigned) avail <= buffer_size);
+
         last_avail = avail;
         last_delay = delay;
         last_timestamp = timestamp;