summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWang Xingchao <xingchao.wang@intel.com>2011-08-09 10:14:40 -0400
committerColin Guthrie <colin@mageia.org>2011-08-11 15:30:27 +0200
commite564129b8ff6525eaecdd997a907cd6065cb587e (patch)
treef7de970019b1142d914fd659dd2de7b795373935
parentb4e938e1944ef49de2466aae06f824ce4db1c81e (diff)
alsa: Update process_usec before going to sleep
During check_left_to_play/record(), the watermark may increase/decrease. So before sleeping, update the actural sleep time based on latest watermark.
-rw-r--r--src/modules/alsa/alsa-sink.c2
-rw-r--r--src/modules/alsa/alsa-source.c2
2 files changed, 4 insertions, 0 deletions
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 7b9b8d8d1..395432a56 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -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;
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index cbf1dc248..bdd4493da 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -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;