source: roaraudio/include/libroardsp/libroardsp.h @ 3318:b0dcc3d8edd3

Last change on this file since 3318:b0dcc3d8edd3 was 3318:b0dcc3d8edd3, checked in by phi, 14 years ago

added still empty files filter.h and filterchain.h

File size: 10.8 KB
Line 
1//libroardsp.h:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008-2010
5 *
6 *  This file is part of libroardsp 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 *  libroardsp 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, 675 Mass Ave, Cambridge, MA 02139, USA.
22 *
23 */
24
25#ifndef _LIBROARDSP_H_
26#define _LIBROARDSP_H_
27
28#include <roaraudio.h>
29
30__BEGIN_DECLS
31
32// enable Speex preprocessing and better type handling if speex > 1.1.8
33#ifdef ROAR_HAVE_LIBSPEEX
34#include <speex/speex.h>
35#ifdef _SPEEX_TYPES_H
36#include <speex/speex_preprocess.h>
37#endif
38#endif
39
40#include "interleave.h"
41#include "midi.h"
42#include "synth.h"
43#include "poly.h"
44#include "fader.h"
45#include "mixer.h"
46#include "amp.h"
47#include "convert.h"
48#include "midside.h"
49#include "point.h"
50#include "remove.h"
51#include "rms.h"
52#include "filter.h"
53#include "filterchain.h"
54#include "transcode.h"
55#include "vio_transcode.h"
56
57#ifdef ROAR_HAVE_LIBCELT
58#include "transcode_celt.h"
59#endif
60#ifdef ROAR_HAVE_LIBSPEEX
61#include "transcode_speex.h"
62#endif
63
64#ifdef ROAR_HAVE_LIBSAMPLERATE
65#include <samplerate.h>
66#endif
67
68// defines
69#define ROARDSP_MAX_FILTERS_PER_CHAIN 8
70
71#define ROARDSP_FILTER_NONE           0
72#define ROARDSP_FILTER_AMP            1
73#define ROARDSP_FILTER_LOWP           2
74#define ROARDSP_FILTER_HIGHP          3
75#define ROARDSP_FILTER_MODULATE       4
76#define ROARDSP_FILTER_QUANTIFY       5
77#define ROARDSP_FILTER_CLIP           6
78#define ROARDSP_FILTER_ADD            7
79#define ROARDSP_FILTER_DOWNMIX        8
80#define ROARDSP_FILTER_DCBLOCK        9
81#define ROARDSP_FILTER_SWAP          10
82#define ROARDSP_FILTER_SPEEX_PREP    11
83#define ROARDSP_FILTER_AGC           12
84
85// filter CTLs:
86
87#define ROARDSP_FCTL_FREQ             1 /* float */
88#define ROARDSP_FCTL_TIME             2
89#define ROARDSP_FCTL_MUL              3 /* int32_t */
90#define ROARDSP_FCTL_DIV              4 /* int32_t */
91#define ROARDSP_FCTL_N                5 /* int32_t */
92#define ROARDSP_FCTL_LIMIT            6 /* int32_t */
93#define ROARDSP_FCTL_PHASE            7
94#define ROARDSP_FCTL_Q                8 /* int32_t */
95#define ROARDSP_FCTL_MODE             9 /* int32_t */
96#define ROARDSP_FCTL_PACKET_SIZE     10 /* size_t */
97
98// consts for filter flags:
99#define ROARDSP_FFLAG_NONE            0x0000
100#define ROARDSP_FFLAG_FREE            0x0001
101
102// consts for filter(chain) reset:
103#define ROARDSP_RESET_NONE            0
104#define ROARDSP_RESET_FULL            1
105#define ROARDSP_RESET_STATE           2
106
107// filter specific constants:
108#define ROARDSP_DOWNMIX_LEFT          1
109#define ROARDSP_DOWNMIX_RIGHT         2
110#define ROARDSP_DOWNMIX_ARITHMETIC    3
111#define ROARDSP_DOWNMIX_RMS           4
112
113#define ROARDSP_DCBLOCK_NUMBLOCKS     100
114
115
116#define ROARDSP_SPEEX_PREP_ON          0x0001
117#define ROARDSP_SPEEX_PREP_OFF         0x0002
118#define ROARDSP_SPEEX_PREP_MASK        (ROARDSP_SPEEX_PREP_ON|ROARDSP_SPEEX_PREP_OFF)
119
120// Config Bit Vector
121#define ROARDSP_SPEEX_PREP_CBV(opt,sw) ((sw)<<((opt)*2))
122#define ROARDSP_SPEEX_PREP_CTB(opt,val) (((val) & ROARDSP_SPEEX_PREP_CBV((opt),ROARDSP_SPEEX_PREP_MASK)) >> ((opt)*2))
123
124#define ROARDSP_SPEEX_PREP_DENOISE     0
125#define ROARDSP_SPEEX_PREP_AGC         1
126#define ROARDSP_SPEEX_PREP_VAD         2
127
128#define ROARDSP_SPEEX_PREP_DENOISE_ON  ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_DENOISE, ROARDSP_SPEEX_PREP_ON)
129#define ROARDSP_SPEEX_PREP_DENOISE_OFF ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_DENOISE, ROARDSP_SPEEX_PREP_OFF)
130#define ROARDSP_SPEEX_PREP_AGC_ON      ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_AGC, ROARDSP_SPEEX_PREP_ON)
131#define ROARDSP_SPEEX_PREP_AGC_OFF     ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_AGC, ROARDSP_SPEEX_PREP_OFF)
132#define ROARDSP_SPEEX_PREP_VAD_ON      ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_VAD, ROARDSP_SPEEX_PREP_ON)
133#define ROARDSP_SPEEX_PREP_VAD_OFF     ROARDSP_SPEEX_PREP_CBV(ROARDSP_SPEEX_PREP_VAD, ROARDSP_SPEEX_PREP_OFF)
134
135
136// types:
137
138struct roardsp_filter {
139 int    channels;
140 int    bits;
141 int    rate;
142 void * inst;
143 uint_least16_t flags;
144 int (*calc  )(struct roardsp_filter * filter, void * data, size_t samples);
145 int (*uninit)(struct roardsp_filter * filter);
146 int (*ctl   )(struct roardsp_filter * filter, int cmd, void * data);
147 int (*reset )(struct roardsp_filter * filter, int what);
148};
149
150struct roardsp_filterchain {
151 int filters;
152 struct roardsp_filter * filter[ROARDSP_MAX_FILTERS_PER_CHAIN];
153};
154
155#ifdef ROAR_HAVE_LIBM
156struct roardsp_lowp {
157 uint32_t freq; // in mHz (0Hz..4MHz)
158 uint16_t a, b;
159 int32_t  old[ROAR_MAX_CHANNELS];
160};
161
162struct roardsp_highp {
163 uint32_t freq; // in mHz (0Hz..4MHz)
164 int32_t  a, b, c;
165 int32_t  oldout[ROAR_MAX_CHANNELS];
166 int32_t  oldin[ROAR_MAX_CHANNELS];
167};
168#endif
169
170struct roardsp_amp {
171 int32_t  mul;
172 int32_t  div;
173};
174
175struct roardsp_dcblock {
176 int cur;
177 int32_t dc[ROARDSP_DCBLOCK_NUMBLOCKS];
178};
179
180struct roardsp_swap {
181 int map[ROAR_MAX_CHANNELS];
182};
183
184struct roardsp_agc {
185 struct roardsp_filter * amp;
186 uint32_t target_amp;
187};
188
189struct roardsp_speex_prep {
190#ifdef _SPEEX_TYPES_H
191 SpeexPreprocessState *preprocess;
192 int frame_size;
193#else
194 char dummy[8];
195#endif
196};
197
198// funcs:
199int    roardsp_filter_str2id(char * str);
200char * roardsp_filter_id2str(int id);
201int    roardsp_filter_new   (struct roardsp_filter ** filter, struct roar_stream * stream, int id);
202#define roardsp_filter_free(x) roardsp_filter_uninit((x))
203int    roardsp_filter_init  (struct roardsp_filter *  filter, struct roar_stream * stream, int id);
204int    roardsp_filter_uninit(struct roardsp_filter *  filter);
205int    roardsp_filter_calc  (struct roardsp_filter *  filter, void * data, size_t len);
206int    roardsp_filter_ctl   (struct roardsp_filter *  filter, int cmd, void * data);
207int    roardsp_filter_reset (struct roardsp_filter *  filter, int what);
208
209int roardsp_fchain_init  (struct roardsp_filterchain * chain);
210int roardsp_fchain_uninit(struct roardsp_filterchain * chain);
211int roardsp_fchain_add   (struct roardsp_filterchain * chain, struct roardsp_filter * filter);
212int roardsp_fchain_calc  (struct roardsp_filterchain * chain, void * data, size_t len);
213int roardsp_fchain_reset (struct roardsp_filterchain * chain, int what);
214int roardsp_fchain_num   (struct roardsp_filterchain * chain);
215
216// filter:
217
218#ifdef ROAR_HAVE_LIBM
219int roardsp_lowp_init  (struct roardsp_filter * filter, struct roar_stream * stream, int id);
220int roardsp_lowp_uninit(struct roardsp_filter * filter);
221int roardsp_lowp_calc16(struct roardsp_filter * filter, void * data, size_t samples);
222int roardsp_lowp_ctl   (struct roardsp_filter * filter, int cmd, void * data);
223int roardsp_lowp_reset (struct roardsp_filter * filter, int what);
224
225int roardsp_highp_init  (struct roardsp_filter * filter, struct roar_stream * stream, int id);
226int roardsp_highp_uninit(struct roardsp_filter * filter);
227int roardsp_highp_calc16(struct roardsp_filter * filter, void * data, size_t samples);
228int roardsp_highp_ctl   (struct roardsp_filter * filter, int cmd, void * data);
229int roardsp_highp_reset (struct roardsp_filter * filter, int what);
230#endif
231
232int roardsp_amp_init  (struct roardsp_filter * filter, struct roar_stream * stream, int id);
233int roardsp_amp_uninit(struct roardsp_filter * filter);
234int roardsp_amp_calc16(struct roardsp_filter * filter, void * data, size_t samples);
235int roardsp_amp_calc8 (struct roardsp_filter * filter, void * data, size_t samples);
236int roardsp_amp_ctl   (struct roardsp_filter * filter, int cmd, void * data);
237int roardsp_amp_reset (struct roardsp_filter * filter, int what);
238
239int roardsp_add_init  (struct roardsp_filter * filter, struct roar_stream * stream, int id);
240int roardsp_add_calc16(struct roardsp_filter * filter, void * data, size_t samples);
241int roardsp_add_reset (struct roardsp_filter * filter, int what);
242
243int roardsp_quantify_init  (struct roardsp_filter * filter, struct roar_stream * stream, int id);
244int roardsp_quantify_uninit(struct roardsp_filter * filter);
245int roardsp_quantify_calc16(struct roardsp_filter * filter, void * data, size_t samples);
246int roardsp_quantify_ctl   (struct roardsp_filter * filter, int cmd, void * data);
247int roardsp_quantify_reset (struct roardsp_filter * filter, int what);
248
249int roardsp_clip_calc16(struct roardsp_filter * filter, void * data, size_t samples);
250int roardsp_clip_ctl   (struct roardsp_filter * filter, int cmd, void * data);
251int roardsp_clip_reset (struct roardsp_filter * filter, int what);
252
253int roardsp_downmix_init   (struct roardsp_filter * filter, struct roar_stream * stream, int id);
254int roardsp_downmix_calc162(struct roardsp_filter * filter, void * data, size_t samples);
255int roardsp_downmix_ctl    (struct roardsp_filter * filter, int cmd, void * data);
256int roardsp_downmix_reset  (struct roardsp_filter * filter, int what);
257
258int roardsp_dcblock_init   (struct roardsp_filter * filter, struct roar_stream * stream, int id);
259int roardsp_dcblock_uninit (struct roardsp_filter * filter);
260int roardsp_dcblock_calc16 (struct roardsp_filter * filter, void * data, size_t samples);
261int roardsp_dcblock_reset  (struct roardsp_filter * filter, int what);
262
263int roardsp_swap_init   (struct roardsp_filter * filter, struct roar_stream * stream, int id);
264int roardsp_swap_uninit (struct roardsp_filter * filter);
265int roardsp_swap_calc162(struct roardsp_filter * filter, void * data, size_t samples);
266int roardsp_swap_ctl    (struct roardsp_filter * filter, int cmd, void * data);
267int roardsp_swap_reset  (struct roardsp_filter * filter, int what);
268
269int roardsp_agc_init   (struct roardsp_filter * filter, struct roar_stream * stream, int id);
270int roardsp_agc_uninit (struct roardsp_filter * filter);
271int roardsp_agc_ctl    (struct roardsp_filter * filter, int cmd, void * data);
272int roardsp_agc_reset  (struct roardsp_filter * filter, int what);
273
274#ifdef _SPEEX_TYPES_H
275#define ROAR_HAVE_SPEEX_FILTER
276int roardsp_speex_prep_init   (struct roardsp_filter * filter, struct roar_stream * stream, int id);
277int roardsp_speex_prep_uninit (struct roardsp_filter * filter);
278int roardsp_speex_prep_calc161(struct roardsp_filter * filter, void * data, size_t samples);
279int roardsp_speex_prep_ctl    (struct roardsp_filter * filter, int cmd, void * data);
280int roardsp_speex_prep_reset  (struct roardsp_filter * filter, int what);
281#endif
282
283// codecs:
284int roardsp_conv_alaw2pcm16 (int16_t * out, char * in, size_t len);
285int roardsp_conv_pcm162alaw (char * out, int16_t * in, size_t len);
286
287int roardsp_conv_mulaw2pcm16 (int16_t * out, char * in, size_t len);
288int roardsp_conv_pcm162mulaw (char * out, int16_t * in, size_t len);
289
290__END_DECLS
291
292#endif
293
294//ll
Note: See TracBrowser for help on using the repository browser.