[pulseaudio-discuss] [PATCH] Use soxr_clear() if libsoxr version is 0.1.2 or later.
Andrey Semashev
andrey.semashev at gmail.com
Sat Oct 31 08:59:46 PDT 2015
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.
---
src/pulsecore/resampler/soxr.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/src/pulsecore/resampler/soxr.c b/src/pulsecore/resampler/soxr.c
index b5f0007..b1b2e19 100644
--- a/src/pulsecore/resampler/soxr.c
+++ b/src/pulsecore/resampler/soxr.c
@@ -64,17 +64,17 @@ static void resampler_soxr_free(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;
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;
r->impl.data = NULL;
@@ -85,6 +85,7 @@ static void resampler_soxr_reset(pa_resampler *r) {
r->impl.data = old_state;
pa_log_error("Failed to reset libsoxr context");
}
+#endif
}
static void resampler_soxr_update_rates(pa_resampler *r) {
--
2.5.0
More information about the pulseaudio-discuss
mailing list