]> code.delx.au - pulseaudio/commitdiff
alsa: Update process_usec before going to sleep
authorWang Xingchao <xingchao.wang@intel.com>
Tue, 9 Aug 2011 14:14:40 +0000 (10:14 -0400)
committerColin Guthrie <colin@mageia.org>
Thu, 11 Aug 2011 13:30:27 +0000 (15:30 +0200)
During check_left_to_play/record(), the watermark may increase/decrease. So before
sleeping, update the actural sleep time based on latest watermark.

src/modules/alsa/alsa-sink.c
src/modules/alsa/alsa-source.c

index 7b9b8d8d10a55afce801c0a9c834e72b23b182e6..395432a56fecfd51bd87cf95fe85a4b35421b448 100644 (file)
@@ -644,6 +644,7 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
 
     if (u->use_tsched) {
         *sleep_usec = pa_bytes_to_usec(left_to_play, &u->sink->sample_spec);
+        process_usec = pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec);
 
         if (*sleep_usec > process_usec)
             *sleep_usec -= process_usec;
@@ -784,6 +785,7 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
 
     if (u->use_tsched) {
         *sleep_usec = pa_bytes_to_usec(left_to_play, &u->sink->sample_spec);
+        process_usec = pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec);
 
         if (*sleep_usec > process_usec)
             *sleep_usec -= process_usec;
index cbf1dc248c881b260925606f9669ad9b873af325..bdd4493da0ef63e3d953d588da796f1a893ece0a 100644 (file)
@@ -608,6 +608,7 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
 
     if (u->use_tsched) {
         *sleep_usec = pa_bytes_to_usec(left_to_record, &u->source->sample_spec);
+        process_usec = pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec);
 
         if (*sleep_usec > process_usec)
             *sleep_usec -= process_usec;
@@ -737,6 +738,7 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
 
     if (u->use_tsched) {
         *sleep_usec = pa_bytes_to_usec(left_to_record, &u->source->sample_spec);
+        process_usec = pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec);
 
         if (*sleep_usec > process_usec)
             *sleep_usec -= process_usec;