[pulseaudio-commits] [SCM] PulseAudio Sound Server branch, master, updated. v0.9.16-test5-77-g80c6937
Lennart Poettering
gitmailer-noreply at 0pointer.de
Sun Aug 23 13:34:39 PDT 2009
This is an automated email from the git hooks/post-receive script. It was
generated because of a push to the "PulseAudio Sound Server" repository.
The master branch has been updated
from a0f01ddc951694e1d13f44dc3a5d0d3fb2daa142 (commit)
- Log -----------------------------------------------------------------
80c6937 alsa: increase interval between smoother updates exponentially for alsa sources, following the scheme for sinks
-----------------------------------------------------------------------
Summary of changes:
src/modules/alsa/alsa-sink.c | 8 +++-----
src/modules/alsa/alsa-source.c | 20 ++++++++++++++++++--
2 files changed, 21 insertions(+), 7 deletions(-)
-----------------------------------------------------------------------
commit 80c693730365c1a375a5c0e781f38e7f165b37bf
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Aug 23 22:34:42 2009 +0200
alsa: increase interval between smoother updates exponentially for alsa sources, following the scheme for sinks
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index c369472..b99ed78 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -733,10 +733,9 @@ static void update_smoother(struct userdata *u) {
now1 = pa_rtclock_now();
/* check if the time since the last update is bigger than the interval */
- if (u->last_smoother_update > 0) {
+ if (u->last_smoother_update > 0)
if (u->last_smoother_update + u->smoother_interval > now1)
return;
- }
position = (int64_t) u->write_count - ((int64_t) delay * (int64_t) u->frame_size);
@@ -745,11 +744,11 @@ static void update_smoother(struct userdata *u) {
now2 = pa_bytes_to_usec((uint64_t) position, &u->sink->sample_spec);
+ pa_smoother_put(u->smoother, now1, now2);
+
u->last_smoother_update = now1;
/* exponentially increase the update interval up to the MAX limit */
u->smoother_interval = PA_MIN (u->smoother_interval * 2, SMOOTHER_MAX_INTERVAL);
-
- pa_smoother_put(u->smoother, now1, now2);
}
static pa_usec_t sink_get_latency(struct userdata *u) {
@@ -927,7 +926,6 @@ static int unsuspend(struct userdata *u) {
u->first = TRUE;
u->since_start = 0;
-
pa_log_info("Resumed successfully...");
return 0;
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 7da3755..336027a 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -65,6 +65,9 @@
#define TSCHED_MIN_SLEEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms */
#define TSCHED_MIN_WAKEUP_USEC (4*PA_USEC_PER_MSEC) /* 4ms */
+#define SMOOTHER_MIN_INTERVAL (2*PA_USEC_PER_MSEC) /* 2ms */
+#define SMOOTHER_MAX_INTERVAL (200*PA_USEC_PER_MSEC) /* 200ms */
+
#define VOLUME_ACCURACY (PA_VOLUME_NORM/100)
struct userdata {
@@ -108,6 +111,8 @@ struct userdata {
pa_smoother *smoother;
uint64_t read_count;
+ pa_usec_t smoother_interval;
+ pa_usec_t last_smoother_update;
pa_reserve_wrapper *reserve;
pa_hook_slot *reserve_slot;
@@ -691,15 +696,23 @@ static void update_smoother(struct userdata *u) {
now1 = pa_timespec_load(&htstamp);
}
- position = u->read_count + ((uint64_t) delay * (uint64_t) u->frame_size);
-
/* Hmm, if the timestamp is 0, then it wasn't set and we take the current time */
if (now1 <= 0)
now1 = pa_rtclock_now();
+ /* check if the time since the last update is bigger than the interval */
+ if (u->last_smoother_update > 0)
+ if (u->last_smoother_update + u->smoother_interval > now1)
+ return;
+
+ position = u->read_count + ((uint64_t) delay * (uint64_t) u->frame_size);
now2 = pa_bytes_to_usec(position, &u->source->sample_spec);
pa_smoother_put(u->smoother, now1, now2);
+
+ u->last_smoother_update = now1;
+ /* exponentially increase the update interval up to the MAX limit */
+ u->smoother_interval = PA_MIN (u->smoother_interval * 2, SMOOTHER_MAX_INTERVAL);
}
static pa_usec_t source_get_latency(struct userdata *u) {
@@ -862,6 +875,8 @@ static int unsuspend(struct userdata *u) {
u->read_count = 0;
pa_smoother_reset(u->smoother, pa_rtclock_now(), TRUE);
+ u->smoother_interval = SMOOTHER_MIN_INTERVAL;
+ u->last_smoother_update = 0;
pa_log_info("Resumed successfully...");
@@ -1469,6 +1484,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
5,
pa_rtclock_now(),
FALSE);
+ u->smoother_interval = SMOOTHER_MIN_INTERVAL;
dev_id = pa_modargs_get_value(
ma, "device_id",
--
hooks/post-receive
PulseAudio Sound Server
More information about the pulseaudio-commits
mailing list