summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog21
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.args22
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.signals102
-rw-r--r--docs/plugins/inspect/plugin-gstrtpmanager.xml2
-rw-r--r--gst/filter/gstbpwsinc.c141
-rw-r--r--gst/filter/gstbpwsinc.h2
-rw-r--r--gst/filter/gstlpwsinc.c143
-rw-r--r--gst/filter/gstlpwsinc.h2
-rw-r--r--tests/check/elements/lpwsinc.c10
9 files changed, 255 insertions, 190 deletions
diff --git a/ChangeLog b/ChangeLog
index c74f1140..db681edf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2007-08-17 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * gst/filter/gstbpwsinc.c: (gst_bpwsinc_class_init),
+ (bpwsinc_set_property), (bpwsinc_get_property):
+ * gst/filter/gstbpwsinc.h:
+ * gst/filter/gstlpwsinc.c: (gst_lpwsinc_class_init),
+ (gst_lpwsinc_init), (lpwsinc_build_kernel), (lpwsinc_set_property),
+ (lpwsinc_get_property):
+ * gst/filter/gstlpwsinc.h:
+ * tests/check/elements/lpwsinc.c: (GST_START_TEST):
+ Use generator macros for the process functions for the different
+ sample types, add lower upper boundaries for the GObject properties
+ so automatically generated UIs can use sliders and change frequency
+ properties to floats to save a bit of memory, even ints would in
+ theory be enough. Also rename frequency to cutoff for consistency
+ reasons.
+ * docs/plugins/gst-plugins-bad-plugins.args:
+ * docs/plugins/gst-plugins-bad-plugins.signals:
+ * docs/plugins/inspect/plugin-gstrtpmanager.xml:
+ Regenerated for the above changes.
+
2007-08-17 Stefan Kost <ensonic@users.sf.net>
* ext/amrwb/gstamrwbparse.c:
diff --git a/docs/plugins/gst-plugins-bad-plugins.args b/docs/plugins/gst-plugins-bad-plugins.args
index aaa99cbd..24b1ed0f 100644
--- a/docs/plugins/gst-plugins-bad-plugins.args
+++ b/docs/plugins/gst-plugins-bad-plugins.args
@@ -1501,7 +1501,7 @@
<ARG>
<NAME>GstBPWSinc::length</NAME>
<TYPE>gint</TYPE>
-<RANGE>>= 3</RANGE>
+<RANGE>[3,50000]</RANGE>
<FLAGS>rw</FLAGS>
<NICK>Length</NICK>
<BLURB>Filter kernel length, will be rounded to the next odd number.</BLURB>
@@ -1510,8 +1510,8 @@
<ARG>
<NAME>GstBPWSinc::lower-frequency</NAME>
-<TYPE>gdouble</TYPE>
-<RANGE>>= 0</RANGE>
+<TYPE>gfloat</TYPE>
+<RANGE>[0,100000]</RANGE>
<FLAGS>rw</FLAGS>
<NICK>Lower Frequency</NICK>
<BLURB>Cut-off lower frequency (Hz).</BLURB>
@@ -1520,8 +1520,8 @@
<ARG>
<NAME>GstBPWSinc::upper-frequency</NAME>
-<TYPE>gdouble</TYPE>
-<RANGE>>= 0</RANGE>
+<TYPE>gfloat</TYPE>
+<RANGE>[0,100000]</RANGE>
<FLAGS>rw</FLAGS>
<NICK>Upper Frequency</NICK>
<BLURB>Cut-off upper frequency (Hz).</BLURB>
@@ -1561,7 +1561,7 @@
<ARG>
<NAME>GstLPWSinc::length</NAME>
<TYPE>gint</TYPE>
-<RANGE>>= 3</RANGE>
+<RANGE>[3,50000]</RANGE>
<FLAGS>rw</FLAGS>
<NICK>Length</NICK>
<BLURB>Filter kernel length, will be rounded to the next odd number.</BLURB>
@@ -1589,6 +1589,16 @@
</ARG>
<ARG>
+<NAME>GstLPWSinc::cutoff</NAME>
+<TYPE>gfloat</TYPE>
+<RANGE>[0,100000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Cutoff</NICK>
+<BLURB>Cut-off Frequency (Hz).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstIIR::A</NAME>
<TYPE>gdouble</TYPE>
<RANGE></RANGE>
diff --git a/docs/plugins/gst-plugins-bad-plugins.signals b/docs/plugins/gst-plugins-bad-plugins.signals
index be79db7c..bb6b21e4 100644
--- a/docs/plugins/gst-plugins-bad-plugins.signals
+++ b/docs/plugins/gst-plugins-bad-plugins.signals
@@ -30,6 +30,54 @@ guint arg1
</SIGNAL>
<SIGNAL>
+<NAME>GstRTPSession::on-bye-ssrc</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPSession *gstrtpsession
+guint arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstRTPSession::on-bye-timeout</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPSession *gstrtpsession
+guint arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstRTPSession::on-new-ssrc</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPSession *gstrtpsession
+guint arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstRTPSession::on-ssrc-collision</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPSession *gstrtpsession
+guint arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstRTPSession::on-ssrc-validated</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPSession *gstrtpsession
+guint arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstRTPSession::on-timeout</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPSession *gstrtpsession
+guint arg1
+</SIGNAL>
+
+<SIGNAL>
<NAME>GstRTPPtDemux::clear-pt-map</NAME>
<RETURNS>void</RETURNS>
<FLAGS>la</FLAGS>
@@ -93,6 +141,60 @@ guint arg2
</SIGNAL>
<SIGNAL>
+<NAME>GstRTPBin::on-bye-ssrc</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPBin *gstrtpbin
+guint arg1
+guint arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstRTPBin::on-bye-timeout</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPBin *gstrtpbin
+guint arg1
+guint arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstRTPBin::on-new-ssrc</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPBin *gstrtpbin
+guint arg1
+guint arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstRTPBin::on-ssrc-collision</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPBin *gstrtpbin
+guint arg1
+guint arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstRTPBin::on-ssrc-validated</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPBin *gstrtpbin
+guint arg1
+guint arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstRTPBin::on-timeout</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTPBin *gstrtpbin
+guint arg1
+guint arg2
+</SIGNAL>
+
+<SIGNAL>
<NAME>GstCDAudio::track-change</NAME>
<RETURNS>void</RETURNS>
<FLAGS>l</FLAGS>
diff --git a/docs/plugins/inspect/plugin-gstrtpmanager.xml b/docs/plugins/inspect/plugin-gstrtpmanager.xml
index 301e0402..05c65f32 100644
--- a/docs/plugins/inspect/plugin-gstrtpmanager.xml
+++ b/docs/plugins/inspect/plugin-gstrtpmanager.xml
@@ -86,7 +86,7 @@
<longname>RTP packet jitter-buffer</longname>
<class>Filter/Network/RTP</class>
<description>A buffer that deals with network jitter and other transmission faults</description>
- <author>Philippe Kalaf &lt;philippe.kalaf@collabora.co.uk&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</author>
+ <author>Philippe Kalaf &lt;philippe.kalaf@collabora.co.uk&gt;, Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
<pads>
<caps>
<name>src</name>
diff --git a/gst/filter/gstbpwsinc.c b/gst/filter/gstbpwsinc.c
index 2304ac68..79fa39d9 100644
--- a/gst/filter/gstbpwsinc.c
+++ b/gst/filter/gstbpwsinc.c
@@ -230,18 +230,18 @@ gst_bpwsinc_class_init (GstBPWSincClass * klass)
gobject_class->get_property = bpwsinc_get_property;
gobject_class->dispose = gst_bpwsinc_dispose;
+ /* FIXME: Don't use the complete possible range but restrict the upper boundary
+ * so automatically generated UIs can use a slider */
g_object_class_install_property (gobject_class, PROP_LOWER_FREQUENCY,
- g_param_spec_double ("lower-frequency", "Lower Frequency",
- "Cut-off lower frequency (Hz)",
- 0.0, G_MAXDOUBLE, 0, G_PARAM_READWRITE));
+ g_param_spec_float ("lower-frequency", "Lower Frequency",
+ "Cut-off lower frequency (Hz)", 0.0, 100000.0, 0, G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_UPPER_FREQUENCY,
- g_param_spec_double ("upper-frequency", "Upper Frequency",
- "Cut-off upper frequency (Hz)",
- 0.0, G_MAXDOUBLE, 0, G_PARAM_READWRITE));
+ g_param_spec_float ("upper-frequency", "Upper Frequency",
+ "Cut-off upper frequency (Hz)", 0.0, 100000.0, 0, G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_LENGTH,
g_param_spec_int ("length", "Length",
"Filter kernel length, will be rounded to the next odd number",
- 3, G_MAXINT, 101, G_PARAM_READWRITE));
+ 3, 50000, 101, G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_MODE,
g_param_spec_enum ("mode", "Mode",
@@ -282,86 +282,51 @@ gst_bpwsinc_init (GstBPWSinc * self, GstBPWSincClass * g_class)
bpwsinc_query_type);
}
-static void
-process_32 (GstBPWSinc * self, gfloat * src, gfloat * dst, guint input_samples)
-{
- gint kernel_length = self->kernel_length;
- gint i, j, k, l;
- gint channels = GST_AUDIO_FILTER (self)->format.channels;
- gint res_start;
-
- /* convolution */
- for (i = 0; i < input_samples; i++) {
- dst[i] = 0.0;
- k = i % channels;
- l = i / channels;
- for (j = 0; j < kernel_length; j++)
- if (l < j)
- dst[i] +=
- self->residue[(kernel_length + l - j) * channels +
- k] * self->kernel[j];
- else
- dst[i] += src[(l - j) * channels + k] * self->kernel[j];
- }
-
- /* copy the tail of the current input buffer to the residue, while
- * keeping parts of the residue if the input buffer is smaller than
- * the kernel length */
- if (input_samples < kernel_length * channels)
- res_start = kernel_length * channels - input_samples;
- else
- res_start = 0;
-
- for (i = 0; i < res_start; i++)
- self->residue[i] = self->residue[i + input_samples];
- for (i = res_start; i < kernel_length * channels; i++)
- self->residue[i] = src[input_samples - kernel_length * channels + i];
-
- self->residue_length += kernel_length * channels - res_start;
- if (self->residue_length > kernel_length * channels)
- self->residue_length = kernel_length * channels;
+#define DEFINE_PROCESS_FUNC(width,ctype) \
+static void \
+process_##width (GstBPWSinc * self, g##ctype * src, g##ctype * dst, guint input_samples) \
+{ \
+ gint kernel_length = self->kernel_length; \
+ gint i, j, k, l; \
+ gint channels = GST_AUDIO_FILTER (self)->format.channels; \
+ gint res_start; \
+ \
+ /* convolution */ \
+ for (i = 0; i < input_samples; i++) { \
+ dst[i] = 0.0; \
+ k = i % channels; \
+ l = i / channels; \
+ for (j = 0; j < kernel_length; j++) \
+ if (l < j) \
+ dst[i] += \
+ self->residue[(kernel_length + l - j) * channels + \
+ k] * self->kernel[j]; \
+ else \
+ dst[i] += src[(l - j) * channels + k] * self->kernel[j]; \
+ } \
+ \
+ /* copy the tail of the current input buffer to the residue, while \
+ * keeping parts of the residue if the input buffer is smaller than \
+ * the kernel length */ \
+ if (input_samples < kernel_length * channels) \
+ res_start = kernel_length * channels - input_samples; \
+ else \
+ res_start = 0; \
+ \
+ for (i = 0; i < res_start; i++) \
+ self->residue[i] = self->residue[i + input_samples]; \
+ for (i = res_start; i < kernel_length * channels; i++) \
+ self->residue[i] = src[input_samples - kernel_length * channels + i]; \
+ \
+ self->residue_length += kernel_length * channels - res_start; \
+ if (self->residue_length > kernel_length * channels) \
+ self->residue_length = kernel_length * channels; \
}
-static void
-process_64 (GstBPWSinc * self, gdouble * src, gdouble * dst,
- guint input_samples)
-{
- gint kernel_length = self->kernel_length;
- gint i, j, k, l;
- gint channels = GST_AUDIO_FILTER (self)->format.channels;
- gint res_start;
-
- /* convolution */
- for (i = 0; i < input_samples; i++) {
- dst[i] = 0.0;
- k = i % channels;
- l = i / channels;
- for (j = 0; j < kernel_length; j++)
- if (l < j)
- dst[i] +=
- self->residue[(kernel_length + l - j) * channels +
- k] * self->kernel[j];
- else
- dst[i] += src[(l - j) * channels + k] * self->kernel[j];
- }
+DEFINE_PROCESS_FUNC (32, float);
+DEFINE_PROCESS_FUNC (64, double);
- /* copy the tail of the current input buffer to the residue, while
- * keeping parts of the residue if the input buffer is smaller than
- * the kernel length */
- if (input_samples < kernel_length * channels)
- res_start = kernel_length * channels - input_samples;
- else
- res_start = 0;
-
- for (i = 0; i < res_start; i++)
- self->residue[i] = self->residue[i + input_samples];
- for (i = res_start; i < kernel_length * channels; i++)
- self->residue[i] = src[input_samples - kernel_length * channels + i];
-
- self->residue_length += kernel_length * channels - res_start;
- if (self->residue_length > kernel_length * channels)
- self->residue_length = kernel_length * channels;
-}
+#undef DEFINE_PROCESS_FUNC
static void
bpwsinc_build_kernel (GstBPWSinc * self)
@@ -860,13 +825,13 @@ bpwsinc_set_property (GObject * object, guint prop_id, const GValue * value,
}
case PROP_LOWER_FREQUENCY:
GST_BASE_TRANSFORM_LOCK (self);
- self->lower_frequency = g_value_get_double (value);
+ self->lower_frequency = g_value_get_float (value);
bpwsinc_build_kernel (self);
GST_BASE_TRANSFORM_UNLOCK (self);
break;
case PROP_UPPER_FREQUENCY:
GST_BASE_TRANSFORM_LOCK (self);
- self->upper_frequency = g_value_get_double (value);
+ self->upper_frequency = g_value_get_float (value);
bpwsinc_build_kernel (self);
GST_BASE_TRANSFORM_UNLOCK (self);
break;
@@ -899,10 +864,10 @@ bpwsinc_get_property (GObject * object, guint prop_id, GValue * value,
g_value_set_int (value, self->kernel_length);
break;
case PROP_LOWER_FREQUENCY:
- g_value_set_double (value, self->lower_frequency);
+ g_value_set_float (value, self->lower_frequency);
break;
case PROP_UPPER_FREQUENCY:
- g_value_set_double (value, self->upper_frequency);
+ g_value_set_float (value, self->upper_frequency);
break;
case PROP_MODE:
g_value_set_enum (value, self->mode);
diff --git a/gst/filter/gstbpwsinc.h b/gst/filter/gstbpwsinc.h
index d790d040..24a4d2da 100644
--- a/gst/filter/gstbpwsinc.h
+++ b/gst/filter/gstbpwsinc.h
@@ -65,7 +65,7 @@ struct _GstBPWSinc {
gint mode;
gint window;
- gdouble lower_frequency, upper_frequency;
+ gfloat lower_frequency, upper_frequency;
gint kernel_length; /* length of the filter kernel */
gdouble *residue; /* buffer for left-over samples from previous buffer */
diff --git a/gst/filter/gstlpwsinc.c b/gst/filter/gstlpwsinc.c
index 3869553b..3cf14e5d 100644
--- a/gst/filter/gstlpwsinc.c
+++ b/gst/filter/gstlpwsinc.c
@@ -227,15 +227,17 @@ gst_lpwsinc_class_init (GstLPWSincClass * klass)
gobject_class->get_property = lpwsinc_get_property;
gobject_class->dispose = gst_lpwsinc_dispose;
+
+ /* FIXME: Don't use the complete possible range but restrict the upper boundary
+ * so automatically generated UIs can use a slider */
g_object_class_install_property (gobject_class, PROP_FREQUENCY,
- g_param_spec_double ("frequency", "Frequency",
- "Cut-off Frequency (Hz)", 0.0, G_MAXDOUBLE, 0.0,
+ g_param_spec_float ("cutoff", "Cutoff",
+ "Cut-off Frequency (Hz)", 0.0, 100000.0, 0.0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
-
g_object_class_install_property (gobject_class, PROP_LENGTH,
g_param_spec_int ("length", "Length",
"Filter kernel length, will be rounded to the next odd number",
- 3, G_MAXINT, 101, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
+ 3, 50000, 101, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
g_object_class_install_property (gobject_class, PROP_MODE,
g_param_spec_enum ("mode", "Mode",
@@ -261,7 +263,7 @@ gst_lpwsinc_init (GstLPWSinc * self, GstLPWSincClass * g_class)
self->window = WINDOW_HAMMING;
self->kernel_length = 101;
self->latency = 50;
- self->frequency = 0.0;
+ self->cutoff = 0.0;
self->kernel = NULL;
self->residue = NULL;
@@ -275,86 +277,51 @@ gst_lpwsinc_init (GstLPWSinc * self, GstLPWSincClass * g_class)
lpwsinc_query_type);
}
-static void
-process_32 (GstLPWSinc * self, gfloat * src, gfloat * dst, guint input_samples)
-{
- gint kernel_length = self->kernel_length;
- gint i, j, k, l;
- gint channels = GST_AUDIO_FILTER (self)->format.channels;
- gint res_start;
-
- /* convolution */
- for (i = 0; i < input_samples; i++) {
- dst[i] = 0.0;
- k = i % channels;
- l = i / channels;
- for (j = 0; j < kernel_length; j++)
- if (l < j)
- dst[i] +=
- self->residue[(kernel_length + l - j) * channels +
- k] * self->kernel[j];
- else
- dst[i] += src[(l - j) * channels + k] * self->kernel[j];
- }
-
- /* copy the tail of the current input buffer to the residue, while
- * keeping parts of the residue if the input buffer is smaller than
- * the kernel length */
- if (input_samples < kernel_length * channels)
- res_start = kernel_length * channels - input_samples;
- else
- res_start = 0;
-
- for (i = 0; i < res_start; i++)
- self->residue[i] = self->residue[i + input_samples];
- for (i = res_start; i < kernel_length * channels; i++)
- self->residue[i] = src[input_samples - kernel_length * channels + i];
-
- self->residue_length += kernel_length * channels - res_start;
- if (self->residue_length > kernel_length * channels)
- self->residue_length = kernel_length * channels;
+#define DEFINE_PROCESS_FUNC(width,ctype) \
+static void \
+process_##width (GstLPWSinc * self, g##ctype * src, g##ctype * dst, guint input_samples) \
+{ \
+ gint kernel_length = self->kernel_length; \
+ gint i, j, k, l; \
+ gint channels = GST_AUDIO_FILTER (self)->format.channels; \
+ gint res_start; \
+ \
+ /* convolution */ \
+ for (i = 0; i < input_samples; i++) { \
+ dst[i] = 0.0; \
+ k = i % channels; \
+ l = i / channels; \
+ for (j = 0; j < kernel_length; j++) \
+ if (l < j) \
+ dst[i] += \
+ self->residue[(kernel_length + l - j) * channels + \
+ k] * self->kernel[j]; \
+ else \
+ dst[i] += src[(l - j) * channels + k] * self->kernel[j]; \
+ } \
+ \
+ /* copy the tail of the current input buffer to the residue, while \
+ * keeping parts of the residue if the input buffer is smaller than \
+ * the kernel length */ \
+ if (input_samples < kernel_length * channels) \
+ res_start = kernel_length * channels - input_samples; \
+ else \
+ res_start = 0; \
+ \
+ for (i = 0; i < res_start; i++) \
+ self->residue[i] = self->residue[i + input_samples]; \
+ for (i = res_start; i < kernel_length * channels; i++) \
+ self->residue[i] = src[input_samples - kernel_length * channels + i]; \
+ \
+ self->residue_length += kernel_length * channels - res_start; \
+ if (self->residue_length > kernel_length * channels) \
+ self->residue_length = kernel_length * channels; \
}
-static void
-process_64 (GstLPWSinc * self, gdouble * src, gdouble * dst,
- guint input_samples)
-{
- gint kernel_length = self->kernel_length;
- gint i, j, k, l;
- gint channels = GST_AUDIO_FILTER (self)->format.channels;
- gint res_start;
-
- /* convolution */
- for (i = 0; i < input_samples; i++) {
- dst[i] = 0.0;
- k = i % channels;
- l = i / channels;
- for (j = 0; j < kernel_length; j++)
- if (l < j)
- dst[i] +=
- self->residue[(kernel_length + l - j) * channels +
- k] * self->kernel[j];
- else
- dst[i] += src[(l - j) * channels + k] * self->kernel[j];
- }
+DEFINE_PROCESS_FUNC (32, float);
+DEFINE_PROCESS_FUNC (64, double);
- /* copy the tail of the current input buffer to the residue, while
- * keeping parts of the residue if the input buffer is smaller than
- * the kernel length */
- if (input_samples < kernel_length * channels)
- res_start = kernel_length * channels - input_samples;
- else
- res_start = 0;
-
- for (i = 0; i < res_start; i++)
- self->residue[i] = self->residue[i + input_samples];
- for (i = res_start; i < kernel_length * channels; i++)
- self->residue[i] = src[input_samples - kernel_length * channels + i];
-
- self->residue_length += kernel_length * channels - res_start;
- if (self->residue_length > kernel_length * channels)
- self->residue_length = kernel_length * channels;
-}
+#undef DEFINE_PROCESS_FUNC
static void
lpwsinc_build_kernel (GstLPWSinc * self)
@@ -377,17 +344,17 @@ lpwsinc_build_kernel (GstLPWSinc * self)
}
/* Clamp cutoff frequency between 0 and the nyquist frequency */
- self->frequency =
- CLAMP (self->frequency, 0.0, GST_AUDIO_FILTER (self)->format.rate / 2);
+ self->cutoff =
+ CLAMP (self->cutoff, 0.0, GST_AUDIO_FILTER (self)->format.rate / 2);
GST_DEBUG ("lpwsinc: initializing filter kernel of length %d "
"with cutoff %.2lf Hz "
"for mode %s",
- len, self->frequency,
+ len, self->cutoff,
(self->mode == MODE_LOW_PASS) ? "low-pass" : "high-pass");
/* fill the kernel */
- w = 2 * M_PI * (self->frequency / GST_AUDIO_FILTER (self)->format.rate);
+ w = 2 * M_PI * (self->cutoff / GST_AUDIO_FILTER (self)->format.rate);
if (self->kernel)
g_free (self->kernel);
@@ -800,7 +767,7 @@ lpwsinc_set_property (GObject * object, guint prop_id, const GValue * value,
}
case PROP_FREQUENCY:
GST_BASE_TRANSFORM_LOCK (self);
- self->frequency = g_value_get_double (value);
+ self->cutoff = g_value_get_float (value);
lpwsinc_build_kernel (self);
GST_BASE_TRANSFORM_UNLOCK (self);
break;
@@ -833,7 +800,7 @@ lpwsinc_get_property (GObject * object, guint prop_id, GValue * value,
g_value_set_int (value, self->kernel_length);
break;
case PROP_FREQUENCY:
- g_value_set_double (value, self->frequency);
+ g_value_set_float (value, self->cutoff);
break;
case PROP_MODE:
g_value_set_enum (value, self->mode);
diff --git a/gst/filter/gstlpwsinc.h b/gst/filter/gstlpwsinc.h
index 3e09bd52..f56f5a4d 100644
--- a/gst/filter/gstlpwsinc.h
+++ b/gst/filter/gstlpwsinc.h
@@ -65,7 +65,7 @@ struct _GstLPWSinc {
gint mode;
gint window;
- gdouble frequency;
+ gfloat cutoff;
gint kernel_length; /* length of the filter kernel */
gdouble *residue; /* buffer for left-over samples from previous buffer */
diff --git a/tests/check/elements/lpwsinc.c b/tests/check/elements/lpwsinc.c
index 3d69bc95..d2aeda47 100644
--- a/tests/check/elements/lpwsinc.c
+++ b/tests/check/elements/lpwsinc.c
@@ -108,7 +108,7 @@ GST_START_TEST (test_lp_0hz)
"could not set to playing");
/* cutoff = sampling rate / 4, data = 0 */
- g_object_set (G_OBJECT (lpwsinc), "frequency", 44100 / 4.0, NULL);
+ g_object_set (G_OBJECT (lpwsinc), "cutoff", 44100 / 4.0, NULL);
inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
in = (gdouble *) GST_BUFFER_DATA (inbuffer);
for (i = 0; i < 128; i++)
@@ -166,7 +166,7 @@ GST_START_TEST (test_lp_22050hz)
GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
"could not set to playing");
- g_object_set (G_OBJECT (lpwsinc), "frequency", 44100 / 4.0, NULL);
+ g_object_set (G_OBJECT (lpwsinc), "cutoff", 44100 / 4.0, NULL);
inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
in = (gdouble *) GST_BUFFER_DATA (inbuffer);
for (i = 0; i < 128; i += 2) {
@@ -226,7 +226,7 @@ GST_START_TEST (test_hp_0hz)
GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
"could not set to playing");
- g_object_set (G_OBJECT (lpwsinc), "frequency", 44100 / 4.0, NULL);
+ g_object_set (G_OBJECT (lpwsinc), "cutoff", 44100 / 4.0, NULL);
inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
in = (gdouble *) GST_BUFFER_DATA (inbuffer);
for (i = 0; i < 128; i++)
@@ -284,7 +284,7 @@ GST_START_TEST (test_hp_22050hz)
GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
"could not set to playing");
- g_object_set (G_OBJECT (lpwsinc), "frequency", 44100 / 4.0, NULL);
+ g_object_set (G_OBJECT (lpwsinc), "cutoff", 44100 / 4.0, NULL);
inbuffer = gst_buffer_new_and_alloc (128 * sizeof (gdouble));
in = (gdouble *) GST_BUFFER_DATA (inbuffer);
for (i = 0; i < 128; i += 2) {
@@ -344,7 +344,7 @@ GST_START_TEST (test_small_buffer)
GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
"could not set to playing");
- g_object_set (G_OBJECT (lpwsinc), "frequency", 44100 / 4.0, NULL);
+ g_object_set (G_OBJECT (lpwsinc), "cutoff", 44100 / 4.0, NULL);
inbuffer = gst_buffer_new_and_alloc (20 * sizeof (gdouble));
in = (gdouble *) GST_BUFFER_DATA (inbuffer);
for (i = 0; i < 20; i++)