mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
gst/equalizer/gstiirequalizer.c: Rename "values" property to "band-values" and change type into a
Original commit message from CVS: * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_class_init), (gst_iir_equalizer_set_property), (gst_iir_equalizer_get_property), (gst_iir_equalizer_filter_inplace): Rename "values" property to "band-values" and change type into a GValueArray, so it's more easily bindable and the range of the values passed in is defined and checked etc.; also do some locking.
This commit is contained in:
parent
4655cbd45d
commit
8996dbb3f9
1 changed files with 34 additions and 16 deletions
|
@ -81,8 +81,7 @@ enum
|
|||
ARG_0,
|
||||
ARG_BANDS,
|
||||
ARG_BANDWIDTH,
|
||||
ARG_VALUES
|
||||
/* FILL ME */
|
||||
ARG_BAND_VALUES
|
||||
};
|
||||
|
||||
static void gst_iir_equalizer_base_init (gpointer g_class);
|
||||
|
@ -176,10 +175,12 @@ gst_iir_equalizer_class_init (gpointer g_class, gpointer class_data)
|
|||
g_param_spec_double ("bandwidth", "bandwidth",
|
||||
"bandwidth calculated as distance between bands * this value", 0.1,
|
||||
5.0, 1.0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
||||
/* FIXME FIXME FIXME */
|
||||
g_object_class_install_property (gobject_class, ARG_VALUES,
|
||||
g_param_spec_pointer ("values", "values",
|
||||
"expects a gdouble* of values to use for the bands",
|
||||
g_object_class_install_property (gobject_class, ARG_BAND_VALUES,
|
||||
g_param_spec_value_array ("band-values", "band values",
|
||||
"GValueArray holding gdouble values, one for each band with values "
|
||||
"ranging from -1.0 to +1.0",
|
||||
g_param_spec_double ("band-value", "band-value",
|
||||
"Equaliser Band Value", -1.0, 1.0, 0.0, G_PARAM_WRITABLE),
|
||||
G_PARAM_WRITABLE));
|
||||
|
||||
audio_filter_class->setup = gst_iir_equalizer_setup;
|
||||
|
@ -281,6 +282,7 @@ gst_iir_equalizer_set_property (GObject * object, guint prop_id,
|
|||
{
|
||||
GstIirEqualizer *equ = GST_IIR_EQUALIZER (object);
|
||||
|
||||
GST_OBJECT_LOCK (equ);
|
||||
switch (prop_id) {
|
||||
case ARG_BANDS:
|
||||
gst_iir_equalizer_compute_frequencies (equ, g_value_get_uint (value));
|
||||
|
@ -298,24 +300,36 @@ gst_iir_equalizer_set_property (GObject * object, guint prop_id,
|
|||
}
|
||||
}
|
||||
break;
|
||||
case ARG_VALUES:
|
||||
{
|
||||
gdouble *new = g_value_get_pointer (value);
|
||||
guint i;
|
||||
case ARG_BAND_VALUES:{
|
||||
GValueArray *arr;
|
||||
|
||||
for (i = 0; i < equ->freq_count; i++) {
|
||||
if (new[i] != equ->values[i]) {
|
||||
equ->values[i] = new[i];
|
||||
setup_filter (equ, &equ->filter[i], arg_to_scale (new[i]),
|
||||
equ->freqs[i] / GST_AUDIO_FILTER (equ)->rate);
|
||||
arr = (GValueArray *) g_value_get_boxed (value);
|
||||
if (arr == NULL) {
|
||||
g_warning ("Application tried to set empty band value array");
|
||||
} else if (arr->n_values != equ->freq_count) {
|
||||
g_warning ("Application tried to set %u band values, but there are "
|
||||
"%u bands", arr->n_values, equ->freq_count);
|
||||
} else {
|
||||
guint i;
|
||||
|
||||
for (i = 0; i < arr->n_values; ++i) {
|
||||
gdouble new_val;
|
||||
|
||||
new_val = g_value_get_double (g_value_array_get_nth (arr, i));
|
||||
if (new_val != equ->values[i]) {
|
||||
equ->values[i] = new_val;
|
||||
setup_filter (equ, &equ->filter[i], arg_to_scale (new_val),
|
||||
equ->freqs[i] / GST_AUDIO_FILTER (equ)->rate);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
GST_OBJECT_UNLOCK (equ);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -324,6 +338,7 @@ gst_iir_equalizer_get_property (GObject * object, guint prop_id,
|
|||
{
|
||||
GstIirEqualizer *equ = GST_IIR_EQUALIZER (object);
|
||||
|
||||
GST_OBJECT_LOCK (equ);
|
||||
switch (prop_id) {
|
||||
case ARG_BANDS:
|
||||
g_value_set_uint (value, equ->freq_count);
|
||||
|
@ -335,6 +350,7 @@ gst_iir_equalizer_get_property (GObject * object, guint prop_id,
|
|||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
GST_OBJECT_UNLOCK (equ);
|
||||
}
|
||||
|
||||
/* start of code that is type specific */
|
||||
|
@ -400,8 +416,10 @@ gst_iir_equalizer_filter_inplace (GstAudioFilter * filter, GstBuffer * buf)
|
|||
{
|
||||
GstIirEqualizer *equ = GST_IIR_EQUALIZER (filter);
|
||||
|
||||
GST_OBJECT_LOCK (equ);
|
||||
equ->process (equ, GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf),
|
||||
filter->channels);
|
||||
GST_OBJECT_UNLOCK (equ);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in a new issue