diff options
author | Mark Harris <mark.hsj@gmail.com> | 2018-07-22 01:13:07 +0300 |
---|---|---|
committer | Mark Harris <mark.hsj@gmail.com> | 2018-07-22 01:13:07 +0300 |
commit | 45aace26fee5b304a7b22b4323e2110c8e14c3e8 (patch) | |
tree | 34596806cd13625a7d52c969357f1665ace4d125 | |
parent | 8ce055a3d2d794a1b013ce4dd23538f798a6c9f2 (diff) |
resample: clean up, sync with opus-tools version
- Do not define macros, functions, or variables with file scope using
names beginning with an underscore (these names are reserved for the
implementation; see C89 section 7.1.3 or any later version) or that
shadow other global declarations
- Avoid declarations after statements (speex_assert) for C89 compat
- Silence unused parameter warning in resampler_basic_zero
- No need for the stack_alloc.h macros within #ifdef VAR_ARRAYS; use
the standard C syntax
- When OUTSIDE_SPEEX, define EXPORT if not already defined
- Update URL to https
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | libspeexdsp/arch.h | 2 | ||||
-rw-r--r-- | libspeexdsp/resample.c | 61 | ||||
-rw-r--r-- | libspeexdsp/resample_sse.h | 2 | ||||
-rwxr-xr-x | win32/VS2003/libspeexdsp/libspeexdsp.vcproj | 4 | ||||
-rwxr-xr-x | win32/VS2005/libspeexdsp/libspeexdsp.vcproj | 2 | ||||
-rwxr-xr-x | win32/VS2008/libspeexdsp/libspeexdsp.vcproj | 4 | ||||
-rw-r--r-- | win32/config.h | 8 |
8 files changed, 44 insertions, 45 deletions
diff --git a/configure.ac b/configure.ac index d46644a..4655d28 100644 --- a/configure.ac +++ b/configure.ac @@ -184,15 +184,15 @@ fi], AC_DEFINE([FLOATING_POINT], , [Compile as floating-point])) if test "$has_sse" = yes; then - AC_DEFINE([_USE_SSE], , [Enable SSE support]) + AC_DEFINE([USE_SSE], , [Enable SSE support]) fi if test "$has_neon" = yes; then - AC_DEFINE([_USE_NEON], , [Enable NEON support]) + AC_DEFINE([USE_NEON], , [Enable NEON support]) fi if test "$has_sse2" = yes; then - AC_DEFINE([_USE_SSE2], , [Enable SSE2 support]) + AC_DEFINE([USE_SSE2], , [Enable SSE2 support]) fi AC_ARG_ENABLE(float-api, [ --disable-float-api Disable the floating-point API], diff --git a/libspeexdsp/arch.h b/libspeexdsp/arch.h index 73a45a0..4449751 100644 --- a/libspeexdsp/arch.h +++ b/libspeexdsp/arch.h @@ -41,7 +41,7 @@ #ifdef FLOATING_POINT #error You cannot compile as floating point and fixed point at the same time #endif -#ifdef _USE_SSE +#ifdef USE_SSE #error SSE is only for floating-point #endif #if ((defined (ARM4_ASM)||defined (ARM4_ASM)) && defined(BFIN_ASM)) || (defined (ARM4_ASM)&&defined(ARM5E_ASM)) diff --git a/libspeexdsp/resample.c b/libspeexdsp/resample.c index 10cb065..c0a189b 100644 --- a/libspeexdsp/resample.c +++ b/libspeexdsp/resample.c @@ -46,7 +46,7 @@ Smith, Julius O. Digital Audio Resampling Home Page Center for Computer Research in Music and Acoustics (CCRMA), Stanford University, 2007. - Web published at http://ccrma.stanford.edu/~jos/resample/. + Web published at https://ccrma.stanford.edu/~jos/resample/. There is one main difference, though. This resampler uses cubic interpolation instead of linear interpolation in the above paper. This @@ -63,9 +63,12 @@ #ifdef OUTSIDE_SPEEX #include <stdlib.h> -static void *speex_alloc (int size) {return calloc(size,1);} -static void *speex_realloc (void *ptr, int size) {return realloc(ptr, size);} -static void speex_free (void *ptr) {free(ptr);} +static void *speex_alloc(int size) {return calloc(size,1);} +static void *speex_realloc(void *ptr, int size) {return realloc(ptr, size);} +static void speex_free(void *ptr) {free(ptr);} +#ifndef EXPORT +#define EXPORT +#endif #include "speex_resampler.h" #include "arch.h" #else /* OUTSIDE_SPEEX */ @@ -75,7 +78,6 @@ static void speex_free (void *ptr) {free(ptr);} #include "os_support.h" #endif /* OUTSIDE_SPEEX */ -#include "stack_alloc.h" #include <math.h> #include <limits.h> @@ -94,11 +96,11 @@ static void speex_free (void *ptr) {free(ptr);} #define UINT32_MAX 4294967296U #endif -#ifdef _USE_SSE +#ifdef USE_SSE #include "resample_sse.h" #endif -#ifdef _USE_NEON +#ifdef USE_NEON #include "resample_neon.h" #endif @@ -194,16 +196,14 @@ struct FuncDef { int oversample; }; -static const struct FuncDef _KAISER12 = {kaiser12_table, 64}; -#define KAISER12 (&_KAISER12) -/*static struct FuncDef _KAISER12 = {kaiser12_table, 32}; -#define KAISER12 (&_KAISER12)*/ -static const struct FuncDef _KAISER10 = {kaiser10_table, 32}; -#define KAISER10 (&_KAISER10) -static const struct FuncDef _KAISER8 = {kaiser8_table, 32}; -#define KAISER8 (&_KAISER8) -static const struct FuncDef _KAISER6 = {kaiser6_table, 32}; -#define KAISER6 (&_KAISER6) +static const struct FuncDef kaiser12_funcdef = {kaiser12_table, 64}; +#define KAISER12 (&kaiser12_funcdef) +static const struct FuncDef kaiser10_funcdef = {kaiser10_table, 32}; +#define KAISER10 (&kaiser10_funcdef) +static const struct FuncDef kaiser8_funcdef = {kaiser8_table, 32}; +#define KAISER8 (&kaiser8_funcdef) +static const struct FuncDef kaiser6_funcdef = {kaiser6_table, 32}; +#define KAISER6 (&kaiser6_funcdef) struct QualityMapping { int base_length; @@ -572,6 +572,7 @@ static int resampler_basic_zero(SpeexResamplerState *st, spx_uint32_t channel_in const int frac_advance = st->frac_advance; const spx_uint32_t den_rate = st->den_rate; + (void)in; while (!(last_sample >= (spx_int32_t)*in_len || out_sample >= (spx_int32_t)*out_len)) { out[out_stride * out_sample++] = 0; @@ -589,16 +590,15 @@ static int resampler_basic_zero(SpeexResamplerState *st, spx_uint32_t channel_in return out_sample; } -static int _muldiv(spx_uint32_t *result, spx_uint32_t value, spx_uint32_t mul, spx_uint32_t div) +static int multiply_frac(spx_uint32_t *result, spx_uint32_t value, spx_uint32_t num, spx_uint32_t den) { - speex_assert(result); - spx_uint32_t major = value / div; - spx_uint32_t remainder = value % div; + spx_uint32_t major = value / den; + spx_uint32_t remain = value % den; /* TODO: Could use 64 bits operation to check for overflow. But only guaranteed in C99+ */ - if (remainder > UINT32_MAX / mul || major > UINT32_MAX / mul - || major * mul > UINT32_MAX - remainder * mul / div) + if (remain > UINT32_MAX / num || major > UINT32_MAX / num + || major * num > UINT32_MAX - remain * num / den) return RESAMPLER_ERR_OVERFLOW; - *result = remainder * mul / div + major * mul; + *result = remain * num / den + major * num; return RESAMPLER_ERR_SUCCESS; } @@ -619,7 +619,7 @@ static int update_filter(SpeexResamplerState *st) { /* down-sampling */ st->cutoff = quality_map[st->quality].downsample_bandwidth * st->den_rate / st->num_rate; - if (_muldiv(&st->filt_len,st->filt_len,st->num_rate,st->den_rate) != RESAMPLER_ERR_SUCCESS) + if (multiply_frac(&st->filt_len,st->filt_len,st->num_rate,st->den_rate) != RESAMPLER_ERR_SUCCESS) goto fail; /* Round up to make sure we have a multiple of 8 for SSE */ st->filt_len = ((st->filt_len-1)&(~0x7))+8; @@ -638,12 +638,12 @@ static int update_filter(SpeexResamplerState *st) st->cutoff = quality_map[st->quality].upsample_bandwidth; } - /* Choose the resampling type that requires the least amount of memory */ #ifdef RESAMPLE_FULL_SINC_TABLE use_direct = 1; if (INT_MAX/sizeof(spx_word16_t)/st->den_rate < st->filt_len) goto fail; #else + /* Choose the resampling type that requires the least amount of memory */ use_direct = st->filt_len*st->den_rate <= st->filt_len*st->oversample+8 && INT_MAX/sizeof(spx_word16_t)/st->den_rate >= st->filt_len; #endif @@ -977,8 +977,7 @@ EXPORT int speex_resampler_process_int(SpeexResamplerState *st, spx_uint32_t cha const spx_uint32_t xlen = st->mem_alloc_size - (st->filt_len - 1); #ifdef VAR_ARRAYS const unsigned int ylen = (olen < FIXED_STACK_ALLOC) ? olen : FIXED_STACK_ALLOC; - VARDECL(spx_word16_t *ystack); - ALLOC(ystack, ylen, spx_word16_t); + spx_word16_t ystack[ylen]; #else const unsigned int ylen = FIXED_STACK_ALLOC; spx_word16_t ystack[FIXED_STACK_ALLOC]; @@ -1093,7 +1092,7 @@ EXPORT void speex_resampler_get_rate(SpeexResamplerState *st, spx_uint32_t *in_r *out_rate = st->out_rate; } -static inline spx_uint32_t _gcd(spx_uint32_t a, spx_uint32_t b) +static inline spx_uint32_t compute_gcd(spx_uint32_t a, spx_uint32_t b) { while (b != 0) { @@ -1123,7 +1122,7 @@ EXPORT int speex_resampler_set_rate_frac(SpeexResamplerState *st, spx_uint32_t r st->num_rate = ratio_num; st->den_rate = ratio_den; - fact = _gcd (st->num_rate, st->den_rate); + fact = compute_gcd(st->num_rate, st->den_rate); st->num_rate /= fact; st->den_rate /= fact; @@ -1132,7 +1131,7 @@ EXPORT int speex_resampler_set_rate_frac(SpeexResamplerState *st, spx_uint32_t r { for (i=0;i<st->nb_channels;i++) { - if (_muldiv(&st->samp_frac_num[i],st->samp_frac_num[i],st->den_rate,old_den) != RESAMPLER_ERR_SUCCESS) + if (multiply_frac(&st->samp_frac_num[i],st->samp_frac_num[i],st->den_rate,old_den) != RESAMPLER_ERR_SUCCESS) return RESAMPLER_ERR_OVERFLOW; /* Safety net */ if (st->samp_frac_num[i] >= st->den_rate) diff --git a/libspeexdsp/resample_sse.h b/libspeexdsp/resample_sse.h index fed5b82..00dc294 100644 --- a/libspeexdsp/resample_sse.h +++ b/libspeexdsp/resample_sse.h @@ -71,7 +71,7 @@ static inline float interpolate_product_single(const float *a, const float *b, u return ret; } -#ifdef _USE_SSE2 +#ifdef USE_SSE2 #include <emmintrin.h> #define OVERRIDE_INNER_PRODUCT_DOUBLE diff --git a/win32/VS2003/libspeexdsp/libspeexdsp.vcproj b/win32/VS2003/libspeexdsp/libspeexdsp.vcproj index 1fc21ad..833a255 100755 --- a/win32/VS2003/libspeexdsp/libspeexdsp.vcproj +++ b/win32/VS2003/libspeexdsp/libspeexdsp.vcproj @@ -120,7 +120,7 @@ FavorSizeOrSpeed="1"
OptimizeForProcessor="3"
AdditionalIncludeDirectories="..\..\..\include;..\.."
- PreprocessorDefinitions="_USE_SSE;WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H"
+ PreprocessorDefinitions="USE_SSE;WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H"
StringPooling="TRUE"
ExceptionHandling="FALSE"
RuntimeLibrary="0"
@@ -181,7 +181,7 @@ FavorSizeOrSpeed="1"
OptimizeForProcessor="3"
AdditionalIncludeDirectories="..\..\..\include;..\.."
- PreprocessorDefinitions="_USE_SSE;WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H"
+ PreprocessorDefinitions="USE_SSE;WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H"
StringPooling="TRUE"
ExceptionHandling="FALSE"
RuntimeLibrary="2"
diff --git a/win32/VS2005/libspeexdsp/libspeexdsp.vcproj b/win32/VS2005/libspeexdsp/libspeexdsp.vcproj index 2d22d6a..407d036 100755 --- a/win32/VS2005/libspeexdsp/libspeexdsp.vcproj +++ b/win32/VS2005/libspeexdsp/libspeexdsp.vcproj @@ -696,7 +696,7 @@ EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
AdditionalIncludeDirectories="..\..\..\include;..\.."
- PreprocessorDefinitions="_USE_SSE;WIN32;NDEBUG;_LIB;HAVE_CONFIG_H"
+ PreprocessorDefinitions="USE_SSE;WIN32;NDEBUG;_LIB;HAVE_CONFIG_H"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="0"
diff --git a/win32/VS2008/libspeexdsp/libspeexdsp.vcproj b/win32/VS2008/libspeexdsp/libspeexdsp.vcproj index 3f7f325..3cc16e4 100755 --- a/win32/VS2008/libspeexdsp/libspeexdsp.vcproj +++ b/win32/VS2008/libspeexdsp/libspeexdsp.vcproj @@ -182,7 +182,7 @@ EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
AdditionalIncludeDirectories="..\..\..\include;..\.."
- PreprocessorDefinitions="_USE_SSE;WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H"
+ PreprocessorDefinitions="USE_SSE;WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
@@ -269,7 +269,7 @@ EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
AdditionalIncludeDirectories="..\..\..\include;..\.."
- PreprocessorDefinitions="_USE_SSE;WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H"
+ PreprocessorDefinitions="USE_SSE;WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="2"
diff --git a/win32/config.h b/win32/config.h index 6366d7b..22745b1 100644 --- a/win32/config.h +++ b/win32/config.h @@ -3,19 +3,19 @@ // In Visual Studio, _M_IX86_FP=1 means /arch:SSE was used, likewise
// _M_IX86_FP=2 means /arch:SSE2 was used.
-// Also, enable both _USE_SSE and _USE_SSE2 if we're compiling for x86-64
+// Also, enable both USE_SSE and USE_SSE2 if we're compiling for x86-64
#if _M_IX86_FP >= 1 || defined(_M_X64)
-#define _USE_SSE
+#define USE_SSE
#endif
#if _M_IX86_FP >= 2 || defined(_M_X64)
-#define _USE_SSE2
+#define USE_SSE2
#endif
// Visual Studio support alloca(), but it always align variables to 16-bit
// boundary, while SSE need 128-bit alignment. So we disable alloca() when
// SSE is enabled.
-#ifndef _USE_SSE
+#ifndef USE_SSE
# define USE_ALLOCA
#endif
|