source: roaraudio/include/libroardsp/filter.h @ 3517:1a3218a3fc5b

Last change on this file since 3517:1a3218a3fc5b was 3517:1a3218a3fc5b, checked in by phi, 14 years ago

updated license headers, FSF moved office

File size: 9.8 KB
Line 
1//filter.h:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008-2010
5 *
6 *  This file is part of libroar a part of RoarAudio,
7 *  a cross-platform sound system for both, home and professional use.
8 *  See README for details.
9 *
10 *  This file is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License version 3
12 *  as published by the Free Software Foundation.
13 *
14 *  libroar is distributed in the hope that it will be useful,
15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *  GNU General Public License for more details.
18 *
19 *  You should have received a copy of the GNU General Public License
20 *  along with this software; see the file COPYING.  If not, write to
21 *  the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 *  Boston, MA 02110-1301, USA.
23 *
24 *  NOTE for everyone want's to change something and send patches:
25 *  read README and HACKING! There a addition information on
26 *  the license of this document you need to read before you send
27 *  any patches.
28 *
29 *  NOTE for uses of non-GPL (LGPL,...) software using libesd, libartsc
30 *  or libpulse*:
31 *  The libs libroaresd, libroararts and libroarpulse link this lib
32 *  and are therefore GPL. Because of this it may be illigal to use
33 *  them with any software that uses libesd, libartsc or libpulse*.
34 */
35
36#ifndef _LIBROARDSP_FILTER_H_
37#define _LIBROARDSP_FILTER_H_
38
39#include "libroardsp.h"
40
41#define ROARDSP_FILTER_NONE           0
42#define ROARDSP_FILTER_AMP            1
43#define ROARDSP_FILTER_LOWP           2
44#define ROARDSP_FILTER_HIGHP          3
45#define ROARDSP_FILTER_MODULATE       4
46#define ROARDSP_FILTER_QUANTIFY       5
47#define ROARDSP_FILTER_CLIP           6
48#define ROARDSP_FILTER_ADD            7
49#define ROARDSP_FILTER_DOWNMIX        8
50#define ROARDSP_FILTER_DCBLOCK        9
51#define ROARDSP_FILTER_SWAP          10
52#define ROARDSP_FILTER_SPEEX_PREP    11
53#define ROARDSP_FILTER_AGC           12
54
55// filter CTLs:
56
57#define ROARDSP_FCTL_FREQ             1 /* float   */
58#define ROARDSP_FCTL_TIME             2
59#define ROARDSP_FCTL_MUL              3 /* int32_t */
60#define ROARDSP_FCTL_DIV              4 /* int32_t */
61#define ROARDSP_FCTL_N                5 /* int32_t */
62#define ROARDSP_FCTL_LIMIT            6 /* int32_t */
63#define ROARDSP_FCTL_PHASE            7
64#define ROARDSP_FCTL_Q                8 /* int32_t */
65#define ROARDSP_FCTL_MODE             9 /* int32_t */
66#define ROARDSP_FCTL_PACKET_SIZE     10 /* size_t  */
67
68// consts for filter flags:
69#define ROARDSP_FFLAG_NONE            0x0000
70#define ROARDSP_FFLAG_FREE            0x0001
71
72// consts for filter(chain) reset:
73#define ROARDSP_RESET_NONE            0
74#define ROARDSP_RESET_FULL            1
75#define ROARDSP_RESET_STATE           2
76
77// filter specific constants:
78#define ROARDSP_DOWNMIX_LEFT          1
79#define ROARDSP_DOWNMIX_RIGHT         2
80#define ROARDSP_DOWNMIX_ARITHMETIC    3
81#define ROARDSP_DOWNMIX_RMS           4
82
83#define ROARDSP_DCBLOCK_NUMBLOCKS     100
84
85
86#define ROARDSP_SPEEX_PREP_ON          0x0001
87#define ROARDSP_SPEEX_PREP_OFF         0x0002
88#define ROARDSP_SPEEX_PREP_MASK        (ROARDSP_SPEEX_PREP_ON|ROARDSP_SPEEX_PREP_OFF)
89
90// Config Bit Vector
91#define ROARDSP_SPEEX_PREP_CBV(opt,sw) ((sw)<<((opt)*2))
92#define ROARDSP_SPEEX_PREP_CTB(opt,val) (((val) & ROARDSP_SPEEX_PREP_CBV((opt),ROARDSP_SPEEX_PREP_MASK)) >> ((opt)*2))
93
94#define ROARDSP_SPEEX_PREP_DENOISE     0
95#define ROARDSP_SPEEX_PREP_AGC         1
96#define ROARDSP_SPEEX_PREP_VAD         2
97
98#define ROARDSP_SPEEX_PREP_DENOISE_ON  ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_DENOISE, ROARDSP_SPEEX_PREP_ON)
99#define ROARDSP_SPEEX_PREP_DENOISE_OFF ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_DENOISE, ROARDSP_SPEEX_PREP_OFF)
100#define ROARDSP_SPEEX_PREP_AGC_ON      ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_AGC, ROARDSP_SPEEX_PREP_ON)
101#define ROARDSP_SPEEX_PREP_AGC_OFF     ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_AGC, ROARDSP_SPEEX_PREP_OFF)
102#define ROARDSP_SPEEX_PREP_VAD_ON      ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_VAD, ROARDSP_SPEEX_PREP_ON)
103#define ROARDSP_SPEEX_PREP_VAD_OFF     ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_VAD, ROARDSP_SPEEX_PREP_OFF)
104
105
106// types:
107
108struct roardsp_filter {
109 int    channels;
110 int    bits;
111 int    rate;
112 void * inst;
113 uint_least16_t flags;
114 int (*calc  )(struct roardsp_filter * filter, void * data, size_t samples);
115 int (*uninit)(struct roardsp_filter * filter);
116 int (*ctl   )(struct roardsp_filter * filter, int cmd, void * data);
117 int (*reset )(struct roardsp_filter * filter, int what);
118};
119
120#ifdef ROAR_HAVE_LIBM
121struct roardsp_lowp {
122 uint32_t freq; // in mHz (0Hz..4MHz)
123 uint16_t a, b;
124 int32_t  old[ROAR_MAX_CHANNELS];
125};
126
127struct roardsp_highp {
128 uint32_t freq; // in mHz (0Hz..4MHz)
129 int32_t  a, b, c;
130 int32_t  oldout[ROAR_MAX_CHANNELS];
131 int32_t  oldin[ROAR_MAX_CHANNELS];
132};
133#endif
134
135struct roardsp_amp {
136 int32_t  mul;
137 int32_t  div;
138};
139
140struct roardsp_dcblock {
141 int cur;
142 int32_t dc[ROARDSP_DCBLOCK_NUMBLOCKS];
143};
144
145struct roardsp_swap {
146 int map[ROAR_MAX_CHANNELS];
147};
148
149struct roardsp_agc {
150 struct roardsp_filter * amp;
151 uint32_t target_amp;
152};
153
154struct roardsp_speex_prep {
155#ifdef _SPEEX_TYPES_H
156 SpeexPreprocessState *preprocess;
157 int frame_size;
158#else
159 char dummy[8];
160#endif
161};
162
163
164// funcs:
165int    roardsp_filter_str2id(char * str);
166char * roardsp_filter_id2str(int id);
167int    roardsp_filter_new   (struct roardsp_filter ** filter, struct roar_stream * stream, int id);
168#define roardsp_filter_free(x) roardsp_filter_uninit((x))
169int    roardsp_filter_init  (struct roardsp_filter *  filter, struct roar_stream * stream, int id);
170int    roardsp_filter_uninit(struct roardsp_filter *  filter);
171int    roardsp_filter_calc  (struct roardsp_filter *  filter, void * data, size_t len);
172int    roardsp_filter_ctl   (struct roardsp_filter *  filter, int cmd, void * data);
173int    roardsp_filter_reset (struct roardsp_filter *  filter, int what);
174
175
176// filter:
177
178#ifdef ROAR_HAVE_LIBM
179int roardsp_lowp_init  (struct roardsp_filter * filter, struct roar_stream * stream, int id);
180int roardsp_lowp_uninit(struct roardsp_filter * filter);
181int roardsp_lowp_calc16(struct roardsp_filter * filter, void * data, size_t samples);
182int roardsp_lowp_ctl   (struct roardsp_filter * filter, int cmd, void * data);
183int roardsp_lowp_reset (struct roardsp_filter * filter, int what);
184
185int roardsp_highp_init  (struct roardsp_filter * filter, struct roar_stream * stream, int id);
186int roardsp_highp_uninit(struct roardsp_filter * filter);
187int roardsp_highp_calc16(struct roardsp_filter * filter, void * data, size_t samples);
188int roardsp_highp_ctl   (struct roardsp_filter * filter, int cmd, void * data);
189int roardsp_highp_reset (struct roardsp_filter * filter, int what);
190#endif
191
192int roardsp_amp_init  (struct roardsp_filter * filter, struct roar_stream * stream, int id);
193int roardsp_amp_uninit(struct roardsp_filter * filter);
194int roardsp_amp_calc16(struct roardsp_filter * filter, void * data, size_t samples);
195int roardsp_amp_calc8 (struct roardsp_filter * filter, void * data, size_t samples);
196int roardsp_amp_ctl   (struct roardsp_filter * filter, int cmd, void * data);
197int roardsp_amp_reset (struct roardsp_filter * filter, int what);
198
199int roardsp_add_init  (struct roardsp_filter * filter, struct roar_stream * stream, int id);
200int roardsp_add_calc16(struct roardsp_filter * filter, void * data, size_t samples);
201int roardsp_add_reset (struct roardsp_filter * filter, int what);
202
203int roardsp_quantify_init  (struct roardsp_filter * filter, struct roar_stream * stream, int id);
204int roardsp_quantify_uninit(struct roardsp_filter * filter);
205int roardsp_quantify_calc16(struct roardsp_filter * filter, void * data, size_t samples);
206int roardsp_quantify_ctl   (struct roardsp_filter * filter, int cmd, void * data);
207int roardsp_quantify_reset (struct roardsp_filter * filter, int what);
208
209int roardsp_clip_calc16(struct roardsp_filter * filter, void * data, size_t samples);
210int roardsp_clip_ctl   (struct roardsp_filter * filter, int cmd, void * data);
211int roardsp_clip_reset (struct roardsp_filter * filter, int what);
212
213int roardsp_downmix_init   (struct roardsp_filter * filter, struct roar_stream * stream, int id);
214int roardsp_downmix_calc162(struct roardsp_filter * filter, void * data, size_t samples);
215int roardsp_downmix_ctl    (struct roardsp_filter * filter, int cmd, void * data);
216int roardsp_downmix_reset  (struct roardsp_filter * filter, int what);
217
218int roardsp_dcblock_init   (struct roardsp_filter * filter, struct roar_stream * stream, int id);
219int roardsp_dcblock_uninit (struct roardsp_filter * filter);
220int roardsp_dcblock_calc16 (struct roardsp_filter * filter, void * data, size_t samples);
221int roardsp_dcblock_reset  (struct roardsp_filter * filter, int what);
222
223int roardsp_swap_init   (struct roardsp_filter * filter, struct roar_stream * stream, int id);
224int roardsp_swap_uninit (struct roardsp_filter * filter);
225int roardsp_swap_calc162(struct roardsp_filter * filter, void * data, size_t samples);
226int roardsp_swap_ctl    (struct roardsp_filter * filter, int cmd, void * data);
227int roardsp_swap_reset  (struct roardsp_filter * filter, int what);
228
229int roardsp_agc_init   (struct roardsp_filter * filter, struct roar_stream * stream, int id);
230int roardsp_agc_uninit (struct roardsp_filter * filter);
231int roardsp_agc_ctl    (struct roardsp_filter * filter, int cmd, void * data);
232int roardsp_agc_reset  (struct roardsp_filter * filter, int what);
233
234#ifdef _SPEEX_TYPES_H
235#define ROAR_HAVE_SPEEX_FILTER
236int roardsp_speex_prep_init   (struct roardsp_filter * filter, struct roar_stream * stream, int id);
237int roardsp_speex_prep_uninit (struct roardsp_filter * filter);
238int roardsp_speex_prep_calc161(struct roardsp_filter * filter, void * data, size_t samples);
239int roardsp_speex_prep_ctl    (struct roardsp_filter * filter, int cmd, void * data);
240int roardsp_speex_prep_reset  (struct roardsp_filter * filter, int what);
241#endif
242
243#endif
244
245//ll
Note: See TracBrowser for help on using the repository browser.