From cda544a11985de0082bd9bcf7616c403d68fb91d Mon Sep 17 00:00:00 2001 From: "v.audacity" Date: Thu, 18 Oct 2012 23:19:58 +0000 Subject: [PATCH] Upgrade to libsoxr 0.0.3. --- lib-src/audacity-patches.txt | 5 ++-- lib-src/libsoxr/CMakeLists.txt | 10 +++++--- lib-src/libsoxr/examples/examples-common.h | 2 ++ lib-src/libsoxr/soxr-config.h.in | 1 + lib-src/libsoxr/src/CMakeLists.txt | 6 ++++- lib-src/libsoxr/src/samplerate.h | 2 +- lib-src/libsoxr/src/soxr.c | 27 +++++++++++----------- lib-src/libsoxr/src/soxr.h | 2 +- 8 files changed, 32 insertions(+), 23 deletions(-) diff --git a/lib-src/audacity-patches.txt b/lib-src/audacity-patches.txt index a859dac9c..3f5fce89f 100644 --- a/lib-src/audacity-patches.txt +++ b/lib-src/audacity-patches.txt @@ -85,7 +85,7 @@ Upstream Version: 1.1.3 libresample ----------- Audio sample rate conversion library. Maintained by Audacity project. -(Not currently used, in favor of libsoxr.) +(Currently used only for Time Tracks, in favor of libsoxr elsewhere.) libsamplerate ------------- @@ -118,11 +118,10 @@ libsoxr ------- The SoX Resampler library performs one-dimensional sample-rate conversion, by Rob Sykes. -Version in Audacity SVN: 0.0.2 +Version in Audacity SVN: 0.0.3 Patches: * "libsoxr/configure" file: modified cmake params * modified .vcproj file in win\Projects\libsoxr - * modified src/samplerate.h (hopefully only until this change is made in master libsoxr source) libvamp diff --git a/lib-src/libsoxr/CMakeLists.txt b/lib-src/libsoxr/CMakeLists.txt index f7519bc67..0e666a89f 100644 --- a/lib-src/libsoxr/CMakeLists.txt +++ b/lib-src/libsoxr/CMakeLists.txt @@ -12,7 +12,7 @@ set (DESCRIPTION_SUMMARY "One-dimensional sample-rate conversion library") set (PROJECT_VERSION_MAJOR 0) set (PROJECT_VERSION_MINOR 0) -set (PROJECT_VERSION_PATCH 2) +set (PROJECT_VERSION_PATCH 3) # For shared-object; if, since the last public release: # * library code changed at all: ++revision @@ -103,6 +103,10 @@ if (WITH_AVFFT) endif () endif () +if (EXISTS ${PROJECT_SOURCE_DIR}/src/vr32.c) + set (HAVE_VR 1) +endif () + check_function_exists (lrint HAVE_LRINT) check_include_files (fenv.h HAVE_FENV_H) test_big_endian (WORDS_BIGENDIAN) @@ -115,7 +119,7 @@ macro (make_exist) endforeach () endmacro () -make_exist (HAVE_LRINT HAVE_FENV_H WORDS_BIGENDIAN HAVE_SIMD) +make_exist (HAVE_LRINT HAVE_FENV_H WORDS_BIGENDIAN HAVE_SIMD HAVE_VR) make_exist (HAVE_SINGLE_PRECISION HAVE_DOUBLE_PRECISION HAVE_AVFFT) @@ -246,7 +250,7 @@ if (UNIX) set (CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") set (CPACK_SOURCE_GENERATOR "TBZ2") - set (CPACK_SOURCE_IGNORE_FILES "/Debug/;/Release/;/cpack/;\\\\.swp$;\\\\.gitignore") + set (CPACK_SOURCE_IGNORE_FILES "/Debug/;/Release/;/cpack/;\\\\.swp$;\\\\.gitignore;.*vr32\\\\.c") include (CPack) diff --git a/lib-src/libsoxr/examples/examples-common.h b/lib-src/libsoxr/examples/examples-common.h index 0dad99501..cf8401c11 100644 --- a/lib-src/libsoxr/examples/examples-common.h +++ b/lib-src/libsoxr/examples/examples-common.h @@ -38,6 +38,8 @@ #endif #undef min +#undef max #define min(x,y) ((x)<(y)?(x):(y)) +#define max(x,y) ((x)>(y)?(x):(y)) #define AL(a) (sizeof(a)/sizeof((a)[0])) /* Array Length */ diff --git a/lib-src/libsoxr/soxr-config.h.in b/lib-src/libsoxr/soxr-config.h.in index b9e22ab4c..8e2a60367 100644 --- a/lib-src/libsoxr/soxr-config.h.in +++ b/lib-src/libsoxr/soxr-config.h.in @@ -7,6 +7,7 @@ #define SOXR_VERSION "@PROJECT_VERSION@" #define HAVE_SINGLE_PRECISION @HAVE_SINGLE_PRECISION@ #define HAVE_DOUBLE_PRECISION @HAVE_DOUBLE_PRECISION@ +#define HAVE_VR @HAVE_VR@ #define HAVE_AVFFT @HAVE_AVFFT@ #define HAVE_SIMD @HAVE_SIMD@ #define HAVE_FENV_H @HAVE_FENV_H@ diff --git a/lib-src/libsoxr/src/CMakeLists.txt b/lib-src/libsoxr/src/CMakeLists.txt index c1c6f58af..f4d467cb4 100644 --- a/lib-src/libsoxr/src/CMakeLists.txt +++ b/lib-src/libsoxr/src/CMakeLists.txt @@ -24,6 +24,10 @@ if (WITH_SINGLE_PRECISION) set (SP_SOURCES rate32 ${RDFT32}) endif () +if (HAVE_VR) + set (VR_SOURCES vr32) +endif () + if (HAVE_SIMD) set (SIMD_SOURCES rate32s ${RDFT32S} simd) foreach (source ${SIMD_SOURCES}) @@ -36,7 +40,7 @@ endif () # Libsoxr: add_library (${PROJECT_NAME} ${LIB_TYPE} ${PROJECT_NAME}.c data-io dbesi0 filter fft4g64 - ${SP_SOURCES} ${DP_SOURCES} ${SIMD_SOURCES}) + ${SP_SOURCES} ${VR_SOURCES} ${DP_SOURCES} ${SIMD_SOURCES}) set_target_properties (${PROJECT_NAME} PROPERTIES VERSION "${SO_VERSION}" SOVERSION ${SO_VERSION_MAJOR} diff --git a/lib-src/libsoxr/src/samplerate.h b/lib-src/libsoxr/src/samplerate.h index ef9459bed..911cc5d0c 100644 --- a/lib-src/libsoxr/src/samplerate.h +++ b/lib-src/libsoxr/src/samplerate.h @@ -1 +1 @@ -#include "soxr-lsr.h" \ No newline at end of file +#include "soxr-lsr.h" diff --git a/lib-src/libsoxr/src/soxr.c b/lib-src/libsoxr/src/soxr.c index 63349b1b0..3c0c1f827 100644 --- a/lib-src/libsoxr/src/soxr.c +++ b/lib-src/libsoxr/src/soxr.c @@ -23,7 +23,7 @@ typedef void sample_t; /* float or double */ typedef struct { sample_t * (* input)(void *, sample_t * samples, size_t n); - void (* process)(void *); + void (* process)(void *, size_t); sample_t const * (* output)(void *, sample_t * samples, size_t * n); void (* flush)(void *); void (* close)(void *); @@ -205,7 +205,7 @@ static bool cpu_has_simd(void) } #endif -extern control_block_t _soxr_rate32s_cb, _soxr_rate32_cb, _soxr_rate64_cb; +extern control_block_t _soxr_rate32s_cb, _soxr_rate32_cb, _soxr_rate64_cb, _soxr_vr32_cb; @@ -243,10 +243,17 @@ soxr_t soxr_create( p->seed = (unsigned long)time(0) ^ (unsigned long)p; #if HAVE_SINGLE_PRECISION - if (!HAVE_DOUBLE_PRECISION || (p->q_spec.bits <= 20 && !(p->q_spec.flags & SOXR_DOUBLE_PRECISION))) { + if (!HAVE_DOUBLE_PRECISION || (p->q_spec.bits <= 20 && !(p->q_spec.flags & SOXR_DOUBLE_PRECISION)) +#if HAVE_VR + || (p->q_spec.flags & SOXR_VR) +#endif + ) { p->deinterleave = (deinterleave_t)_soxr_deinterleave_f; p->interleave = (interleave_t)_soxr_interleave_f; memcpy(&p->control_block, +#if HAVE_VR + (p->q_spec.flags & SOXR_VR)? &_soxr_vr32_cb : +#endif #if HAVE_SIMD cpu_has_simd()? &_soxr_rate32s_cb : #endif @@ -385,15 +392,6 @@ soxr_error_t soxr_set_oi_ratio(soxr_t p, double oi_ratio) -#if 0 -soxr_error_t soxr_set_pitch(soxr_t p, long pitch) -{ - return soxr_set_oi_ratio(p, pow(2, -(double)pitch / OCTAVE_MULT)); -} -#endif - - - void soxr_delete(soxr_t p) { if (p) @@ -432,7 +430,8 @@ static void soxr_input_1ch(soxr_t p, unsigned i, soxr_cbuf_t src, size_t len) -static size_t soxr_input(soxr_t p, void const * in, size_t len) +size_t soxr_input(soxr_t p, void const * in, size_t len); +size_t soxr_input(soxr_t p, void const * in, size_t len) { bool separated = !!(p->io_spec.itype & SOXR_SPLIT); unsigned i; @@ -461,7 +460,7 @@ static size_t soxr_output_1ch(soxr_t p, unsigned i, soxr_buf_t dest, size_t len, sample_t const * src; if (p->flushing) resampler_flush(p->resamplers[i]); - resampler_process(p->resamplers[i]); + resampler_process(p->resamplers[i], len); src = resampler_output(p->resamplers[i], NULL, &len); if (separated) p->clips += (p->interleave)(p->io_spec.otype, &dest, &src, diff --git a/lib-src/libsoxr/src/soxr.h b/lib-src/libsoxr/src/soxr.h index 14b0463b2..be28c4d2a 100644 --- a/lib-src/libsoxr/src/soxr.h +++ b/lib-src/libsoxr/src/soxr.h @@ -226,6 +226,7 @@ struct soxr_quality_spec { /* Typically */ #define SOXR_MAINTAIN_3DB_PT 4u /* Reserved for internal use. */ #define SOXR_HI_PREC_CLOCK 8u /* Increase `irrational' ratio accuracy. */ #define SOXR_DOUBLE_PRECISION 16u /* Use double prec. even @ bitdepths <= 20.*/ +#define SOXR_VR 32u /* Reserved for future use. */ @@ -298,7 +299,6 @@ SOXR soxr_io_spec_t soxr_io_spec( SOXR soxr_error_t soxr_set_error(soxr_t, soxr_error_t); SOXR soxr_error_t soxr_set_num_channels(soxr_t, unsigned); SOXR soxr_error_t soxr_set_oi_ratio(soxr_t, double); -SOXR soxr_error_t soxr_set_pitch(soxr_t, long);