summaryrefslogtreecommitdiffstats
path: root/gst/spectrum/gstspectrum.h
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2007-09-06 07:21:22 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2007-09-06 07:21:22 +0000
commitf5a3e61e69af1c030aec87b6e23660a526640f2d (patch)
treecca56fea39cdb3fbfc9a721607883a85edc54172 /gst/spectrum/gstspectrum.h
parentc8af2199d324ee9b055777fda0800b9438ab7262 (diff)
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.
Diffstat (limited to 'gst/spectrum/gstspectrum.h')
-rw-r--r--gst/spectrum/gstspectrum.h23
1 files changed, 15 insertions, 8 deletions
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 <gst/gst.h>
#include <gst/base/gstadapter.h>
#include <gst/base/gstbasetransform.h>
+#include <gst/audio/gstaudiofilter.h>
#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;
-
/* <private> */
- 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);