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.
This commit is contained in:
Tim-Philipp Müller 2012-02-17 17:21:53 +00:00
parent 5cb42081a5
commit f76f7374ea

View file

@ -834,11 +834,16 @@ gst_iir_equalizer_transform_ip (GstBaseTransform * btrans, GstBuffer * buf)
GstAudioFilter *filter = GST_AUDIO_FILTER (btrans); GstAudioFilter *filter = GST_AUDIO_FILTER (btrans);
GstIirEqualizer *equ = GST_IIR_EQUALIZER (btrans); GstIirEqualizer *equ = GST_IIR_EQUALIZER (btrans);
GstClockTime timestamp; GstClockTime timestamp;
gboolean need_new_coefficients;
if (G_UNLIKELY (filter->format.channels < 1 || equ->process == NULL)) if (G_UNLIKELY (filter->format.channels < 1 || equ->process == NULL))
return GST_FLOW_NOT_NEGOTIATED; 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; return GST_FLOW_OK;
timestamp = GST_BUFFER_TIMESTAMP (buf); 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; guint f, nf = equ->freq_band_count;
gst_object_sync_values (G_OBJECT (equ), timestamp); gst_object_sync_values (G_OBJECT (equ), timestamp);
/* sync values for bands too */ /* sync values for bands too */
/* FIXME: iterating equ->bands is not thread-safe here */
for (f = 0; f < nf; f++) { for (f = 0; f < nf; f++) {
gst_object_sync_values (G_OBJECT (filters[f]), timestamp); gst_object_sync_values (G_OBJECT (filters[f]), timestamp);
} }
} }
BANDS_LOCK (equ); BANDS_LOCK (equ);
if (equ->need_new_coefficients) { if (need_new_coefficients) {
update_coefficients (equ); update_coefficients (equ);
set_passthrough (equ); set_passthrough (equ);
} }