soxr: Use soxr_clear() if libsoxr version is 0.1.2 or later.

The 0.1.2 version of libsoxr fixes soxr_process() crash after soxr_clear() is used, so check the library version at compile time and use soxr_clear() if possible.
This commit is contained in:
Andrey Semashev 2015-10-31 18:59:46 +03:00 committed by David Henningsson
parent 4bda712ee1
commit 8fe9847706

View file

@ -64,17 +64,17 @@ static void resampler_soxr_free(pa_resampler *r) {
} }
static void resampler_soxr_reset(pa_resampler *r) { static void resampler_soxr_reset(pa_resampler *r) {
#if SOXR_THIS_VERSION >= SOXR_VERSION(0, 1, 2)
pa_assert(r);
soxr_clear(r->impl.data);
#else
/* With libsoxr prior to 0.1.2 soxr_clear() makes soxr_process() crash afterwards,
* so don't use this function and re-create the context instead. */
soxr_t old_state; soxr_t old_state;
pa_assert(r); pa_assert(r);
/*
* soxr_clear() makes soxr_process() crash afterwards,
* so don't use this function until libsoxr is fixed.
*
* soxr_clear(r->impl.data);
*/
old_state = r->impl.data; old_state = r->impl.data;
r->impl.data = NULL; r->impl.data = NULL;
@ -85,6 +85,7 @@ static void resampler_soxr_reset(pa_resampler *r) {
r->impl.data = old_state; r->impl.data = old_state;
pa_log_error("Failed to reset libsoxr context"); pa_log_error("Failed to reset libsoxr context");
} }
#endif
} }
static void resampler_soxr_update_rates(pa_resampler *r) { static void resampler_soxr_update_rates(pa_resampler *r) {