diff options
author | Chris Robinson <[email protected]> | 2015-11-07 23:05:45 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2015-11-07 23:05:45 -0800 |
commit | 9891d61206faa8b4fb1bd146b74da010264a4b69 (patch) | |
tree | e9bed0c58652b1476f28187ac0ede4851863f618 | |
parent | fe00b65d9ad17bdd29fdbac7916d3a740eb1b467 (diff) |
Add options to disable Pulse's and ALSA's resamplers
-rw-r--r-- | Alc/backends/alsa.c | 7 | ||||
-rw-r--r-- | Alc/backends/pulseaudio.c | 3 | ||||
-rw-r--r-- | alsoftrc.sample | 16 |
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 ## |