summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Louis Bossart <pierre-louis.bossart@intel.com>2010-07-13 15:27:40 -0500
committerColin Guthrie <cguthrie@mandriva.org>2010-07-15 12:47:34 +0100
commitaaae99d89f9e02a5248d0226a58da05dd3b7e600 (patch)
treeed38494efefa5334d9033eed3d12d23872c09626
parent6c8660abd27b8e0c733fad0e03545fd9b9378f8b (diff)
alsa: disable rewinds when using ALSA plugins
This is required to when playing on a52: device, rewind is broken in those plugins. Credits to Michael Rans <mcarans@yahoo.co.uk> for finding this workaround, and Tanu Kaskinen <tanuk@iki.fi> for providing valuable feedback. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@intel.com>
-rw-r--r--src/modules/alsa/alsa-sink.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index cc7baf2c..a253cc5c 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -944,7 +944,12 @@ static int update_sw_params(struct userdata *u) {
}
pa_sink_set_max_request_within_thread(u->sink, u->hwbuf_size - u->hwbuf_unused);
- pa_sink_set_max_rewind_within_thread(u->sink, u->hwbuf_size);
+ if (pa_alsa_pcm_is_hw(u->pcm_handle))
+ pa_sink_set_max_rewind_within_thread(u->sink, u->hwbuf_size);
+ else {
+ pa_log_info("Disabling rewind_within_thread for device %s", u->device_name);
+ pa_sink_set_max_rewind_within_thread(u->sink, 0);
+ }
return 0;
}
@@ -1886,7 +1891,12 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
(double) pa_bytes_to_usec(u->hwbuf_size, &ss) / PA_USEC_PER_MSEC);
pa_sink_set_max_request(u->sink, u->hwbuf_size);
- pa_sink_set_max_rewind(u->sink, u->hwbuf_size);
+ if (pa_alsa_pcm_is_hw(u->pcm_handle))
+ pa_sink_set_max_rewind(u->sink, u->hwbuf_size);
+ else {
+ pa_log_info("Disabling rewind for device %s", u->device_name);
+ pa_sink_set_max_rewind(u->sink, 0);
+ }
if (u->use_tsched) {
u->tsched_watermark = pa_usec_to_bytes_round_up(pa_bytes_to_usec_round_up(tsched_watermark, &requested_ss), &u->sink->sample_spec);