From 3ed80f31399c80a90bc3d2a845e739fff485d7c5 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 1 Dec 2013 13:11:19 +0100 Subject: pcm/ConfiguredResampler: convert boolean flag to enum Prepare for adding more resamplers. --- src/pcm/ConfiguredResampler.cxx | 44 +++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/pcm/ConfiguredResampler.cxx b/src/pcm/ConfiguredResampler.cxx index 92f3d0903..f562e4a2b 100644 --- a/src/pcm/ConfiguredResampler.cxx +++ b/src/pcm/ConfiguredResampler.cxx @@ -20,44 +20,62 @@ #include "config.h" #include "ConfiguredResampler.hxx" #include "FallbackResampler.hxx" +#include "ConfigGlobal.hxx" +#include "ConfigOption.hxx" +#include "ConfigError.hxx" +#include "util/Error.hxx" #ifdef HAVE_LIBSAMPLERATE #include "LibsamplerateResampler.hxx" -#include "ConfigGlobal.hxx" -#include "ConfigOption.hxx" #endif #include +enum class SelectedResampler { + FALLBACK, + #ifdef HAVE_LIBSAMPLERATE -static bool lsr_enabled; + LIBSAMPLERATE, #endif +}; + +static SelectedResampler selected_resampler = SelectedResampler::FALLBACK; bool pcm_resampler_global_init(Error &error) { -#ifdef HAVE_LIBSAMPLERATE const char *converter = config_get_string(CONF_SAMPLERATE_CONVERTER, ""); - lsr_enabled = strcmp(converter, "internal") != 0; - if (lsr_enabled) - return pcm_resample_lsr_global_init(converter, error); - else + if (strcmp(converter, "internal") == 0) return true; -#else - (void)error; - return true; + +#ifdef HAVE_LIBSAMPLERATE + selected_resampler = SelectedResampler::LIBSAMPLERATE; + return pcm_resample_lsr_global_init(converter, error); #endif + + if (*converter == 0) + return true; + + error.Format(config_domain, + "The samplerate_converter '%s' is not available", + converter); + return false; } PcmResampler * pcm_resampler_create() { + switch (selected_resampler) { + case SelectedResampler::FALLBACK: + return new FallbackPcmResampler(); + #ifdef HAVE_LIBSAMPLERATE - if (lsr_enabled) + case SelectedResampler::LIBSAMPLERATE: return new LibsampleratePcmResampler(); #endif + } - return new FallbackPcmResampler(); + gcc_unreachable(); } -- cgit v1.2.3