}
static void
-gst_pitch_setup_algorithm (GstPitch * filter)
+gst_pitch_setup_algorithm (GstPitch * filter, GstPitchAlgorithm algorithm)
{
- if (filter->algorithm == GST_PITCH_ALGORITHM_HPS) {
+ g_mutex_lock (filter->mutex);
+ if (algorithm == GST_PITCH_ALGORITHM_HPS) {
if (NULL == filter->module)
filter->module = (gint *) g_malloc (RATE * sizeof (gint));
}
filter->module = NULL;
}
+ filter->algorithm = algorithm;
+ g_mutex_unlock (filter->mutex);
}
static void
filter->minfreq = 30;
filter->maxfreq = 1500;
filter->message = TRUE;
- filter->algorithm = DEFAULT_PROP_ALGORITHM;
- gst_pitch_setup_algorithm (filter);
+ filter->mutex = g_mutex_new ();
+
+ gst_pitch_setup_algorithm (filter, DEFAULT_PROP_ALGORITHM);
}
static void
if (filter->module)
g_free (filter->module);
+ g_mutex_free (filter->mutex);
+
kiss_fft_cleanup ();
G_OBJECT_CLASS (parent_class)->dispose (object);
filter->maxfreq = g_value_get_int (value);
break;
case PROP_ALGORITHM:
- filter->algorithm = g_value_get_enum (value);
- gst_pitch_setup_algorithm (filter);
+ gst_pitch_setup_algorithm (filter, g_value_get_enum (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
filter->maxfreq);
/*GST_DEBUG_OBJECT (filter, "min_i = %d, max_i = %d", min_i, max_i); */
+ g_mutex_lock (filter->mutex);
switch (filter->algorithm) {
case GST_PITCH_ALGORITHM_FFT:
default:
break;
}
+ g_mutex_unlock (filter->mutex);
/*
g_debug("freq %d[%d]\n", frequency, frequency_module);