1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-10-30 17:23:51 +01:00

Upgrade to libsoxr 0.0.3.

This commit is contained in:
v.audacity
2012-10-18 23:19:58 +00:00
parent 52e607f51e
commit cda544a119
8 changed files with 32 additions and 23 deletions

View File

@@ -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}

View File

@@ -1 +1 @@
#include "soxr-lsr.h"
#include "soxr-lsr.h"

View File

@@ -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,

View File

@@ -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);