summaryrefslogtreecommitdiffstats
path: root/gst/audiofx/audiocheblimit.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/audiofx/audiocheblimit.c')
-rw-r--r--gst/audiofx/audiocheblimit.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/gst/audiofx/audiocheblimit.c b/gst/audiofx/audiocheblimit.c
index 4d8d311d..b4efbb3a 100644
--- a/gst/audiofx/audiocheblimit.c
+++ b/gst/audiofx/audiocheblimit.c
@@ -109,6 +109,7 @@ static void gst_audio_cheb_limit_set_property (GObject * object,
guint prop_id, const GValue * value, GParamSpec * pspec);
static void gst_audio_cheb_limit_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec);
+static void gst_audio_cheb_limit_finalize (GObject * object);
static gboolean gst_audio_cheb_limit_setup (GstAudioFilter * filter,
GstRingBufferSpec * format);
@@ -161,6 +162,7 @@ gst_audio_cheb_limit_class_init (GstAudioChebLimitClass * klass)
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;
g_object_class_install_property (gobject_class, PROP_MODE,
g_param_spec_enum ("mode", "Mode",
@@ -203,6 +205,8 @@ gst_audio_cheb_limit_init (GstAudioChebLimit * filter,
filter->type = 1;
filter->poles = 4;
filter->ripple = 0.25;
+
+ filter->lock = g_mutex_new ();
}
static void
@@ -479,6 +483,17 @@ generate_coefficients (GstAudioChebLimit * filter)
}
static void
+gst_audio_cheb_limit_finalize (GObject * object)
+{
+ GstAudioChebLimit *filter = GST_AUDIO_CHEB_LIMIT (object);
+
+ g_mutex_free (filter->lock);
+ filter->lock = NULL;
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
gst_audio_cheb_limit_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
@@ -486,34 +501,34 @@ gst_audio_cheb_limit_set_property (GObject * object, guint prop_id,
switch (prop_id) {
case PROP_MODE:
- GST_OBJECT_LOCK (filter);
+ g_mutex_lock (filter->lock);
filter->mode = g_value_get_enum (value);
generate_coefficients (filter);
- GST_OBJECT_UNLOCK (filter);
+ g_mutex_unlock (filter->lock);
break;
case PROP_TYPE:
- GST_OBJECT_LOCK (filter);
+ g_mutex_lock (filter->lock);
filter->type = g_value_get_int (value);
generate_coefficients (filter);
- GST_OBJECT_UNLOCK (filter);
+ g_mutex_unlock (filter->lock);
break;
case PROP_CUTOFF:
- GST_OBJECT_LOCK (filter);
+ g_mutex_lock (filter->lock);
filter->cutoff = g_value_get_float (value);
generate_coefficients (filter);
- GST_OBJECT_UNLOCK (filter);
+ g_mutex_unlock (filter->lock);
break;
case PROP_RIPPLE:
- GST_OBJECT_LOCK (filter);
+ g_mutex_lock (filter->lock);
filter->ripple = g_value_get_float (value);
generate_coefficients (filter);
- GST_OBJECT_UNLOCK (filter);
+ g_mutex_unlock (filter->lock);
break;
case PROP_POLES:
- GST_OBJECT_LOCK (filter);
+ g_mutex_lock (filter->lock);
filter->poles = GST_ROUND_UP_2 (g_value_get_int (value));
generate_coefficients (filter);
- GST_OBJECT_UNLOCK (filter);
+ g_mutex_unlock (filter->lock);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);