2011/8/5 Pierre-Louis Bossart <[email protected]> > > during mmap_write(), there's chance to increase/decrease watermark. So > > before > > sleep, the actural sleep time should based on latest watermark. > [snip] > > @@ -787,6 +787,7 @@ static int unix_write(struct userdata *u, pa_usec_t > > *sleep_usec, pa_bool_t polle > > Change makes sense, but this should be done both for unix_write and > mmap_write for consistency. And while I am at it for alsa-source as well, > we > should keep the same algorithm across all cases. >
Thanks your review, Pierre. And Sorry for late reply, i was fighting for some bugs. Please find attached update patch based on your suggestions, which should fulfill the requirement. :-) --xingchao > -Pierre > > > > > _______________________________________________ > pulseaudio-discuss mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss >
From ebf3da22d535536b98aea705933bd1c3f318fc3f Mon Sep 17 00:00:00 2001 From: xingchao <[email protected]> Date: Tue, 9 Aug 2011 10:14:40 -0400 Subject: [PATCH] update process_usec before enter sleep during check_left_to_play/record(), there's chance to increase/decrease watermark. So before sleep, the actural sleep time should based on latest watermark. Signed-off-by: xingchao <[email protected]> --- src/modules/alsa/alsa-sink.c | 2 ++ 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 dd2546c..d2d2b40 100644 --- a/src/modules/alsa/alsa-sink.c +++ b/src/modules/alsa/alsa-sink.c @@ -647,6 +647,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; @@ -787,6 +788,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 ca3a913..60f5b5f 100644 --- a/src/modules/alsa/alsa-source.c +++ b/src/modules/alsa/alsa-source.c @@ -613,6 +613,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->sink->sample_spec); if (*sleep_usec > process_usec) *sleep_usec -= process_usec; @@ -742,6 +743,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->sink->sample_spec); if (*sleep_usec > process_usec) *sleep_usec -= process_usec; -- 1.7.1
_______________________________________________ pulseaudio-discuss mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
