GST_DEBUG_CATEGORY_STATIC (gst_pitch_debug);
#define GST_CAT_DEFAULT gst_pitch_debug
-#define RATE 8000
+#define RATE 32000
+#define RATESTR "32000"
#define WANTED RATE * 2
/* Filter signals and args */
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("audio/x-raw-int, "
- "rate = (int) 8000, "
+ "rate = (int) " RATESTR ", "
"channels = (int) 1, "
"endianness = (int) BYTE_ORDER, "
"width = (int) 16, " "depth = (int) 16, " "signed = (boolean) true")
}
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);