From 76a3fd7100246d47d3dcf08cd1e3370adca244af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 6 Sep 2007 07:21:22 +0000 Subject: Port GstSpectrum to GstAudioFilter and libgstfft, add support for int32, float and double, use floats for the message... Original commit message from CVS: * configure.ac: * gst/spectrum/Makefile.am: * gst/spectrum/demo-audiotest.c: (draw_spectrum), (message_handler), (main): * gst/spectrum/demo-osssrc.c: (draw_spectrum), (message_handler): * gst/spectrum/gstspectrum.c: (gst_spectrum_base_init), (gst_spectrum_class_init), (gst_spectrum_init), (gst_spectrum_dispose), (gst_spectrum_set_property), (gst_spectrum_get_property), (gst_spectrum_start), (gst_spectrum_setup), (gst_spectrum_message_new), (gst_spectrum_transform_ip): * gst/spectrum/gstspectrum.h: Port GstSpectrum to GstAudioFilter and libgstfft, add support for int32, float and double, use floats for the message contents, average all FFTs done in one interval for better results, use a better windowing function, allow posting the phase in the message and actually do an FFT with the requested number of bands instead of interpolating. * tests/check/elements/spectrum.c: (GST_START_TEST), (spectrum_suite): Improve the units tests by checking for a 11025Hz sine wave and add unit tests for all 4 supported sample types. --- gst/spectrum/gstspectrum.h | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'gst/spectrum/gstspectrum.h') diff --git a/gst/spectrum/gstspectrum.h b/gst/spectrum/gstspectrum.h index 70ab25c9..a32d4ccf 100644 --- a/gst/spectrum/gstspectrum.h +++ b/gst/spectrum/gstspectrum.h @@ -25,6 +25,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -39,9 +40,11 @@ extern "C" { typedef struct _GstSpectrum GstSpectrum; typedef struct _GstSpectrumClass GstSpectrumClass; +typedef void (*GstSpectrumProcessFunc) (GstSpectrum *, const guint8 *); +typedef void (*GstSpectrumFFTFreeFunc) (void *); struct _GstSpectrum { - GstBaseTransform element; + GstAudioFilter element; GstPad *sinkpad,*srcpad; GstAdapter *adapter; @@ -49,24 +52,28 @@ struct _GstSpectrum { /* properties */ gboolean message; /* whether or not to post messages */ + gboolean message_magnitude; + gboolean message_phase; guint64 interval; /* how many seconds between emits */ guint bands; /* number of spectrum bands */ gint threshold; /* energy level treshold */ gint num_frames; /* frame count (1 sample per channel) * since last emit */ + gint num_fft; /* number of FFTs since last emit */ - gint rate; /* caps variables */ - gint channels; - /* */ - gint base, len; - gint16 *re, *im, *loud; - guchar *spect; + gfloat *spect_magnitude; + gfloat *spect_phase; + GstSpectrumProcessFunc process; + void *fft_ctx; + GstSpectrumFFTFreeFunc fft_free_func; + void *in; + void *freqdata; }; struct _GstSpectrumClass { - GstBaseTransformClass parent_class; + GstAudioFilterClass parent_class; }; GType gst_spectrum_get_type (void); -- cgit v1.2.1