aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2015-11-07 23:05:45 -0800
committerChris Robinson <[email protected]>2015-11-07 23:05:45 -0800
commit9891d61206faa8b4fb1bd146b74da010264a4b69 (patch)
treee9bed0c58652b1476f28187ac0ede4851863f618
parentfe00b65d9ad17bdd29fdbac7916d3a740eb1b467 (diff)
Add options to disable Pulse's and ALSA's resamplers
-rw-r--r--Alc/backends/alsa.c7
-rw-r--r--Alc/backends/pulseaudio.c3
-rw-r--r--alsoftrc.sample16
3 files changed, 22 insertions, 4 deletions
diff --git a/Alc/backends/alsa.c b/Alc/backends/alsa.c
index 97723cae..9a443c09 100644
--- a/Alc/backends/alsa.c
+++ b/Alc/backends/alsa.c
@@ -770,8 +770,11 @@ static ALCboolean ALCplaybackAlsa_reset(ALCplaybackAlsa *self)
}
CHECK(snd_pcm_hw_params_set_channels(self->pcmHandle, hp, ChannelsFromDevFmt(device->FmtChans)));
/* set rate (implicitly constrains period/buffer parameters) */
- if(snd_pcm_hw_params_set_rate_resample(self->pcmHandle, hp, 0) < 0)
- ERR("Failed to disable ALSA resampler\n");
+ if(GetConfigValueBool(al_string_get_cstr(device->DeviceName), "alsa", "allow-resampler", 0))
+ {
+ if(snd_pcm_hw_params_set_rate_resample(self->pcmHandle, hp, 0) < 0)
+ ERR("Failed to disable ALSA resampler\n");
+ }
CHECK(snd_pcm_hw_params_set_rate_near(self->pcmHandle, hp, &rate, NULL));
/* set buffer time (implicitly constrains period/buffer parameters) */
if((err=snd_pcm_hw_params_set_buffer_time_near(self->pcmHandle, hp, &bufferLen, NULL)) < 0)
diff --git a/Alc/backends/pulseaudio.c b/Alc/backends/pulseaudio.c
index ffbf04b2..9ad04a71 100644
--- a/Alc/backends/pulseaudio.c
+++ b/Alc/backends/pulseaudio.c
@@ -950,7 +950,8 @@ static ALCboolean ALCpulsePlayback_reset(ALCpulsePlayback *self)
ALCpulsePlayback_sinkInfoCallback, self);
wait_for_operation(o, self->loop);
- if(!(device->Flags&DEVICE_FREQUENCY_REQUEST))
+ if(GetConfigValueBool(al_string_get_cstr(device->DeviceName), "pulse", "fix-rate", 0) ||
+ !(device->Flags&DEVICE_FREQUENCY_REQUEST))
flags |= PA_STREAM_FIX_RATE;
flags |= PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_AUTO_TIMING_UPDATE;
flags |= PA_STREAM_ADJUST_LATENCY;
diff --git a/alsoftrc.sample b/alsoftrc.sample
index 3e7494dd..d40e6c37 100644
--- a/alsoftrc.sample
+++ b/alsoftrc.sample
@@ -132,7 +132,7 @@
# sinc4 - extrapolates samples using a 4-point Sinc filter
# sinc8 - extrapolates samples using an 8-point Sinc filter
# bsinc - extrapolates samples using a band-limited Sinc filter (varying
-# between 12 and 24 points)
+# between 12 and 24 points, with anti-aliasing)
# Specifying other values will result in using the default (linear).
#resampler = linear
@@ -227,6 +227,13 @@
# etc).
#allow-moves = false
+## fix-rate:
+# Specifies whether to match the playback device's sample rate to the hardware
+# device's sample rate. Enabling this allows OpenAL Soft to resample sources
+# directly to the actual output rate, avoiding a second resample pass by the
+# PulseAudio server.
+#fix-rate = false
+
##
## ALSA backend stuff
##
@@ -273,6 +280,13 @@
# and anything else will force mmap off.
#mmap = true
+## allow-resampler:
+# Specifies whether to allow ALSA's built-in resampler. Enabling this will
+# allow the playback device to be set to a different sample rate than the
+# actual output, causing ALSA to apply its own resampling pass after OpenAL
+# Soft resamples and mixes the sources and effects for output.
+#allow-resampler = false
+
##
## OSS backend stuff
##