From 6f8268df40b038d3f2463224a1872759f7da56ba Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 7 Aug 2019 13:06:14 +0200 Subject: [PATCH] audioconvert: remove speex resampler It's slower and less accurate then the native one. --- spa/meson.build | 3 - spa/plugins/audioconvert/benchmark-resample.c | 11 --- spa/plugins/audioconvert/meson.build | 4 +- spa/plugins/audioconvert/resample-speex.h | 83 ------------------- spa/plugins/audioconvert/resample.c | 5 +- 5 files changed, 3 insertions(+), 103 deletions(-) delete mode 100644 spa/plugins/audioconvert/resample-speex.h diff --git a/spa/meson.build b/spa/meson.build index 47a071e23..c6edc8b2f 100644 --- a/spa/meson.build +++ b/spa/meson.build @@ -19,9 +19,6 @@ if get_option('spa-plugins') if get_option('alsa') alsa_dep = dependency('alsa') endif - if get_option('audioconvert') - speexdsp_dep = dependency('speexdsp') - endif if get_option('bluez5') bluez_dep = dependency('bluez', version : '>= 4.101') sbc_dep = dependency('sbc') diff --git a/spa/plugins/audioconvert/benchmark-resample.c b/spa/plugins/audioconvert/benchmark-resample.c index 486e81884..0c5085da1 100644 --- a/spa/plugins/audioconvert/benchmark-resample.c +++ b/spa/plugins/audioconvert/benchmark-resample.c @@ -31,7 +31,6 @@ #include "resample.h" #include "resample-native.h" -#include "resample-speex.h" #define MAX_SAMPLES 4096 #define MAX_CHANNELS 11 @@ -176,16 +175,6 @@ int main(int argc, char *argv[]) } #endif - for (i = 0; i < SPA_N_ELEMENTS(in_rates); i++) { - spa_zero(r); - r.channels = 2; - r.i_rate = in_rates[i]; - r.o_rate = out_rates[i]; - impl_speex_init(&r); - run_test("speex", "def", &r); - resample_free(&r); - } - qsort(results, n_results, sizeof(struct stats), compare_func); for (i = 0; i < n_results; i++) { diff --git a/spa/plugins/audioconvert/meson.build b/spa/plugins/audioconvert/meson.build index 5cdc20b8d..9013c348a 100644 --- a/spa/plugins/audioconvert/meson.build +++ b/spa/plugins/audioconvert/meson.build @@ -79,7 +79,7 @@ audioconvertlib = shared_library('spa-audioconvert', audioconvert_sources, c_args : simd_cargs, include_directories : [spa_inc], - dependencies : [ speexdsp_dep, mathlib ], + dependencies : [ mathlib ], link_with : simd_dependencies, install : true, install_dir : '@0@/spa/audioconvert/'.format(get_option('libdir'))) @@ -119,7 +119,7 @@ benchmark_apps = [ foreach a : benchmark_apps benchmark(a, executable(a, a + '.c', - dependencies : [dl_lib, pthread_lib, mathlib, speexdsp_dep, ], + dependencies : [dl_lib, pthread_lib, mathlib, ], include_directories : [spa_inc ], c_args : [ simd_cargs, '-D_GNU_SOURCE' ], link_with : simd_dependencies, diff --git a/spa/plugins/audioconvert/resample-speex.h b/spa/plugins/audioconvert/resample-speex.h deleted file mode 100644 index e1d4d2faf..000000000 --- a/spa/plugins/audioconvert/resample-speex.h +++ /dev/null @@ -1,83 +0,0 @@ -/* Spa - * - * Copyright © 2018 Wim Taymans - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#include - -static void impl_speex_free(struct resample *r) -{ - if (r->data) - speex_resampler_destroy(r->data); - r->data = NULL; -} - -static void impl_speex_update_rate(struct resample *r, double rate) -{ - r->rate = rate; - speex_resampler_set_rate_frac(r->data, - r->i_rate / rate, r->o_rate, r->i_rate, r->o_rate); -} - -static void impl_speex_process(struct resample *r, - const void *SPA_RESTRICT src[], uint32_t *in_len, - void * SPA_RESTRICT dst[], uint32_t *out_len) -{ - uint32_t c, i, o; - - if (r->i_rate == r->o_rate && r->rate == 1.0) { - o = i = SPA_MIN(*in_len, *out_len); - for (c = 0; c < r->channels; c++) - spa_memcpy(dst[c], src[c], o * sizeof(float)); - } - else { - for (c = 0; c < r->channels; c++) { - i = *in_len; - o = *out_len; - speex_resampler_process_float(r->data, c, src[c], &i, dst[c], &o); - } - } - *in_len = i; - *out_len = o; -} - -static void impl_speex_reset (struct resample *r) -{ -} - -static int impl_speex_init(struct resample *r) -{ - int err; - - r->rate = 1.0; - r->free = impl_speex_free; - r->update_rate = impl_speex_update_rate; - r->process = impl_speex_process; - r->reset = impl_speex_reset; - r->data = speex_resampler_init_frac(r->channels, - r->i_rate, r->o_rate, r->i_rate, r->o_rate, - SPEEX_RESAMPLER_QUALITY_DEFAULT, &err); - if (r->data == NULL) - return -ENOMEM; - - return 0; -} diff --git a/spa/plugins/audioconvert/resample.c b/spa/plugins/audioconvert/resample.c index 0ab12fb6a..d1a9032ec 100644 --- a/spa/plugins/audioconvert/resample.c +++ b/spa/plugins/audioconvert/resample.c @@ -39,7 +39,6 @@ #include "resample.h" -#include "resample-speex.h" #include "resample-peaks.h" #include "resample-native.h" @@ -163,10 +162,8 @@ static int setup_convert(struct impl *this, if (this->peaks) err = impl_peaks_init(&this->resample); - else if (1) - err = impl_native_init(&this->resample); else - err = impl_speex_init(&this->resample); + err = impl_native_init(&this->resample); return err; }