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

Reply via email to