diff options
Diffstat (limited to 'gst/audiofx/audiocheblimit.c')
-rw-r--r-- | gst/audiofx/audiocheblimit.c | 55 |
1 files changed, 24 insertions, 31 deletions
diff --git a/gst/audiofx/audiocheblimit.c b/gst/audiofx/audiocheblimit.c index 8d51fbbf6..250857ec0 100644 --- a/gst/audiofx/audiocheblimit.c +++ b/gst/audiofx/audiocheblimit.c @@ -66,11 +66,12 @@ #include "config.h" #endif +#include <string.h> + #include <gst/gst.h> #include <gst/base/gstbasetransform.h> #include <gst/audio/audio.h> #include <gst/audio/gstaudiofilter.h> -#include <gst/controller/gstcontroller.h> #include <math.h> @@ -91,12 +92,9 @@ enum PROP_POLES }; -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_audio_cheb_limit_debug, "audiocheblimit", 0, "audiocheblimit element"); - -GST_BOILERPLATE_FULL (GstAudioChebLimit, - gst_audio_cheb_limit, GstAudioFXBaseIIRFilter, - GST_TYPE_AUDIO_FX_BASE_IIR_FILTER, DEBUG_INIT); +#define gst_audio_cheb_limit_parent_class parent_class +G_DEFINE_TYPE (GstAudioChebLimit, + gst_audio_cheb_limit, GST_TYPE_AUDIO_FX_BASE_IIR_FILTER); static void gst_audio_cheb_limit_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); @@ -105,7 +103,7 @@ static void gst_audio_cheb_limit_get_property (GObject * object, static void gst_audio_cheb_limit_finalize (GObject * object); static gboolean gst_audio_cheb_limit_setup (GstAudioFilter * filter, - GstRingBufferSpec * format); + const GstAudioInfo * info); enum { @@ -136,23 +134,15 @@ gst_audio_cheb_limit_mode_get_type (void) /* GObject vmethod implementations */ static void -gst_audio_cheb_limit_base_init (gpointer klass) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_set_details_simple (element_class, - "Low pass & high pass filter", - "Filter/Effect/Audio", - "Chebyshev low pass and high pass filter", - "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); -} - -static void gst_audio_cheb_limit_class_init (GstAudioChebLimitClass * klass) { GObjectClass *gobject_class = (GObjectClass *) klass; + GstElementClass *gstelement_class = (GstElementClass *) klass; GstAudioFilterClass *filter_class = (GstAudioFilterClass *) klass; + GST_DEBUG_CATEGORY_INIT (gst_audio_cheb_limit_debug, "audiocheblimit", 0, + "audiocheblimit element"); + gobject_class->set_property = gst_audio_cheb_limit_set_property; gobject_class->get_property = gst_audio_cheb_limit_get_property; gobject_class->finalize = gst_audio_cheb_limit_finalize; @@ -186,12 +176,17 @@ gst_audio_cheb_limit_class_init (GstAudioChebLimitClass * klass) 2, 32, 4, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); + gst_element_class_set_details_simple (gstelement_class, + "Low pass & high pass filter", + "Filter/Effect/Audio", + "Chebyshev low pass and high pass filter", + "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); + filter_class->setup = GST_DEBUG_FUNCPTR (gst_audio_cheb_limit_setup); } static void -gst_audio_cheb_limit_init (GstAudioChebLimit * filter, - GstAudioChebLimitClass * klass) +gst_audio_cheb_limit_init (GstAudioChebLimit * filter) { filter->cutoff = 0.0; filter->mode = MODE_LOW_PASS; @@ -324,7 +319,7 @@ generate_biquad_coefficients (GstAudioChebLimit * filter, { gdouble k, d; gdouble omega = - 2.0 * G_PI * (filter->cutoff / GST_AUDIO_FILTER (filter)->format.rate); + 2.0 * G_PI * (filter->cutoff / GST_AUDIO_FILTER_RATE (filter)); if (filter->mode == MODE_LOW_PASS) k = sin ((1.0 - omega) / 2.0) / sin ((1.0 + omega) / 2.0); @@ -348,7 +343,7 @@ generate_biquad_coefficients (GstAudioChebLimit * filter, static void generate_coefficients (GstAudioChebLimit * filter) { - if (GST_AUDIO_FILTER (filter)->format.rate == 0) { + if (GST_AUDIO_FILTER_RATE (filter) == 0) { gdouble *a = g_new0 (gdouble, 1); a[0] = 1.0; @@ -359,7 +354,7 @@ generate_coefficients (GstAudioChebLimit * filter) return; } - if (filter->cutoff >= GST_AUDIO_FILTER (filter)->format.rate / 2.0) { + if (filter->cutoff >= GST_AUDIO_FILTER_RATE (filter) / 2.0) { gdouble *a = g_new0 (gdouble, 1); a[0] = (filter->mode == MODE_LOW_PASS) ? 1.0 : 0.0; @@ -456,8 +451,7 @@ generate_coefficients (GstAudioChebLimit * filter) #ifndef GST_DISABLE_GST_DEBUG { gdouble wc = - 2.0 * G_PI * (filter->cutoff / - GST_AUDIO_FILTER (filter)->format.rate); + 2.0 * G_PI * (filter->cutoff / GST_AUDIO_FILTER_RATE (filter)); gdouble zr = cos (wc), zi = sin (wc); GST_LOG_OBJECT (filter, "%.2f dB gain @ %d Hz", @@ -468,8 +462,7 @@ generate_coefficients (GstAudioChebLimit * filter) GST_LOG_OBJECT (filter, "%.2f dB gain @ %d Hz", 20.0 * log10 (gst_audio_fx_base_iir_filter_calculate_gain (a, np + 1, b, - np + 1, -1.0, 0.0)), - GST_AUDIO_FILTER (filter)->format.rate / 2); + np + 1, -1.0, 0.0)), GST_AUDIO_FILTER_RATE (filter) / 2); } } @@ -558,11 +551,11 @@ gst_audio_cheb_limit_get_property (GObject * object, guint prop_id, /* GstAudioFilter vmethod implementations */ static gboolean -gst_audio_cheb_limit_setup (GstAudioFilter * base, GstRingBufferSpec * format) +gst_audio_cheb_limit_setup (GstAudioFilter * base, const GstAudioInfo * info) { GstAudioChebLimit *filter = GST_AUDIO_CHEB_LIMIT (base); generate_coefficients (filter); - return GST_AUDIO_FILTER_CLASS (parent_class)->setup (base, format); + return GST_AUDIO_FILTER_CLASS (parent_class)->setup (base, info); } |