diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2009-01-13 08:24:25 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2009-01-13 08:24:25 +0000 |
commit | 4b227159cba3b5953d85dd5358cefece06e5d35f (patch) | |
tree | 6630d729b65c51975b5bba695d914cd49b5c14f9 /gst/audiofx/audiowsinclimit.c | |
parent | 0016658ace7e5b84095b44ad7bae27218334143b (diff) |
gst/audiofx/: Use a custom mutex for protecting the instance fields instead of the GstObject lock. Using the latter c...
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.
Diffstat (limited to 'gst/audiofx/audiowsinclimit.c')
-rw-r--r-- | gst/audiofx/audiowsinclimit.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/gst/audiofx/audiowsinclimit.c b/gst/audiofx/audiowsinclimit.c index 68e8522c..1f33ad2d 100644 --- a/gst/audiofx/audiowsinclimit.c +++ b/gst/audiofx/audiowsinclimit.c @@ -26,11 +26,6 @@ * chapter 16 * available at http://www.dspguide.com/ * - * TODO: - Implement the convolution in place, probably only makes sense - * when using FFT convolution as currently the convolution itself - * is probably the bottleneck - * - Maybe allow cascading the filter to get a better stopband attenuation. - * Can be done by convolving a filter kernel with itself */ /** @@ -147,6 +142,7 @@ static void gst_audio_wsinclimit_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_audio_wsinclimit_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); +static void gst_audio_wsinclimit_finalize (GObject * object); static gboolean gst_audio_wsinclimit_setup (GstAudioFilter * base, GstRingBufferSpec * format); @@ -175,6 +171,7 @@ gst_audio_wsinclimit_class_init (GstAudioWSincLimitClass * klass) gobject_class->set_property = gst_audio_wsinclimit_set_property; gobject_class->get_property = gst_audio_wsinclimit_get_property; + gobject_class->finalize = gst_audio_wsinclimit_finalize; /* FIXME: Don't use the complete possible range but restrict the upper boundary * so automatically generated UIs can use a slider */ @@ -211,6 +208,8 @@ gst_audio_wsinclimit_init (GstAudioWSincLimit * self, self->window = WINDOW_HAMMING; self->kernel_length = 101; self->cutoff = 0.0; + + self->lock = g_mutex_new (); } static void @@ -293,6 +292,17 @@ gst_audio_wsinclimit_setup (GstAudioFilter * base, GstRingBufferSpec * format) } static void +gst_audio_wsinclimit_finalize (GObject * object) +{ + GstAudioWSincLimit *self = GST_AUDIO_WSINC_LIMIT (object); + + g_mutex_free (self->lock); + self->lock = NULL; + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void gst_audio_wsinclimit_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { @@ -304,7 +314,7 @@ gst_audio_wsinclimit_set_property (GObject * object, guint prop_id, case PROP_LENGTH:{ gint val; - GST_OBJECT_LOCK (self); + g_mutex_lock (self->lock); val = g_value_get_int (value); if (val % 2 == 0) val++; @@ -315,26 +325,26 @@ gst_audio_wsinclimit_set_property (GObject * object, guint prop_id, self->kernel_length = val; gst_audio_wsinclimit_build_kernel (self); } - GST_OBJECT_UNLOCK (self); + g_mutex_unlock (self->lock); break; } case PROP_FREQUENCY: - GST_OBJECT_LOCK (self); + g_mutex_lock (self->lock); self->cutoff = g_value_get_float (value); gst_audio_wsinclimit_build_kernel (self); - GST_OBJECT_UNLOCK (self); + g_mutex_unlock (self->lock); break; case PROP_MODE: - GST_OBJECT_LOCK (self); + g_mutex_lock (self->lock); self->mode = g_value_get_enum (value); gst_audio_wsinclimit_build_kernel (self); - GST_OBJECT_UNLOCK (self); + g_mutex_unlock (self->lock); break; case PROP_WINDOW: - GST_OBJECT_LOCK (self); + g_mutex_lock (self->lock); self->window = g_value_get_enum (value); gst_audio_wsinclimit_build_kernel (self); - GST_OBJECT_UNLOCK (self); + g_mutex_unlock (self->lock); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |