1 /* -*- c-basic-offset: 2 -*-
4 * Copyright (C) 1999-2001 Erik Walthinsen <omega@cse.ogi.edu>
5 * 2006 Dreamlab Technologies Ltd. <mathis.hofer@dreamlab.net>
6 * 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
25 #ifndef __GST_AUDIO_FX_BASE_FIR_FILTER_H__
26 #define __GST_AUDIO_FX_BASE_FIR_FILTER_H__
29 #include <gst/audio/gstaudiofilter.h>
30 #include <gst/fft/gstfftf64.h>
34 #define GST_TYPE_AUDIO_FX_BASE_FIR_FILTER \
35 (gst_audio_fx_base_fir_filter_get_type())
36 #define GST_AUDIO_FX_BASE_FIR_FILTER(obj) \
37 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_FX_BASE_FIR_FILTER,GstAudioFXBaseFIRFilter))
38 #define GST_AUDIO_FX_BASE_FIR_FILTER_CLASS(klass) \
39 (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_FX_BASE_FIR_FILTER,GstAudioFXBaseFIRFilterClass))
40 #define GST_IS_AUDIO_FX_BASE_FIR_FILTER(obj) \
41 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_FX_BASE_FIR_FILTER))
42 #define GST_IS_AUDIO_FX_BASE_FIR_FILTER_CLASS(klass) \
43 (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_FX_BASE_FIR_FILTER))
45 typedef struct _GstAudioFXBaseFIRFilter GstAudioFXBaseFIRFilter;
46 typedef struct _GstAudioFXBaseFIRFilterClass GstAudioFXBaseFIRFilterClass;
48 typedef guint (*GstAudioFXBaseFIRFilterProcessFunc) (GstAudioFXBaseFIRFilter *, const guint8 *, guint8 *, guint);
51 * GstAudioFXBaseFIRFilter:
53 * Opaque data structure.
55 struct _GstAudioFXBaseFIRFilter {
56 GstAudioFilter element;
59 gdouble *kernel; /* filter kernel -- time domain */
60 guint kernel_length; /* length of the filter kernel -- time domain */
62 guint64 latency; /* pre-latency of the filter kernel */
63 gboolean low_latency; /* work in slower low latency mode */
65 gboolean drain_on_changes; /* If the filter should be drained when
66 * coeficients change */
69 GstAudioFXBaseFIRFilterProcessFunc process;
71 gdouble *buffer; /* buffer for storing samples of previous buffers */
72 guint buffer_fill; /* fill level of buffer */
73 guint buffer_length; /* length of the buffer -- meaning depends on processing mode */
75 /* FFT convolution specific data */
78 GstFFTF64Complex *frequency_response; /* filter kernel -- frequency domain */
79 guint frequency_response_length; /* length of filter kernel -- frequency domain */
80 GstFFTF64Complex *fft_buffer; /* FFT buffer, has the length of the frequency response */
81 guint block_length; /* Length of the processing blocks -- time domain */
83 GstClockTime start_ts; /* start timestamp after a discont */
84 guint64 start_off; /* start offset after a discont */
85 guint64 nsamples_out; /* number of output samples since last discont */
86 guint64 nsamples_in; /* number of input samples since last discont */
91 struct _GstAudioFXBaseFIRFilterClass {
92 GstAudioFilterClass parent_class;
95 GType gst_audio_fx_base_fir_filter_get_type (void);
96 void gst_audio_fx_base_fir_filter_set_kernel (GstAudioFXBaseFIRFilter *filter, gdouble *kernel,
97 guint kernel_length, guint64 latency, const GstAudioInfo * info);
98 void gst_audio_fx_base_fir_filter_push_residue (GstAudioFXBaseFIRFilter *filter);
102 #endif /* __GST_AUDIO_FX_BASE_FIR_FILTER_H__ */