Mercurial > mplayer.hg
annotate libaf/af.h @ 23011:365eef1fc4f0
Disable caching of rotated glyphs.
The following commits will add perspective distortion to the glyphs rotated
with \frx and \fry. Somewhere along the way correct caching of such glyphs
will become impossible, but in the end everything will be fine.
author | eugeni |
---|---|
date | Fri, 20 Apr 2007 22:49:48 +0000 |
parents | 0b17f818d393 |
children | 484b8eaaf28f |
rev | line source |
---|---|
21232
1e188b06ce98
Use the real name of the header file when guarding against double inclusion.
diego
parents:
16627
diff
changeset
|
1 #ifndef __af_h__ |
1e188b06ce98
Use the real name of the header file when guarding against double inclusion.
diego
parents:
16627
diff
changeset
|
2 #define __af_h__ |
12676 | 3 |
8167 | 4 #include <stdio.h> |
5 | |
8180
4ba9aed295f2
Fixing segfault bug and addnig support for lrintf() in format conversion
anders
parents:
8167
diff
changeset
|
6 #include "af_mp.h" |
8167 | 7 #include "config.h" |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
8 #include "control.h" |
8167 | 9 #include "af_format.h" |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
10 |
7568 | 11 struct af_instance_s; |
12 | |
21233
0b17f818d393
Remove config.h and move its content to af.h. There are multiple files under
diego
parents:
21232
diff
changeset
|
13 // Number of channels |
0b17f818d393
Remove config.h and move its content to af.h. There are multiple files under
diego
parents:
21232
diff
changeset
|
14 #ifndef AF_NCH |
0b17f818d393
Remove config.h and move its content to af.h. There are multiple files under
diego
parents:
21232
diff
changeset
|
15 #define AF_NCH 6 |
0b17f818d393
Remove config.h and move its content to af.h. There are multiple files under
diego
parents:
21232
diff
changeset
|
16 #endif |
0b17f818d393
Remove config.h and move its content to af.h. There are multiple files under
diego
parents:
21232
diff
changeset
|
17 |
7568 | 18 // Audio data chunk |
19 typedef struct af_data_s | |
20 { | |
21 void* audio; // data buffer | |
22 int len; // buffer length | |
23 int rate; // sample rate | |
24 int nch; // number of channels | |
25 int format; // format | |
26 int bps; // bytes per sample | |
27 } af_data_t; | |
28 | |
29 // Fraction, used to calculate buffer lengths | |
30 typedef struct frac_s | |
31 { | |
32 int n; // Numerator | |
33 int d; // Denominator | |
34 } frac_t; | |
35 | |
14433
95bb94a930a3
always cancel down fractions (frac_t) to avoid overflows and playback
reimar
parents:
14292
diff
changeset
|
36 int af_gcd(register int a, register int b); |
95bb94a930a3
always cancel down fractions (frac_t) to avoid overflows and playback
reimar
parents:
14292
diff
changeset
|
37 void af_frac_cancel(frac_t *f); |
95bb94a930a3
always cancel down fractions (frac_t) to avoid overflows and playback
reimar
parents:
14292
diff
changeset
|
38 void af_frac_mul(frac_t *out, const frac_t *in); |
95bb94a930a3
always cancel down fractions (frac_t) to avoid overflows and playback
reimar
parents:
14292
diff
changeset
|
39 |
8167 | 40 // Flags used for defining the behavior of an audio filter |
7615 | 41 #define AF_FLAGS_REENTRANT 0x00000000 |
42 #define AF_FLAGS_NOT_REENTRANT 0x00000001 | |
43 | |
7568 | 44 /* Audio filter information not specific for current instance, but for |
45 a specific filter */ | |
46 typedef struct af_info_s | |
47 { | |
48 const char *info; | |
49 const char *name; | |
50 const char *author; | |
51 const char *comment; | |
7615 | 52 const int flags; |
7568 | 53 int (*open)(struct af_instance_s* vf); |
54 } af_info_t; | |
55 | |
56 // Linked list of audio filters | |
57 typedef struct af_instance_s | |
58 { | |
59 af_info_t* info; | |
60 int (*control)(struct af_instance_s* af, int cmd, void* arg); | |
61 void (*uninit)(struct af_instance_s* af); | |
62 af_data_t* (*play)(struct af_instance_s* af, af_data_t* data); | |
63 void* setup; // setup data for this specific instance and filter | |
64 af_data_t* data; // configuration for outgoing data stream | |
65 struct af_instance_s* next; | |
66 struct af_instance_s* prev; | |
7665
fbd5445cc853
Adding function for calculating the delay caused by the filters
anders
parents:
7649
diff
changeset
|
67 double delay; // Delay caused by the filter [ms] |
7568 | 68 frac_t mul; /* length multiplier: how much does this instance change |
69 the length of the buffer. */ | |
70 }af_instance_t; | |
71 | |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
72 // Initialization flags |
8167 | 73 extern int* af_cpu_speed; |
74 | |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
75 #define AF_INIT_AUTO 0x00000000 |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
76 #define AF_INIT_SLOW 0x00000001 |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
77 #define AF_INIT_FAST 0x00000002 |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
78 #define AF_INIT_FORCE 0x00000003 |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
79 #define AF_INIT_TYPE_MASK 0x00000003 |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
80 |
8867
558f0b1f45ee
New auto config for volume and resample and added support for float flag in configuration
anders
parents:
8674
diff
changeset
|
81 #define AF_INIT_INT 0x00000000 |
8868
398e3fb7c103
10l bug for float conversion control + feature fix in volume control
anders
parents:
8867
diff
changeset
|
82 #define AF_INIT_FLOAT 0x00000004 |
398e3fb7c103
10l bug for float conversion control + feature fix in volume control
anders
parents:
8867
diff
changeset
|
83 #define AF_INIT_FORMAT_MASK 0x00000004 |
8867
558f0b1f45ee
New auto config for volume and resample and added support for float flag in configuration
anders
parents:
8674
diff
changeset
|
84 |
8167 | 85 // Default init type |
86 #ifndef AF_INIT_TYPE | |
87 #if defined(HAVE_SSE) || defined(HAVE_3DNOW) | |
88 #define AF_INIT_TYPE (af_cpu_speed?*af_cpu_speed:AF_INIT_FAST) | |
89 #else | |
90 #define AF_INIT_TYPE (af_cpu_speed?*af_cpu_speed:AF_INIT_SLOW) | |
91 #endif | |
92 #endif | |
93 | |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
94 // Configuration switches |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
95 typedef struct af_cfg_s{ |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
96 int force; // Initialization type |
8167 | 97 char** list; /* list of names of filters that are added to filter |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
98 list during first initialization of stream */ |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
99 }af_cfg_t; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
100 |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
101 // Current audio stream |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
102 typedef struct af_stream_s |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
103 { |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
104 // The first and last filter in the list |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
105 af_instance_t* first; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
106 af_instance_t* last; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
107 // Storage for input and output data formats |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
108 af_data_t input; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
109 af_data_t output; |
8167 | 110 // Configuration for this stream |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
111 af_cfg_t cfg; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
112 }af_stream_t; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
113 |
7568 | 114 /********************************************* |
115 // Return values | |
116 */ | |
117 | |
118 #define AF_DETACH 2 | |
119 #define AF_OK 1 | |
120 #define AF_TRUE 1 | |
121 #define AF_FALSE 0 | |
122 #define AF_UNKNOWN -1 | |
123 #define AF_ERROR -2 | |
8167 | 124 #define AF_FATAL -3 |
7568 | 125 |
126 | |
127 | |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
128 /********************************************* |
7568 | 129 // Export functions |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
130 */ |
7568 | 131 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
132 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
133 * \defgroup af_chain Audio filter chain functions |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
134 * \{ |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
135 * \param s filter chain |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
136 */ |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
137 |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
138 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
139 * \brief Initialize the stream "s". |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
140 * \return 0 on success, -1 on failure |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
141 * |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
142 * This function creates a new filter list if necessary, according |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
143 * to the values set in input and output. Input and output should contain |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
144 * the format of the current movie and the format of the preferred output |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
145 * respectively. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
146 * Filters to convert to the preferred output format are inserted |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
147 * automatically, except when they are set to 0. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
148 * The function is reentrant i.e. if called with an already initialized |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
149 * stream the stream will be reinitialized. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
150 */ |
15811
9b4bbb6098f6
make -srate work again, unify audio filter init and preinit.
reimar
parents:
14883
diff
changeset
|
151 int af_init(af_stream_t* s); |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
152 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
153 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
154 * \brief Uninit and remove all filters from audio filter chain |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
155 */ |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
156 void af_uninit(af_stream_t* s); |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
157 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
158 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
159 * \brief This function adds the filter "name" to the stream s. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
160 * \param name name of filter to add |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
161 * \return pointer to the new filter, NULL if insert failed |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
162 * |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
163 * The filter will be inserted somewhere nice in the |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
164 * list of filters (i.e. at the beginning unless the |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
165 * first filter is the format filter (why??). |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
166 */ |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
167 af_instance_t* af_add(af_stream_t* s, char* name); |
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
168 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
169 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
170 * \brief Uninit and remove the filter "af" |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
171 * \param af filter to remove |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
172 */ |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
173 void af_remove(af_stream_t* s, af_instance_t* af); |
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
174 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
175 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
176 * \brief find filter in chain by name |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
177 * \param name name of the filter to find |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
178 * \return first filter with right name or NULL if not found |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
179 * |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
180 * This function is used for finding already initialized filters |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
181 */ |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
182 af_instance_t* af_get(af_stream_t* s, char* name); |
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
183 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
184 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
185 * \brief filter data chunk through the filters in the list |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
186 * \param data data to play |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
187 * \return resulting data |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
188 * \ingroup af_chain |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
189 */ |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
190 af_data_t* af_play(af_stream_t* s, af_data_t* data); |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
191 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
192 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
193 * \brief send control to all filters, starting with the last until |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
194 * one accepts the command with AF_OK. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
195 * \param cmd filter control command |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
196 * \param arg argument for filter command |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
197 * \return the accepting filter or NULL if none was found |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
198 */ |
14292
12239a0d5408
Make af_control_any_rev return the matching filter
reimar
parents:
13269
diff
changeset
|
199 af_instance_t *af_control_any_rev (af_stream_t* s, int cmd, void* arg); |
12668
ce6ab8cb8597
Send a command throught the filter chain until some item returns AF_OK. Patch by Reimar Doeffinger
alex
parents:
8969
diff
changeset
|
200 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
201 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
202 * \brief Calculate how long the output from the filters will be for a given |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
203 * input length. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
204 * \param len input lenght for which to calculate output length |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
205 * \return calculated output length, will always be >= the resulting |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
206 * length when actually calling af_play. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
207 */ |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
208 int af_outputlen(af_stream_t* s, int len); |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
209 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
210 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
211 * \brief Calculate how long the input to the filters should be to produce a |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
212 * certain output length |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
213 * \param len wanted output length |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
214 * \return input length required to produce the output length "len". Possibly |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
215 * smaller to avoid overflow of output buffer |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
216 */ |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
217 int af_inputlen(af_stream_t* s, int len); |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
218 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
219 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
220 * \brief calculate required input length for desired output size |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
221 * \param len desired minimum output length |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
222 * \param max_outsize maximum output length |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
223 * \param max_insize maximum input length |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
224 * \return input length or -1 on error |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
225 * |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
226 Calculate how long the input IN to the filters should be to produce |
7598
48f8c731efb5
Adding function for estimating required buffer length
anders
parents:
7591
diff
changeset
|
227 a certain output length OUT but with the following three constraints: |
48f8c731efb5
Adding function for estimating required buffer length
anders
parents:
7591
diff
changeset
|
228 1. IN <= max_insize, where max_insize is the maximum possible input |
48f8c731efb5
Adding function for estimating required buffer length
anders
parents:
7591
diff
changeset
|
229 block length |
48f8c731efb5
Adding function for estimating required buffer length
anders
parents:
7591
diff
changeset
|
230 2. OUT <= max_outsize, where max_outsize is the maximum possible |
48f8c731efb5
Adding function for estimating required buffer length
anders
parents:
7591
diff
changeset
|
231 output block length |
48f8c731efb5
Adding function for estimating required buffer length
anders
parents:
7591
diff
changeset
|
232 3. If possible OUT >= len. |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
233 */ |
7598
48f8c731efb5
Adding function for estimating required buffer length
anders
parents:
7591
diff
changeset
|
234 int af_calc_insize_constrained(af_stream_t* s, int len, |
48f8c731efb5
Adding function for estimating required buffer length
anders
parents:
7591
diff
changeset
|
235 int max_outsize,int max_insize); |
7568 | 236 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
237 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
238 * \brief Calculate the total delay caused by the filters |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
239 * \return delay in seconds |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
240 */ |
7665
fbd5445cc853
Adding function for calculating the delay caused by the filters
anders
parents:
7649
diff
changeset
|
241 double af_calc_delay(af_stream_t* s); |
7568 | 242 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
243 /** \} */ // end of af_chain group |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
244 |
7568 | 245 // Helper functions and macros used inside the audio filters |
246 | |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
247 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
248 * \defgroup af_filter Audio filter helper functions |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
249 * \{ |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
250 */ |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
251 |
7568 | 252 /* Helper function called by the macro with the same name only to be |
253 called from inside filters */ | |
254 int af_resize_local_buffer(af_instance_t* af, af_data_t* data); | |
255 | |
256 /* Helper function used to calculate the exact buffer length needed | |
7589 | 257 when buffers are resized. The returned length is >= than what is |
258 needed */ | |
259 int af_lencalc(frac_t mul, af_data_t* data); | |
7568 | 260 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
261 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
262 * \brief convert dB to gain value |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
263 * \param n number of values to convert |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
264 * \param in [in] values in dB, <= -200 will become 0 gain |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
265 * \param out [out] gain values |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
266 * \param k input values are divided by this |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
267 * \param mi minimum dB value, input will be clamped to this |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
268 * \param ma maximum dB value, input will be clamped to this |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
269 * \return AF_ERROR on error, AF_OK otherwise |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
270 */ |
8607 | 271 int af_from_dB(int n, float* in, float* out, float k, float mi, float ma); |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
272 |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
273 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
274 * \brief convert gain value to dB |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
275 * \param n number of values to convert |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
276 * \param in [in] gain values, 0 wil become -200 dB |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
277 * \param out [out] values in dB |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
278 * \param k output values will be multiplied by this |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
279 * \return AF_ERROR on error, AF_OK otherwise |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
280 */ |
8607 | 281 int af_to_dB(int n, float* in, float* out, float k); |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
282 |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
283 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
284 * \brief convert milliseconds to sample time |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
285 * \param n number of values to convert |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
286 * \param in [in] values in milliseconds |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
287 * \param out [out] sample time values |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
288 * \param rate sample rate |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
289 * \param mi minimum ms value, input will be clamped to this |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
290 * \param ma maximum ms value, input will be clamped to this |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
291 * \return AF_ERROR on error, AF_OK otherwise |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
292 */ |
8674
93212da0032e
10l memory leak + bug fixes in ms to sample time conversion
anders
parents:
8607
diff
changeset
|
293 int af_from_ms(int n, float* in, int* out, int rate, float mi, float ma); |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
294 |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
295 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
296 * \brief convert sample time to milliseconds |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
297 * \param n number of values to convert |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
298 * \param in [in] sample time values |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
299 * \param out [out] values in milliseconds |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
300 * \param rate sample rate |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
301 * \return AF_ERROR on error, AF_OK otherwise |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
302 */ |
8674
93212da0032e
10l memory leak + bug fixes in ms to sample time conversion
anders
parents:
8607
diff
changeset
|
303 int af_to_ms(int n, int* in, float* out, int rate); |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
304 |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
305 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
306 * \brief test if output format matches |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
307 * \param af audio filter |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
308 * \param out needed format, will be overwritten by available |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
309 * format if they do not match |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
310 * \return AF_FALSE if formats do not match, AF_OK if they match |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
311 * |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
312 * compares the format, bps, rate and nch values of af->data with out |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
313 */ |
8607 | 314 int af_test_output(struct af_instance_s* af, af_data_t* out); |
315 | |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
316 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
317 * \brief soft clipping function using sin() |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
318 * \param a input value |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
319 * \return clipped value |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
320 */ |
14622 | 321 float af_softclip(float a); |
322 | |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
323 /** \} */ // end of af_filter group, but more functions of this group below |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
324 |
13269
aa13937da8a0
mplayer -af help now lists all available audio filters.
ivo
parents:
12676
diff
changeset
|
325 /** Print a list of all available audio filters */ |
aa13937da8a0
mplayer -af help now lists all available audio filters.
ivo
parents:
12676
diff
changeset
|
326 void af_help(void); |
aa13937da8a0
mplayer -af help now lists all available audio filters.
ivo
parents:
12676
diff
changeset
|
327 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
328 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
329 * \brief fill the missing parameters in the af_data_t structure |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
330 * \param data structure to fill |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
331 * \ingroup af_filter |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
332 * |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
333 * Currently only sets bps based on format |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
334 */ |
14883 | 335 void af_fix_parameters(af_data_t *data); |
14818
663c1ea5f595
finally remove the refences to bps outside libaf. also simplification of some messages and removed redundants
alex
parents:
14622
diff
changeset
|
336 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
337 /** Memory reallocation macro: if a local buffer is used (i.e. if the |
7568 | 338 filter doesn't operate on the incoming buffer this macro must be |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
339 called to ensure the buffer is big enough. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
340 * \ingroup af_filter |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
341 */ |
7568 | 342 #define RESIZE_LOCAL_BUFFER(a,d)\ |
7591 | 343 ((a->data->len < af_lencalc(a->mul,d))?af_resize_local_buffer(a,d):AF_OK) |
7568 | 344 |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
345 /* Some other useful macro definitions*/ |
7568 | 346 #ifndef min |
347 #define min(a,b)(((a)>(b))?(b):(a)) | |
348 #endif | |
349 | |
350 #ifndef max | |
351 #define max(a,b)(((a)>(b))?(a):(b)) | |
352 #endif | |
353 | |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
354 #ifndef clamp |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
355 #define clamp(a,min,max) (((a)>(max))?(max):(((a)<(min))?(min):(a))) |
7568 | 356 #endif |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
357 |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
358 #ifndef sign |
8073 | 359 #define sign(a) (((a)>0)?(1):(-1)) |
360 #endif | |
361 | |
8167 | 362 #ifndef lrnd |
363 #define lrnd(a,b) ((b)((a)>=0.0?(a)+0.5:(a)-0.5)) | |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
364 #endif |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
365 |
8167 | 366 /* Error messages */ |
367 | |
368 typedef struct af_msg_cfg_s | |
369 { | |
370 int level; /* Message level for debug and error messages max = 2 | |
371 min = -2 default = 0 */ | |
372 FILE* err; // Stream to print error messages to | |
373 FILE* msg; // Stream to print information messages to | |
374 }af_msg_cfg_t; | |
375 | |
376 extern af_msg_cfg_t af_msg_cfg; // Message | |
377 | |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
378 //! \addtogroup af_filter |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
379 //! \{ |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
380 #define AF_MSG_FATAL -3 ///< Fatal error exit immediately |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
381 #define AF_MSG_ERROR -2 ///< Error return gracefully |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
382 #define AF_MSG_WARN -1 ///< Print warning but do not exit (can be suppressed) |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
383 #define AF_MSG_INFO 0 ///< Important information |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
384 #define AF_MSG_VERBOSE 1 ///< Print this if verbose is enabled |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
385 #define AF_MSG_DEBUG0 2 ///< Print if very verbose |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
386 #define AF_MSG_DEBUG1 3 ///< Print if very very verbose |
8167 | 387 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
388 //! Macro for printing error messages |
8167 | 389 #ifndef af_msg |
390 #define af_msg(lev, args... ) \ | |
8957
36a5cdca733b
bunkus: Encapsulated arguments to #define in ( ... ) so that the #defines can be safely used like functions: mydef(flag ? val1 : val2)
mosu
parents:
8868
diff
changeset
|
391 (((lev)<AF_MSG_WARN)?(fprintf(af_msg_cfg.err?af_msg_cfg.err:stderr, ## args )): \ |
36a5cdca733b
bunkus: Encapsulated arguments to #define in ( ... ) so that the #defines can be safely used like functions: mydef(flag ? val1 : val2)
mosu
parents:
8868
diff
changeset
|
392 (((lev)<=af_msg_cfg.level)?(fprintf(af_msg_cfg.msg?af_msg_cfg.msg:stdout, ## args )):0)) |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
393 #endif |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
394 //! \} |
8167 | 395 |
21232
1e188b06ce98
Use the real name of the header file when guarding against double inclusion.
diego
parents:
16627
diff
changeset
|
396 #endif /* __af_h__ */ |