From 701c30a99bc40268bd78006f9190f70ba5ca2db6 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Sat, 22 Jun 2019 15:43:04 -0700 Subject: [PATCH] add resample consumes A LOT of CPU. Need alos to change the command line to set the sample rate (-r) to a fixed value (BT) but accept igher (-Z) from LMS and enable resampling (-R) -R -Z 96000 -r \"44100-44100\" or similar --- components/codecs/component.mk | 4 +- components/codecs/inc/soxr/soxr.h | 348 +++++++++++++++++++++++++++ components/codecs/lib/libsoxr.a | Bin 0 -> 340110 bytes main/Kconfig.projbuild | 1 - main/alac.c | 4 +- main/component.mk | 5 +- main/process.c | 194 +++++++++++++++ main/resample.c | 377 ++++++++++++++++++++++++++++++ 8 files changed, 927 insertions(+), 6 deletions(-) create mode 100644 components/codecs/inc/soxr/soxr.h create mode 100644 components/codecs/lib/libsoxr.a create mode 100644 main/process.c create mode 100644 main/resample.c diff --git a/components/codecs/component.mk b/components/codecs/component.mk index 3c921edc..19181656 100644 --- a/components/codecs/component.mk +++ b/components/codecs/component.mk @@ -8,7 +8,9 @@ COMPONENT_ADD_LDFLAGS=-l$(COMPONENT_NAME) \ $(COMPONENT_PATH)/lib/libhelix-aac.a \ $(COMPONENT_PATH)/lib/libvorbisidec.a \ $(COMPONENT_PATH)/lib/libogg.a \ - $(COMPONENT_PATH)/lib/libalac.a + $(COMPONENT_PATH)/lib/libalac.a \ + $(COMPONENT_PATH)/lib/libsoxr.a + #$(COMPONENT_PATH)/lib/libfaad.a #$(COMPONENT_PATH)/lib/libvorbisidec.a diff --git a/components/codecs/inc/soxr/soxr.h b/components/codecs/inc/soxr/soxr.h new file mode 100644 index 00000000..8d9622df --- /dev/null +++ b/components/codecs/inc/soxr/soxr.h @@ -0,0 +1,348 @@ +/* SoX Resampler Library Copyright (c) 2007-13 robs@users.sourceforge.net + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at + * your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* -------------------------------- Gubbins --------------------------------- */ + +#if !defined soxr_included +#define soxr_included + + +#if defined __cplusplus + #include + extern "C" { +#else + #include +#endif + +#if defined SOXR_DLL + #if defined soxr_EXPORTS + #define SOXR __declspec(dllexport) + #else + #define SOXR __declspec(dllimport) + #endif +#elif defined SOXR_VISIBILITY && defined __GNUC__ && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 1) + #define SOXR __attribute__ ((visibility("default"))) +#else + #define SOXR +#endif + +typedef struct soxr_io_spec soxr_io_spec_t; +typedef struct soxr_quality_spec soxr_quality_spec_t; +typedef struct soxr_runtime_spec soxr_runtime_spec_t; + + + +/* ---------------------------- API conventions -------------------------------- + +Buffer lengths (and occupancies) are expressed as the number of contained +samples per channel. + +Parameter names for buffer lengths have the suffix `len'. + +A single-character `i' or 'o' is often used in names to give context as +input or output (e.g. ilen, olen). */ + + + +/* --------------------------- Version management --------------------------- */ + +/* E.g. #if SOXR_THIS_VERSION >= SOXR_VERSION(0,1,1) ... */ + +#define SOXR_VERSION(x,y,z) (((x)<<16)|((y)<<8)|(z)) +#define SOXR_THIS_VERSION SOXR_VERSION(0,1,2) +#define SOXR_THIS_VERSION_STR "0.1.2" + + + +/* --------------------------- Type declarations ---------------------------- */ + +typedef struct soxr * soxr_t; /* A resampler for 1 or more channels. */ +typedef char const * soxr_error_t; /* 0:no-error; non-0:error. */ + +typedef void * soxr_buf_t; /* 1 buffer of channel-interleaved samples. */ +typedef void const * soxr_cbuf_t; /* Ditto; read-only. */ + +typedef soxr_buf_t const * soxr_bufs_t;/* Or, a separate buffer for each ch. */ +typedef soxr_cbuf_t const * soxr_cbufs_t; /* Ditto; read-only. */ + +typedef void const * soxr_in_t; /* Either a soxr_cbuf_t or soxr_cbufs_t, + depending on itype in soxr_io_spec_t. */ +typedef void * soxr_out_t; /* Either a soxr_buf_t or soxr_bufs_t, + depending on otype in soxr_io_spec_t. */ + + + +/* --------------------------- API main functions --------------------------- */ + +SOXR char const * soxr_version(void); /* Query library version: "libsoxr-x.y.z" */ + +#define soxr_strerror(e) /* Soxr counterpart to strerror. */ \ + ((e)?(e):"no error") + + +/* Create a stream resampler: */ + +SOXR soxr_t soxr_create( + double input_rate, /* Input sample-rate. */ + double output_rate, /* Output sample-rate. */ + unsigned num_channels, /* Number of channels to be used. */ + /* All following arguments are optional (may be set to NULL). */ + soxr_error_t *, /* To report any error during creation. */ + soxr_io_spec_t const *, /* To specify non-default I/O formats. */ + soxr_quality_spec_t const *, /* To specify non-default resampling quality.*/ + soxr_runtime_spec_t const *);/* To specify non-default runtime resources. + + Default io_spec is per soxr_io_spec(SOXR_FLOAT32_I, SOXR_FLOAT32_I) + Default quality_spec is per soxr_quality_spec(SOXR_HQ, 0) + Default runtime_spec is per soxr_runtime_spec(1) */ + + + +/* If not using an app-supplied input function, after creating a stream + * resampler, repeatedly call: */ + +SOXR soxr_error_t soxr_process( + soxr_t resampler, /* As returned by soxr_create. */ + /* Input (to be resampled): */ + soxr_in_t in, /* Input buffer(s); may be NULL (see below). */ + size_t ilen, /* Input buf. length (samples per channel). */ + size_t * idone, /* To return actual # samples used (<= ilen). */ + /* Output (resampled): */ + soxr_out_t out, /* Output buffer(s).*/ + size_t olen, /* Output buf. length (samples per channel). */ + size_t * odone); /* To return actual # samples out (<= olen). + + Note that no special meaning is associated with ilen or olen equal to + zero. End-of-input (i.e. no data is available nor shall be available) + may be indicated by seting `in' to NULL. */ + + + +/* If using an app-supplied input function, it must look and behave like this:*/ + +typedef size_t /* data_len */ + (* soxr_input_fn_t)( /* Supply data to be resampled. */ + void * input_fn_state, /* As given to soxr_set_input_fn (below). */ + soxr_in_t * data, /* Returned data; see below. N.B. ptr to ptr(s)*/ + size_t requested_len); /* Samples per channel, >= returned data_len. + + data_len *data Indicates Meaning + ------- ------- ------------ ------------------------- + !=0 !=0 Success *data contains data to be + input to the resampler. + 0 !=0 (or End-of-input No data is available nor + not set) shall be available. + 0 0 Failure An error occurred whilst trying to + source data to be input to the resampler. */ + +/* and be registered with a previously created stream resampler using: */ + +SOXR soxr_error_t soxr_set_input_fn(/* Set (or reset) an input function.*/ + soxr_t resampler, /* As returned by soxr_create. */ + soxr_input_fn_t, /* Function to supply data to be resampled.*/ + void * input_fn_state, /* If needed by the input function. */ + size_t max_ilen); /* Maximum value for input fn. requested_len.*/ + +/* then repeatedly call: */ + +SOXR size_t /*odone*/ soxr_output(/* Resample and output a block of data.*/ + soxr_t resampler, /* As returned by soxr_create. */ + soxr_out_t data, /* App-supplied buffer(s) for resampled data.*/ + size_t olen); /* Amount of data to output; >= odone. */ + + + +/* Common stream resampler operations: */ + +SOXR soxr_error_t soxr_error(soxr_t); /* Query error status. */ +SOXR size_t * soxr_num_clips(soxr_t); /* Query int. clip counter (for R/W). */ +SOXR double soxr_delay(soxr_t); /* Query current delay in output samples.*/ +SOXR char const * soxr_engine(soxr_t p); /* Query resampling engine name. */ + +SOXR soxr_error_t soxr_clear(soxr_t); /* Ready for fresh signal, same config. */ +SOXR void soxr_delete(soxr_t); /* Free resources. */ + + + +/* `Short-cut', single call to resample a (probably short) signal held entirely + * in memory. See soxr_create and soxr_process above for parameter details. + * Note that unlike soxr_create however, the default quality spec. for + * soxr_oneshot is per soxr_quality_spec(SOXR_LQ, 0). */ + +SOXR soxr_error_t soxr_oneshot( + double input_rate, + double output_rate, + unsigned num_channels, + soxr_in_t in , size_t ilen, size_t * idone, + soxr_out_t out, size_t olen, size_t * odone, + soxr_io_spec_t const *, + soxr_quality_spec_t const *, + soxr_runtime_spec_t const *); + + + +/* For variable-rate resampling. See example # 5 for how to create a + * variable-rate resampler and how to use this function. */ + +SOXR soxr_error_t soxr_set_io_ratio(soxr_t, double io_ratio, size_t slew_len); + + + +/* -------------------------- API type definitions -------------------------- */ + +typedef enum { /* Datatypes supported for I/O to/from the resampler: */ + /* Internal; do not use: */ + SOXR_FLOAT32, SOXR_FLOAT64, SOXR_INT32, SOXR_INT16, SOXR_SPLIT = 4, + + /* Use for interleaved channels: */ + SOXR_FLOAT32_I = SOXR_FLOAT32, SOXR_FLOAT64_I, SOXR_INT32_I, SOXR_INT16_I, + + /* Use for split channels: */ + SOXR_FLOAT32_S = SOXR_SPLIT , SOXR_FLOAT64_S, SOXR_INT32_S, SOXR_INT16_S + +} soxr_datatype_t; + +#define soxr_datatype_size(x) /* Returns `sizeof' a soxr_datatype_t sample. */\ + ((unsigned char *)"\4\10\4\2")[(x)&3] + + + +struct soxr_io_spec { /* Typically */ + soxr_datatype_t itype; /* Input datatype. SOXR_FLOAT32_I */ + soxr_datatype_t otype; /* Output datatype. SOXR_FLOAT32_I */ + double scale; /* Linear gain to apply during resampling. 1 */ + void * e; /* Reserved for internal use 0 */ + unsigned long flags; /* Per the following #defines. 0 */ +}; + +#define SOXR_TPDF 0 /* Applicable only if otype is INT16. */ +#define SOXR_NO_DITHER 8u /* Disable the above. */ + + + +struct soxr_quality_spec { /* Typically */ + double precision; /* Conversion precision (in bits). 20 */ + double phase_response; /* 0=minimum, ... 50=linear, ... 100=maximum 50 */ + double passband_end; /* 0dB pt. bandwidth to preserve; nyquist=1 0.913*/ + double stopband_begin; /* Aliasing/imaging control; > passband_end 1 */ + void * e; /* Reserved for internal use. 0 */ + unsigned long flags; /* Per the following #defines. 0 */ +}; + +#define SOXR_ROLLOFF_SMALL 0u /* <= 0.01 dB */ +#define SOXR_ROLLOFF_MEDIUM 1u /* <= 0.35 dB */ +#define SOXR_ROLLOFF_NONE 2u /* For Chebyshev bandwidth. */ + +#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 D.P. calcs even if precision <= 20. */ +#define SOXR_VR 32u /* Variable-rate resampling. */ + + + +struct soxr_runtime_spec { /* Typically */ + unsigned log2_min_dft_size;/* For DFT efficiency. [8,15] 10 */ + unsigned log2_large_dft_size;/* For DFT efficiency. [16,20] 17 */ + unsigned coef_size_kbytes; /* For SOXR_COEF_INTERP_AUTO (below). 400 */ + unsigned num_threads; /* If built so. 0 means `automatic'. 1 */ + void * e; /* Reserved for internal use. 0 */ + unsigned long flags; /* Per the following #defines. 0 */ +}; + /* For `irrational' ratios only: */ +#define SOXR_COEF_INTERP_AUTO 0u /* Auto select coef. interpolation. */ +#define SOXR_COEF_INTERP_LOW 2u /* Man. select: less CPU, more memory. */ +#define SOXR_COEF_INTERP_HIGH 3u /* Man. select: more CPU, less memory. */ + +#define SOXR_STRICT_BUFFERING 4u /* Reserved for future use. */ +#define SOXR_NOSMALLINTOPT 8u /* For test purposes only. */ + + + +/* -------------------------- API type constructors ------------------------- */ + +/* These functions allow setting of the most commonly-used structure + * parameters, with other parameters being given default values. The default + * values may then be overridden, directly in the structure, if needed. */ + +SOXR soxr_quality_spec_t soxr_quality_spec( + unsigned long recipe, /* Per the #defines immediately below. */ + unsigned long flags); /* As soxr_quality_spec_t.flags. */ + + /* The 5 standard qualities found in SoX: */ +#define SOXR_QQ 0 /* 'Quick' cubic interpolation. */ +#define SOXR_LQ 1 /* 'Low' 16-bit with larger rolloff. */ +#define SOXR_MQ 2 /* 'Medium' 16-bit with medium rolloff. */ +#define SOXR_HQ SOXR_20_BITQ /* 'High quality'. */ +#define SOXR_VHQ SOXR_28_BITQ /* 'Very high quality'. */ + +#define SOXR_16_BITQ 3 +#define SOXR_20_BITQ 4 +#define SOXR_24_BITQ 5 +#define SOXR_28_BITQ 6 +#define SOXR_32_BITQ 7 + /* Libsamplerate equivalent qualities: */ +#define SOXR_LSR0Q 8 /* 'Best sinc'. */ +#define SOXR_LSR1Q 9 /* 'Medium sinc'. */ +#define SOXR_LSR2Q 10 /* 'Fast sinc'. */ + +#define SOXR_LINEAR_PHASE 0x00 +#define SOXR_INTERMEDIATE_PHASE 0x10 +#define SOXR_MINIMUM_PHASE 0x30 +#define SOXR_STEEP_FILTER 0x40 +#define SOXR_ALLOW_ALIASING 0x80 /* Reserved for future use. */ + + + +SOXR soxr_runtime_spec_t soxr_runtime_spec( + unsigned num_threads); + + + +SOXR soxr_io_spec_t soxr_io_spec( + soxr_datatype_t itype, + soxr_datatype_t otype); + + + +/* --------------------------- Advanced use only ---------------------------- */ + +/* For new designs, the following functions/usage will probably not be needed. + * They might be useful when adding soxr into an existing design where values + * for the resampling-rate and/or number-of-channels parameters to soxr_create + * are not available when that function will be called. In such cases, the + * relevant soxr_create parameter(s) can be given as 0, then one or both of the + * following (as appropriate) later invoked (but prior to calling soxr_process + * or soxr_output): + * + * soxr_set_error(soxr, soxr_set_io_ratio(soxr, io_ratio, 0)); + * soxr_set_error(soxr, soxr_set_num_channels(soxr, num_channels)); + */ + +SOXR soxr_error_t soxr_set_error(soxr_t, soxr_error_t); +SOXR soxr_error_t soxr_set_num_channels(soxr_t, unsigned); + + + +#undef SOXR + +#if defined __cplusplus +} +#endif + +#endif diff --git a/components/codecs/lib/libsoxr.a b/components/codecs/lib/libsoxr.a new file mode 100644 index 0000000000000000000000000000000000000000..02c5e2d5916c8394e26fd9e3e0cd8df20a3aa1f3 GIT binary patch literal 340110 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, output.supported_rates); output.track_start = outputbuf->writep; if (output.fade_mode) _checkfade(true); decode.new_stream = false; - UNLOCK_O_not_direct; + UNLOCK_O; } else if (found == -1) { LOG_WARN("[%p]: error reading stream header"); UNLOCK_S; diff --git a/main/component.mk b/main/component.mk index 03f04ab5..8ea865c5 100644 --- a/main/component.mk +++ b/main/component.mk @@ -2,12 +2,13 @@ # "main" pseudo-component makefile. # # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) -CFLAGS += -O3 -DPOSIX -DLINKALL -DLOOPBACK -DNO_FAAD -DEMBEDDED -DTREMOR_ONLY -DBYTES_PER_FRAME=4 \ +CFLAGS += -O3 -DPOSIX -DLINKALL -DLOOPBACK -DNO_FAAD -DRESAMPLE -DEMBEDDED -DTREMOR_ONLY -DBYTES_PER_FRAME=4 \ -I$(COMPONENT_PATH)/../components/codecs/inc \ -I$(COMPONENT_PATH)/../components/codecs/inc/mad \ -I$(COMPONENT_PATH)/../components/codecs/inc/alac \ -I$(COMPONENT_PATH)/../components/codecs/inc/helix-aac \ - -I$(COMPONENT_PATH)/../components/codecs/inc/vorbis \ + -I$(COMPONENT_PATH)/../components/codecs/inc/vorbis \ + -I$(COMPONENT_PATH)/../components/codecs/inc/soxr \ -I$(COMPONENT_PATH)/../components/platform_esp32 LDFLAGS += -s diff --git a/main/process.c b/main/process.c new file mode 100644 index 00000000..7c2cf94f --- /dev/null +++ b/main/process.c @@ -0,0 +1,194 @@ +/* + * Squeezelite - lightweight headless squeezebox emulator + * + * (c) Adrian Smith 2012-2015, triode1@btinternet.com + * Ralph Irving 2015-2017, ralph_irving@hotmail.com + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +// sample processing - only included when building with PROCESS set + +#include "squeezelite.h" + +#if PROCESS + +extern log_level loglevel; + +extern struct buffer *outputbuf; +extern struct decodestate decode; +struct processstate process; +extern struct codec *codec; + +#define LOCK_D mutex_lock(decode.mutex); +#define UNLOCK_D mutex_unlock(decode.mutex); +#define LOCK_O mutex_lock(outputbuf->mutex) +#define UNLOCK_O mutex_unlock(outputbuf->mutex) + +// macros to map to processing functions - currently only resample.c +// this can be made more generic when multiple processing mechanisms get added +#if RESAMPLE +#define SAMPLES_FUNC resample_samples +#define DRAIN_FUNC resample_drain +#define NEWSTREAM_FUNC resample_newstream +#define FLUSH_FUNC resample_flush +#define INIT_FUNC resample_init +#endif + + +// transfer all processed frames to the output buf +static void _write_samples(void) { + frames_t frames = process.out_frames; + ISAMPLE_T *iptr = (ISAMPLE_T *) process.outbuf; + unsigned cnt = 10; + + LOCK_O; + + while (frames > 0) { + + frames_t f = min(_buf_space(outputbuf), _buf_cont_write(outputbuf)) / BYTES_PER_FRAME; + ISAMPLE_T *optr = (ISAMPLE_T*) outputbuf->writep; + + if (f > 0) { + + f = min(f, frames); + + memcpy(optr, iptr, f * BYTES_PER_FRAME); + + frames -= f; + + _buf_inc_writep(outputbuf, f * BYTES_PER_FRAME); + iptr += f * BYTES_PER_FRAME / sizeof(*iptr); + + } else if (cnt--) { + + // there should normally be space in the output buffer, but may need to wait during drain phase + UNLOCK_O; + usleep(10000); + LOCK_O; + + } else { + + // bail out if no space found after 100ms to avoid locking + LOG_ERROR("unable to get space in output buffer"); + UNLOCK_O; + return; + } + } + + UNLOCK_O; +} + +// process samples - called with decode mutex set +void process_samples(void) { + + SAMPLES_FUNC(&process); + + _write_samples(); + + process.in_frames = 0; +} + +// drain at end of track - called with decode mutex set +void process_drain(void) { + bool done; + + do { + + done = DRAIN_FUNC(&process); + + _write_samples(); + + } while (!done); + + LOG_DEBUG("processing track complete - frames in: %lu out: %lu", process.total_in, process.total_out); +} + +// new stream - called with decode mutex set +unsigned process_newstream(bool *direct, unsigned raw_sample_rate, unsigned supported_rates[]) { + + bool active = NEWSTREAM_FUNC(&process, raw_sample_rate, supported_rates); + + LOG_INFO("processing: %s", active ? "active" : "inactive"); + + *direct = !active; + + if (active) { + + unsigned max_in_frames, max_out_frames; + + process.in_frames = process.out_frames = 0; + process.total_in = process.total_out = 0; + + max_in_frames = codec->min_space / BYTES_PER_FRAME ; + + // increase size of output buffer by 10% as output rate is not an exact multiple of input rate + if (process.out_sample_rate % process.in_sample_rate == 0) { + max_out_frames = max_in_frames * (process.out_sample_rate / process.in_sample_rate); + } else { + max_out_frames = (int)(1.1 * (float)max_in_frames * (float)process.out_sample_rate / (float)process.in_sample_rate); + } + + if (process.max_in_frames != max_in_frames) { + LOG_DEBUG("creating process buf in frames: %u", max_in_frames); + if (process.inbuf) free(process.inbuf); + process.inbuf = malloc(max_in_frames * BYTES_PER_FRAME); + process.max_in_frames = max_in_frames; + } + + if (process.max_out_frames != max_out_frames) { + LOG_DEBUG("creating process buf out frames: %u", max_out_frames); + if (process.outbuf) free(process.outbuf); + process.outbuf = malloc(max_out_frames * BYTES_PER_FRAME); + process.max_out_frames = max_out_frames; + } + + if (!process.inbuf || !process.outbuf) { + LOG_ERROR("malloc fail creating process buffers"); + *direct = true; + return raw_sample_rate; + } + + return process.out_sample_rate; + } + + return raw_sample_rate; +} + +// process flush - called with decode mutex set +void process_flush(void) { + + LOG_INFO("process flush"); + + FLUSH_FUNC(); + + process.in_frames = 0; +} + +// init - called with no mutex +void process_init(char *opt) { + + bool enabled = INIT_FUNC(opt); + + memset(&process, 0, sizeof(process)); + + if (enabled) { + LOCK_D; + decode.process = true; + UNLOCK_D; + } +} + +#endif // #if PROCESS diff --git a/main/resample.c b/main/resample.c new file mode 100644 index 00000000..43dc20b3 --- /dev/null +++ b/main/resample.c @@ -0,0 +1,377 @@ +/* + * Squeezelite - lightweight headless squeezebox emulator + * + * (c) Adrian Smith 2012-2015, triode1@btinternet.com + * Ralph Irving 2015-2017, ralph_irving@hotmail.com + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +// upsampling using libsoxr - only included if RESAMPLE set + +#include "squeezelite.h" + +#if RESAMPLE + +#include +#include + +extern log_level loglevel; + +struct soxr { + soxr_t resampler; + size_t old_clips; + unsigned long q_recipe; + unsigned long q_flags; + double q_precision; /* Conversion precision (in bits). 20 */ + double q_phase_response; /* 0=minimum, ... 50=linear, ... 100=maximum 50 */ + double q_passband_end; /* 0dB pt. bandwidth to preserve; nyquist=1 0.913 */ + double q_stopband_begin; /* Aliasing/imaging control; > passband_end 1 */ + double scale; + bool max_rate; + bool exception; +#if !LINKALL + // soxr symbols to be dynamically loaded + soxr_io_spec_t (* soxr_io_spec)(soxr_datatype_t itype, soxr_datatype_t otype); + soxr_quality_spec_t (* soxr_quality_spec)(unsigned long recipe, unsigned long flags); + soxr_t (* soxr_create)(double, double, unsigned, soxr_error_t *, + soxr_io_spec_t const *, soxr_quality_spec_t const *, soxr_runtime_spec_t const *); + void (* soxr_delete)(soxr_t); + soxr_error_t (* soxr_process)(soxr_t, soxr_in_t, size_t, size_t *, soxr_out_t, size_t olen, size_t *); + size_t *(* soxr_num_clips)(soxr_t); +#if RESAMPLE_MP + soxr_runtime_spec_t (* soxr_runtime_spec)(unsigned num_threads); +#endif + // soxr_strerror is a macro so not included here +#endif +}; + +static struct soxr *r; + +#if LINKALL +#define SOXR(h, fn, ...) (soxr_ ## fn)(__VA_ARGS__) +#else +#define SOXR(h, fn, ...) (h)->soxr_##fn(__VA_ARGS__) +#endif + + +void resample_samples(struct processstate *process) { + size_t idone, odone; + size_t clip_cnt; + + soxr_error_t error = + SOXR(r, process, r->resampler, process->inbuf, process->in_frames, &idone, process->outbuf, process->max_out_frames, &odone); + if (error) { + LOG_INFO("soxr_process error: %s", soxr_strerror(error)); + return; + } + + if (idone != process->in_frames) { + // should not get here if buffers are big enough... + LOG_ERROR("should not get here - partial sox process: %u of %u processed %u of %u out", + (unsigned)idone, process->in_frames, (unsigned)odone, process->max_out_frames); + } + + process->out_frames = odone; + process->total_in += idone; + process->total_out += odone; + + clip_cnt = *(SOXR(r, num_clips, r->resampler)); + if (clip_cnt - r->old_clips) { + LOG_SDEBUG("resampling clips: %u", (unsigned)(clip_cnt - r->old_clips)); + r->old_clips = clip_cnt; + } +} + +bool resample_drain(struct processstate *process) { + size_t odone; + size_t clip_cnt; + + soxr_error_t error = SOXR(r, process, r->resampler, NULL, 0, NULL, process->outbuf, process->max_out_frames, &odone); + if (error) { + LOG_INFO("soxr_process error: %s", soxr_strerror(error)); + return true; + } + + process->out_frames = odone; + process->total_out += odone; + + clip_cnt = *(SOXR(r, num_clips, r->resampler)); + if (clip_cnt - r->old_clips) { + LOG_DEBUG("resampling clips: %u", (unsigned)(clip_cnt - r->old_clips)); + r->old_clips = clip_cnt; + } + + if (odone == 0) { + + LOG_INFO("resample track complete - total track clips: %u", r->old_clips); + + SOXR(r, delete, r->resampler); + r->resampler = NULL; + + return true; + + } else { + + return false; + } +} + +bool resample_newstream(struct processstate *process, unsigned raw_sample_rate, unsigned supported_rates[]) { + unsigned outrate = 0; + int i; + + if (r->exception) { + // find direct match - avoid resampling + for (i = 0; supported_rates[i]; i++) { + if (raw_sample_rate == supported_rates[i]) { + outrate = raw_sample_rate; + break; + } + } + // else find next highest sync sample rate + while (!outrate && i >= 0) { + if (supported_rates[i] > raw_sample_rate && supported_rates[i] % raw_sample_rate == 0) { + outrate = supported_rates[i]; + break; + } + i--; + } + } + + if (!outrate) { + if (r->max_rate) { + // resample to max rate for device + outrate = supported_rates[0]; + } else { + // resample to max sync sample rate + for (i = 0; supported_rates[i]; i++) { + if (supported_rates[i] % raw_sample_rate == 0 || raw_sample_rate % supported_rates[i] == 0) { + outrate = supported_rates[i]; + break; + } + } + } + if (!outrate) { + outrate = supported_rates[0]; + } + } + + process->in_sample_rate = raw_sample_rate; + process->out_sample_rate = outrate; + + if (r->resampler) { + SOXR(r, delete, r->resampler); + r->resampler = NULL; + } + + if (raw_sample_rate != outrate) { + + soxr_io_spec_t io_spec; + soxr_quality_spec_t q_spec; + soxr_error_t error; +#if RESAMPLE_MP + soxr_runtime_spec_t r_spec; +#endif + + LOG_INFO("resampling from %u -> %u", raw_sample_rate, outrate); + +#if BYTES_PER_FRAME == 4 + io_spec = SOXR(r, io_spec, SOXR_INT16_I, SOXR_INT16_I); +#else + io_spec = SOXR(r, io_spec, SOXR_INT32_I, SOXR_INT32_I); +#endif + io_spec.scale = r->scale; + + q_spec = SOXR(r, quality_spec, r->q_recipe, r->q_flags); + if (r->q_precision > 0) { + q_spec.precision = r->q_precision; + } + if (r->q_passband_end > 0) { + q_spec.passband_end = r->q_passband_end; + } + if (r->q_stopband_begin > 0) { + q_spec.stopband_begin = r->q_stopband_begin; + } + if (r->q_phase_response > -1) { + q_spec.phase_response = r->q_phase_response; + } + +#if RESAMPLE_MP + r_spec = SOXR(r, runtime_spec, 0); // make use of libsoxr OpenMP support allowing parallel execution if multiple cores +#endif + + LOG_DEBUG("resampling with soxr_quality_spec_t[precision: %03.1f, passband_end: %03.6f, stopband_begin: %03.6f, " + "phase_response: %03.1f, flags: 0x%02x], soxr_io_spec_t[scale: %03.2f]", q_spec.precision, + q_spec.passband_end, q_spec.stopband_begin, q_spec.phase_response, q_spec.flags, io_spec.scale); + +#if RESAMPLE_MP + r->resampler = SOXR(r, create, raw_sample_rate, outrate, 2, &error, &io_spec, &q_spec, &r_spec); +#else + r->resampler = SOXR(r, create, raw_sample_rate, outrate, 2, &error, &io_spec, &q_spec, NULL); +#endif + + if (error) { + LOG_INFO("soxr_create error: %s", soxr_strerror(error)); + return false; + } + + r->old_clips = 0; + return true; + + } else { + + LOG_INFO("disable resampling - rates match"); + return false; + } +} + +void resample_flush(void) { + if (r->resampler) { + SOXR(r, delete, r->resampler); + r->resampler = NULL; + } +} + +static bool load_soxr(void) { +#if !LINKALL + void *handle = dlopen(LIBSOXR, RTLD_NOW); + char *err; + + if (!handle) { + LOG_INFO("dlerror: %s", dlerror()); + return false; + } + + r->soxr_io_spec = dlsym(handle, "soxr_io_spec"); + r->soxr_quality_spec = dlsym(handle, "soxr_quality_spec"); + r->soxr_create = dlsym(handle, "soxr_create"); + r->soxr_delete = dlsym(handle, "soxr_delete"); + r->soxr_process = dlsym(handle, "soxr_process"); + r->soxr_num_clips = dlsym(handle, "soxr_num_clips"); +#if RESAMPLE_MP + r->soxr_runtime_spec = dlsym(handle, "soxr_runtime_spec"); +#endif + + if ((err = dlerror()) != NULL) { + LOG_INFO("dlerror: %s", err); + return false; + } + + LOG_INFO("loaded "LIBSOXR); +#endif + + return true; +} + +bool resample_init(char *opt) { + char *recipe = NULL, *flags = NULL; + char *atten = NULL; + char *precision = NULL, *passband_end = NULL, *stopband_begin = NULL, *phase_response = NULL; + + r = malloc(sizeof(struct soxr)); + if (!r) { + LOG_WARN("resampling disabled"); + return false; + } + + r->resampler = NULL; + r->old_clips = 0; + r->max_rate = false; + r->exception = false; + + if (!load_soxr()) { + LOG_WARN("resampling disabled"); + return false; + } + + if (opt) { + recipe = next_param(opt, ':'); + flags = next_param(NULL, ':'); + atten = next_param(NULL, ':'); + precision = next_param(NULL, ':'); + passband_end = next_param(NULL, ':'); + stopband_begin = next_param(NULL, ':'); + phase_response = next_param(NULL, ':'); + } + + +#if BYTES_PER_FRAME == 4 + // default to LQ (16 bit) if not user specified + r->q_recipe = SOXR_LQ; +#else + // default to HQ (20 bit) if not user specified + r->q_recipe = SOXR_HQ; +#endif + r->q_flags = 0; + // default to 1db of attenuation if not user specified + r->scale = pow(10, -1.0 / 20); + // override recipe derived values with user specified values + r->q_precision = 0; + r->q_passband_end = 0; + r->q_stopband_begin = 0; + r->q_phase_response = -1; + + if (recipe && recipe[0] != '\0') { + if (strchr(recipe, 'v')) r->q_recipe = SOXR_VHQ; + if (strchr(recipe, 'h')) r->q_recipe = SOXR_HQ; + if (strchr(recipe, 'm')) r->q_recipe = SOXR_MQ; + if (strchr(recipe, 'l')) r->q_recipe = SOXR_LQ; + if (strchr(recipe, 'q')) r->q_recipe = SOXR_QQ; + if (strchr(recipe, 'L')) r->q_recipe |= SOXR_LINEAR_PHASE; + if (strchr(recipe, 'I')) r->q_recipe |= SOXR_INTERMEDIATE_PHASE; + if (strchr(recipe, 'M')) r->q_recipe |= SOXR_MINIMUM_PHASE; + if (strchr(recipe, 's')) r->q_recipe |= SOXR_STEEP_FILTER; + // X = async resampling to max_rate + if (strchr(recipe, 'X')) r->max_rate = true; + // E = exception, only resample if native rate is not supported + if (strchr(recipe, 'E')) r->exception = true; + } + + if (flags) { + r->q_flags = strtoul(flags, 0, 16); + } + + if (atten) { + double scale = pow(10, -atof(atten) / 20); + if (scale > 0 && scale <= 1.0) { + r->scale = scale; + } + } + + if (precision) { + r->q_precision = atof(precision); + } + + if (passband_end) { + r->q_passband_end = atof(passband_end) / 100; + } + + if (stopband_begin) { + r->q_stopband_begin = atof(stopband_begin) / 100; + } + + if (phase_response) { + r->q_phase_response = atof(phase_response); + } + + LOG_INFO("resampling %s recipe: 0x%02x, flags: 0x%02x, scale: %03.2f, precision: %03.1f, passband_end: %03.5f, stopband_begin: %03.5f, phase_response: %03.1f", + r->max_rate ? "async" : "sync", + r->q_recipe, r->q_flags, r->scale, r->q_precision, r->q_passband_end, r->q_stopband_begin, r->q_phase_response); + + return true; +} + +#endif // #if RESAMPLE