Most signal processing texts, including MATLAB, use the following convention for IIR filter coefficients:
a_0 y[n] + a_1 y[n-1] + ... + a_M y[n-M] = b_0 x[n] + b_1 x[n-1] + ... + b[N] x[n-N]
Usually, a_0 is set to 1 because the coefficients can always be rescaled, giving
y[n] = b_0 x[n] + b_1 x[n-1] + ... + b[N] x[n-N] - a_1 y[n-1] - ... - a_M y[n-M]
The convention that was previously used by audiofxbaseiirfilter and derived class had the a and b coefficients swapped, and did not have the minus signs.
This change makes the audiofx plugin use the more common convention described above.
Add private replacements for deprecated functions such as
g_mutex_new(), g_mutex_free(), g_cond_new() etc., mostly
to avoid the deprecation warnings. We'll change these
over to the new API once we depend on glib >= 2.32.
Link to properties. Correct titles for examples. Document a few trivial cases. Keep lists in section file and docs/plugins/Makefile.am alphabetically ordered.
Original commit message from CVS:
* gst/audiofx/audiochebband.c: (gst_audio_cheb_band_class_init),
(gst_audio_cheb_band_init), (gst_audio_cheb_band_finalize),
(gst_audio_cheb_band_set_property):
* gst/audiofx/audiochebband.h:
* gst/audiofx/audiocheblimit.c: (gst_audio_cheb_limit_class_init),
(gst_audio_cheb_limit_init), (gst_audio_cheb_limit_finalize),
(gst_audio_cheb_limit_set_property):
* gst/audiofx/audiocheblimit.h:
* gst/audiofx/audiowsincband.c: (gst_audio_wsincband_class_init),
(gst_audio_wsincband_init), (gst_audio_wsincband_finalize),
(gst_audio_wsincband_set_property):
* gst/audiofx/audiowsincband.h:
* gst/audiofx/audiowsinclimit.c: (gst_audio_wsinclimit_class_init),
(gst_audio_wsinclimit_init), (gst_audio_wsinclimit_finalize),
(gst_audio_wsinclimit_set_property):
* gst/audiofx/audiowsinclimit.h:
Use a custom mutex for protecting the instance fields instead of
the GstObject lock. Using the latter can lead to deadlocks, especially
with the FIR filters when updating the latency.
Original commit message from CVS:
* gst/audiofx/Makefile.am:
* gst/audiofx/audiofxbaseiirfilter.c:
(gst_audio_fx_base_iir_filter_base_init),
(gst_audio_fx_base_iir_filter_dispose),
(gst_audio_fx_base_iir_filter_class_init),
(gst_audio_fx_base_iir_filter_init),
(gst_audio_fx_base_iir_filter_calculate_gain),
(gst_audio_fx_base_iir_filter_set_coefficients),
(gst_audio_fx_base_iir_filter_setup), (process),
(gst_audio_fx_base_iir_filter_transform_ip),
(gst_audio_fx_base_iir_filter_stop):
* gst/audiofx/audiofxbaseiirfilter.h:
Implement a base class for IIR filters.
* gst/audiofx/audiochebband.c: (gst_audio_cheb_band_base_init),
(gst_audio_cheb_band_class_init), (gst_audio_cheb_band_init),
(generate_coefficients), (gst_audio_cheb_band_set_property),
(gst_audio_cheb_band_setup):
* gst/audiofx/audiochebband.h:
* gst/audiofx/audiocheblimit.c: (gst_audio_cheb_limit_base_init),
(gst_audio_cheb_limit_class_init), (gst_audio_cheb_limit_init),
(generate_coefficients), (gst_audio_cheb_limit_set_property),
(gst_audio_cheb_limit_setup):
* gst/audiofx/audiocheblimit.h:
Use the IIR filter base class for the chebyshev filters.
Original commit message from CVS:
* configure.ac:
* gst/audiofx/Makefile.am:
* gst/audiofx/audiochebband.c:
* gst/audiofx/audiocheblimit.c:
* gst/audiofx/math_compat.h:
Check for sinh(), cosh() and asinh() and define our own
implementations if they're not available. Fixes bug #520880.
Original commit message from CVS:
* configure.ac:
* gst/audiofx/audioamplify.c:
(gst_audio_amplify_clipping_method_get_type),
(gst_audio_amplify_init), (gst_audio_amplify_transform_ip):
* gst/audiofx/audiodynamic.c: (gst_audio_dynamic_init),
(gst_audio_dynamic_transform_ip):
* gst/audiofx/audioinvert.c: (gst_audio_invert_init),
(gst_audio_invert_transform_ip):
* gst/audiofx/audiopanorama.c: (gst_audio_panorama_init),
(gst_audio_panorama_transform):
* gst/level/gstlevel.c: (gst_level_init):
Make elements GST_BUFFER_FLAG_GAP aware and call
gst_base_transform_set_gap_aware for this.
Bump core requirement to CVS.
* gst/audiofx/audiochebyshevfreqband.c:
(gst_audio_chebyshev_freq_band_transform_ip):
* gst/audiofx/audiochebyshevfreqlimit.c:
(gst_audio_chebyshev_freq_limit_transform_ip):
Also sync GObject properties to the controller if operating
in passthrough mode.
Original commit message from CVS:
* gst/audiofx/audioamplify.c: (gst_audio_amplify_transform_ip):
* gst/audiofx/audiochebyshevfreqband.c:
(gst_audio_chebyshev_freq_band_transform_ip):
* gst/audiofx/audiochebyshevfreqlimit.c:
(gst_audio_chebyshev_freq_limit_transform_ip):
* gst/audiofx/audiodynamic.c: (gst_audio_dynamic_transform_ip):
* gst/audiofx/audioinvert.c: (gst_audio_invert_transform_ip):
The transform_ip() methods should do nothing if in passthrough mode.
It might get non-writable buffers in that case but the buffer might
as well be writable.
* gst/audiofx/audiopanorama.c: (gst_audio_panorama_transform):
The transform() methods won't be called in passthrough mode and
otherwise the buffer is always writable so don't check here.
Original commit message from CVS:
* gst/audiofx/audiochebyshevfreqband.c:
* gst/audiofx/audiochebyshevfreqlimit.c:
Add small comparision with the windowed sinc filters in the docs.
Original commit message from CVS:
* gst/audiofx/audiochebyshevfreqband.c:
(gst_audio_chebyshev_freq_band_class_init):
* gst/audiofx/audiochebyshevfreqlimit.c:
(gst_audio_chebyshev_freq_limit_class_init):
Use generator macros for the process functions for the different
sample types, add lower upper boundaries for the GObject properties
so automatically generated UIs can use sliders and add a note about
the number of poles as a too high number of poles combined with
very low or very high frequencies will produce only noise.
* docs/plugins/gst-plugins-good-plugins.args:
Regenerated for the property changes.