[0.10] gst-plugins-good: equalizer: fix switching from passthrough to non-passthrough when parameters change
Tim Müller
tpm at kemper.freedesktop.org
Fri Feb 17 12:30:22 PST 2012
Module: gst-plugins-good
Branch: 0.10
Commit: f6c2fcbc40d7a66bfaa06efe338200889c733bc3
URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=f6c2fcbc40d7a66bfaa06efe338200889c733bc3
Author: Tim-Philipp Müller <tim.muller at collabora.co.uk>
Date: Fri Feb 17 17:21:53 2012 +0000
equalizer: fix switching from passthrough to non-passthrough when parameters change
commit b5bf0294 moved the if(need_new_coefficients) set_passthrough(equ)
after the if(is_passthrough) return FLOW_OK shortcut, so the passthrough
mode would never get updated even if the coefficients change.
Fixes equalizer-test doing .. nothing.
---
gst/equalizer/gstiirequalizer.c | 11 +++++++++--
1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/gst/equalizer/gstiirequalizer.c b/gst/equalizer/gstiirequalizer.c
index d66db1a..ffd2c43 100644
--- a/gst/equalizer/gstiirequalizer.c
+++ b/gst/equalizer/gstiirequalizer.c
@@ -834,11 +834,16 @@ gst_iir_equalizer_transform_ip (GstBaseTransform * btrans, GstBuffer * buf)
GstAudioFilter *filter = GST_AUDIO_FILTER (btrans);
GstIirEqualizer *equ = GST_IIR_EQUALIZER (btrans);
GstClockTime timestamp;
+ gboolean need_new_coefficients;
if (G_UNLIKELY (filter->format.channels < 1 || equ->process == NULL))
return GST_FLOW_NOT_NEGOTIATED;
- if (gst_base_transform_is_passthrough (btrans))
+ BANDS_LOCK (equ);
+ need_new_coefficients = equ->need_new_coefficients;
+ BANDS_UNLOCK (equ);
+
+ if (!need_new_coefficients && gst_base_transform_is_passthrough (btrans))
return GST_FLOW_OK;
timestamp = GST_BUFFER_TIMESTAMP (buf);
@@ -850,14 +855,16 @@ gst_iir_equalizer_transform_ip (GstBaseTransform * btrans, GstBuffer * buf)
guint f, nf = equ->freq_band_count;
gst_object_sync_values (G_OBJECT (equ), timestamp);
+
/* sync values for bands too */
+ /* FIXME: iterating equ->bands is not thread-safe here */
for (f = 0; f < nf; f++) {
gst_object_sync_values (G_OBJECT (filters[f]), timestamp);
}
}
BANDS_LOCK (equ);
- if (equ->need_new_coefficients) {
+ if (need_new_coefficients) {
update_coefficients (equ);
set_passthrough (equ);
}
More information about the gstreamer-commits
mailing list