diff options
author | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2012-02-17 17:21:53 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2012-02-17 18:35:54 +0000 |
commit | f76f7374ea2227b8422aa6c3b1e084fff0180d0a (patch) | |
tree | f0b2199b25bab533ceec254f1900b58ccd0949b6 | |
parent | 5cb42081a5c401192cc5b2897181eb05e260adab (diff) | |
download | gstreamer-plugins-good-f76f7374ea2227b8422aa6c3b1e084fff0180d0a.tar.gz |
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.
-rw-r--r-- | 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 d66db1a4d..ffd2c4348 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); } |