diff options
author | Wang Xingchao <xingchao.wang@intel.com> | 2011-08-09 10:14:40 -0400 |
---|---|---|
committer | Colin Guthrie <colin@mageia.org> | 2011-08-11 15:30:27 +0200 |
commit | e564129b8ff6525eaecdd997a907cd6065cb587e (patch) | |
tree | f7de970019b1142d914fd659dd2de7b795373935 | |
parent | b4e938e1944ef49de2466aae06f824ce4db1c81e (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.c | 2 | ||||
-rw-r--r-- | src/modules/alsa/alsa-source.c | 2 |
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; |