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.
This commit is contained in:
Wang Xingchao 2011-08-09 10:14:40 -04:00 committed by Colin Guthrie
parent b4e938e194
commit e564129b8f
2 changed files with 4 additions and 0 deletions

View 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) { if (u->use_tsched) {
*sleep_usec = pa_bytes_to_usec(left_to_play, &u->sink->sample_spec); *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) if (*sleep_usec > process_usec)
*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) { if (u->use_tsched) {
*sleep_usec = pa_bytes_to_usec(left_to_play, &u->sink->sample_spec); *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) if (*sleep_usec > process_usec)
*sleep_usec -= process_usec; *sleep_usec -= process_usec;

View 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) { if (u->use_tsched) {
*sleep_usec = pa_bytes_to_usec(left_to_record, &u->source->sample_spec); *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) if (*sleep_usec > process_usec)
*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) { if (u->use_tsched) {
*sleep_usec = pa_bytes_to_usec(left_to_record, &u->source->sample_spec); *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) if (*sleep_usec > process_usec)
*sleep_usec -= process_usec; *sleep_usec -= process_usec;