diff --git a/audio/audio_filter_resample.c b/audio/audio_filter_resample.c index 9e55082..1f30e38 100644 --- a/audio/audio_filter_resample.c +++ b/audio/audio_filter_resample.c @@ -4,6 +4,7 @@ #include "audio.h" #include "audio_internal.h" +#include "audio_filter_resample.h" #include "deps/resampler/speex_resampler.h" typedef struct _FilterResamplerContext { @@ -25,8 +26,7 @@ AudioPipelineStatus filter_resample_push(AudioPipelineElement *self, AudioBuffer return PipelineError; } - uint32_t buf_sz = (self->sample_rate / context->source_sample_rate) * buffer->buf_size; - + uint32_t buf_sz = (((float)self->sample_rate / (float)context->source_sample_rate) * (float)buffer->buf_size) + 1; // Realloc if buffer size mismatch if ((context->outputBuffer != NULL) && (context->outputBuffer->buf_size < buf_sz)) { @@ -63,7 +63,7 @@ AudioPipelineStatus filter_resample_push(AudioPipelineElement *self, AudioBuffer if (in_sz != (buffer->buf_size / self->channels / 2)) { fprintf(stderr, "WARN: Processed %d samples of %d!\n", in_sz, (buffer->buf_size / self->channels / 2)); } - if (out_sz != (context->outputBuffer->buf_size / self->channels / 2)) { + if ((context->outputBuffer->buf_size / self->channels / 2) - out_sz > 2) { fprintf(stderr, "WARN: Output only %d samples of %d!\n", out_sz, (context->outputBuffer->buf_size / self->channels / 2)); } @@ -98,7 +98,7 @@ AudioPipelineStatus filter_resample_link(AudioPipelineElement *self, AudioPipeli if (source->sample_rate > 0) { int err = 0; - context->st = speex_resampler_init(source->channels, source->sample_rate, self->sample_rate, 4, &err); + context->st = speex_resampler_init(source->channels, source->sample_rate, self->sample_rate, RESAMPLE_QUALITY, &err); if (context->st == NULL) { fprintf(stderr, "ERROR: Error initializing resampler: %d\n", err); return PipelineError; diff --git a/audio/deps/resampler/config.h b/audio/deps/resampler/config.h index 61cb173..3d28b91 100644 --- a/audio/deps/resampler/config.h +++ b/audio/deps/resampler/config.h @@ -1,8 +1,8 @@ /* Make use of ARM4 assembly optimizations */ -/* #undef ARM4_ASM */ +#undef ARM4_ASM /* Make use of ARM5E assembly optimizations */ -/* #undef ARM5E_ASM */ +#undef ARM5E_ASM /* Enable NEON support */ #define USE_NEON /**/ @@ -11,7 +11,7 @@ #define EXPORT __attribute__((visibility("default"))) /* Debug fixed-point implementation */ -/* #undef FIXED_DEBUG */ +#undef FIXED_DEBUG /* Use C99 variable-size arrays */ #define VAR_ARRAYS /**/ diff --git a/audio/deps/resampler/resample.c b/audio/deps/resampler/resample.c index 987f9e3..88f9ac4 100644 --- a/audio/deps/resampler/resample.c +++ b/audio/deps/resampler/resample.c @@ -559,7 +559,7 @@ static int update_filter(SpeexResamplerState *st) for (i=st->nb_channels;i--;) { spx_uint32_t j; - spx_uint32_t olen = old_length; + spx_uint32_t olen; /* = old_length; */ /*if (st->magic_samples[i])*/ { /* Try and remove the magic samples as if nothing had happened */ diff --git a/audio/include/audio_filter_resample.h b/audio/include/audio_filter_resample.h index 4a95b42..752693d 100644 --- a/audio/include/audio_filter_resample.h +++ b/audio/include/audio_filter_resample.h @@ -13,5 +13,7 @@ */ AudioPipelineElement *audio_filter_resample(uint32_t output_sample_rate); +#define RESAMPLE_QUALITY 1 + #endif /* AUDIOPIPELINE_AUDIO_FILTER_RESAMPLE_H__INCLUDED */