summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pulsecore/resampler.c33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/pulsecore/resampler.c b/src/pulsecore/resampler.c
index c79a5df46..89ff5a131 100644
--- a/src/pulsecore/resampler.c
+++ b/src/pulsecore/resampler.c
@@ -256,13 +256,27 @@ static pa_sample_format_t pa_resampler_choose_work_format(
pa_assert(method >= 0);
pa_assert(method < PA_RESAMPLER_MAX);
- if ((method >= PA_RESAMPLER_SPEEX_FIXED_BASE && method <= PA_RESAMPLER_SPEEX_FIXED_MAX) ||
- (method == PA_RESAMPLER_FFMPEG))
- work_format = PA_SAMPLE_S16NE;
- else if (method == PA_RESAMPLER_TRIVIAL || method == PA_RESAMPLER_COPY || method == PA_RESAMPLER_PEAKS) {
+ if (method >= PA_RESAMPLER_SPEEX_FIXED_BASE && method <= PA_RESAMPLER_SPEEX_FIXED_MAX)
+ method = PA_RESAMPLER_SPEEX_FIXED_BASE;
- if (map_required || a != b || method == PA_RESAMPLER_PEAKS) {
+ switch (method) {
+ /* This block is for resampling functions that only
+ * support the S16 sample format. */
+ case PA_RESAMPLER_SPEEX_FIXED_BASE: /* fall through */
+ case PA_RESAMPLER_FFMPEG:
+ work_format = PA_SAMPLE_S16NE;
+ break;
+ /* This block is for resampling functions that support
+ * any sample format. */
+ case PA_RESAMPLER_COPY: /* fall through */
+ case PA_RESAMPLER_TRIVIAL:
+ if (!map_required && a == b) {
+ work_format = a;
+ break;
+ }
+ /* Else fall trough */
+ case PA_RESAMPLER_PEAKS:
if (a == PA_SAMPLE_S16NE || b == PA_SAMPLE_S16NE)
work_format = PA_SAMPLE_S16NE;
else if (a == PA_SAMPLE_S32NE || a == PA_SAMPLE_S32RE ||
@@ -276,12 +290,11 @@ static pa_sample_format_t pa_resampler_choose_work_format(
work_format = PA_SAMPLE_FLOAT32NE;
else
work_format = PA_SAMPLE_S16NE;
+ break;
- } else
- work_format = a;
-
- } else
- work_format = PA_SAMPLE_FLOAT32NE;
+ default:
+ work_format = PA_SAMPLE_FLOAT32NE;
+ }
return work_format;
}