annotate libaf/filter.h @ 30953:d3f31670562d

Share more code between the two ATI fragment shader YUV to RGB conversion methods and extend them to support more accurate conversion (though at the cost of some speed).
author reimar
date Sun, 04 Apr 2010 11:45:05 +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 */