annotate libaf/filter.h @ 31169:ac84149bbdaf

Retry reading even if we hit eof before. This allows playing growing files even with a large cache.
author reimar
date Wed, 26 May 2010 18:23:43 +0000
parents 0f1b5b68af32
children 0dfbb22d68c8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28229
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
1 /*
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
2 * Copyright (C) 2001 Anders Johansson ajh@atri.curtin.edu.au
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
3 *
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
4 * This file is part of MPlayer.
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
5 *
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
7 * it under the terms of the GNU General Public License as published by
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
9 * (at your option) any later version.
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
10 *
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
14 * GNU General Public License for more details.
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
15 *
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
16 * You should have received a copy of the GNU General Public License along
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
72d0b1444141 Replace informal license notices by standard license header
diego
parents: 28051
diff changeset
19 */
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
20
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25535
diff changeset
21 #if !defined MPLAYER_DSP_H
26343
1b73f5aa1796 Remove some useless quotes from #error preprocessor directives.
diego
parents: 26342
diff changeset
22 # error Never use filter.h directly; include dsp.h instead.
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
23 #endif
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
24
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25535
diff changeset
25 #ifndef MPLAYER_FILTER_H
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25535
diff changeset
26 #define MPLAYER_FILTER_H
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
27
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
28
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28229
diff changeset
29 // Design and implementation of different types of digital filters
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
30
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
31
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
32 // Flags used for filter design
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
33
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
34 // Filter characteristics
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
35 #define LP 0x00010000 // Low pass
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
36 #define HP 0x00020000 // High pass
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
37 #define BP 0x00040000 // Band pass
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
38 #define BS 0x00080000 // Band stop
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
39 #define TYPE_MASK 0x000F0000
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
40
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
41 // Window types
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
42 #define BOXCAR 0x00000001
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
43 #define TRIANG 0x00000002
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
44 #define HAMMING 0x00000004
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
45 #define HANNING 0x00000008
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
46 #define BLACKMAN 0x00000010
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
47 #define FLATTOP 0x00000011
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
48 #define KAISER 0x00000012
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
49 #define WINDOW_MASK 0x0000001F
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
50
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
51 // Parallel filter design
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
52 #define FWD 0x00000001 // Forward indexing of polyphase filter
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
53 #define REW 0x00000002 // Reverse indexing of polyphase filter
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
54 #define ODD 0x00000010 // Make filter HP
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
55
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
56 // Exported functions
28051
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
57 FLOAT_TYPE af_filter_fir(unsigned int n, const FLOAT_TYPE* w, const FLOAT_TYPE* x);
8832
a1578b329cc0 Adding sub-woofer filter, use this filter to add a sub channel to the audio stream
anders
parents: 7568
diff changeset
58
28051
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
59 FLOAT_TYPE* af_filter_pfir(unsigned int n, unsigned int k,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
60 unsigned int xi, const FLOAT_TYPE** w,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
61 const FLOAT_TYPE** x, FLOAT_TYPE* y,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
62 unsigned int s);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
63
28051
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
64 //int af_filter_updateq(unsigned int n, unsigned int xi,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
65 // FLOAT_TYPE* xq, FLOAT_TYPE* in);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
66 int af_filter_updatepq(unsigned int n, unsigned int k, unsigned int xi,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
67 FLOAT_TYPE** xq, const FLOAT_TYPE* in, unsigned int s);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
68
28051
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
69 int af_filter_design_fir(unsigned int n, FLOAT_TYPE* w, const FLOAT_TYPE* fc,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
70 unsigned int flags, FLOAT_TYPE opt);
8832
a1578b329cc0 Adding sub-woofer filter, use this filter to add a sub channel to the audio stream
anders
parents: 7568
diff changeset
71
28051
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
72 int af_filter_design_pfir(unsigned int n, unsigned int k, const FLOAT_TYPE* w,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
73 FLOAT_TYPE** pw, FLOAT_TYPE g, unsigned int flags);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
74
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
75 int af_filter_szxform(const FLOAT_TYPE* a, const FLOAT_TYPE* b, FLOAT_TYPE Q,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
76 FLOAT_TYPE fc, FLOAT_TYPE fs, FLOAT_TYPE *k,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 27258
diff changeset
77 FLOAT_TYPE *coef);
8832
a1578b329cc0 Adding sub-woofer filter, use this filter to add a sub channel to the audio stream
anders
parents: 7568
diff changeset
78
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
79 /* Add new data to circular queue designed to be used with a FIR
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
80 filter. xq is the circular queue, in pointing at the new sample, xi
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
81 current index for xq and n the length of the filter. xq must be n*2
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28229
diff changeset
82 long.
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
83 */
14275
de13fd557440 less namespace pollution #2 (prefixed globals in filter.c with af_filter_)
alex
parents: 13602
diff changeset
84 #define af_filter_updateq(n,xi,xq,in)\
8957
36a5cdca733b bunkus: Encapsulated arguments to #define in ( ... ) so that the #defines can be safely used like functions: mydef(flag ? val1 : val2)
mosu
parents: 8832
diff changeset
85 xq[xi]=(xq)[(xi)+(n)]=*(in);\
36a5cdca733b bunkus: Encapsulated arguments to #define in ( ... ) so that the #defines can be safely used like functions: mydef(flag ? val1 : val2)
mosu
parents: 8832
diff changeset
86 xi=(++(xi))&((n)-1);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
87
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25535
diff changeset
88 #endif /* MPLAYER_FILTER_H */