Mercurial > mplayer.hg
annotate libaf/af.h @ 35078:d698d80bb438
Pass input to "strings" via stdin.
That disables any "clever" parsing that will fail if strings
was not updated to support that particular binary format.
This can easily happen when cross-compiling, but obviously
strings on OSX 10.6 was never update to handle the latest
(64 bit) binary format either and would previously just fail
(the obvious way of falling back to the generic algorithm in
that case would have been too user-friendly I guess...)
author | reimar |
---|---|
date | Wed, 12 Sep 2012 22:01:36 +0000 |
parents | a93891202051 |
children | 2b9bc3c2933d |
rev | line source |
---|---|
28229
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
1 /* |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
2 * This file is part of MPlayer. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
3 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
7 * (at your option) any later version. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
8 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
12 * GNU General Public License for more details. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
13 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
17 */ |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
26203
diff
changeset
|
18 |
26029 | 19 #ifndef MPLAYER_AF_H |
20 #define MPLAYER_AF_H | |
12676 | 21 |
8167 | 22 #include <stdio.h> |
23 | |
29052
048aea3d4c2c
Move config.h include directive up as a precaution measure.
bircoph
parents:
29051
diff
changeset
|
24 #include "config.h" |
048aea3d4c2c
Move config.h include directive up as a precaution measure.
bircoph
parents:
29051
diff
changeset
|
25 |
29051 | 26 #include "af_format.h" |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
27 #include "control.h" |
29051 | 28 #include "cpudetect.h" |
29050 | 29 |
7568 | 30 struct af_instance_s; |
31 | |
21233
0b17f818d393
Remove config.h and move its content to af.h. There are multiple files under
diego
parents:
21232
diff
changeset
|
32 // Number of channels |
0b17f818d393
Remove config.h and move its content to af.h. There are multiple files under
diego
parents:
21232
diff
changeset
|
33 #ifndef AF_NCH |
29826 | 34 #define AF_NCH 8 |
21233
0b17f818d393
Remove config.h and move its content to af.h. There are multiple files under
diego
parents:
21232
diff
changeset
|
35 #endif |
0b17f818d393
Remove config.h and move its content to af.h. There are multiple files under
diego
parents:
21232
diff
changeset
|
36 |
7568 | 37 // Audio data chunk |
38 typedef struct af_data_s | |
39 { | |
40 void* audio; // data buffer | |
41 int len; // buffer length | |
42 int rate; // sample rate | |
43 int nch; // number of channels | |
44 int format; // format | |
45 int bps; // bytes per sample | |
46 } af_data_t; | |
47 | |
14433
95bb94a930a3
always cancel down fractions (frac_t) to avoid overflows and playback
reimar
parents:
14292
diff
changeset
|
48 |
8167 | 49 // Flags used for defining the behavior of an audio filter |
7615 | 50 #define AF_FLAGS_REENTRANT 0x00000000 |
51 #define AF_FLAGS_NOT_REENTRANT 0x00000001 | |
52 | |
7568 | 53 /* Audio filter information not specific for current instance, but for |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29052
diff
changeset
|
54 a specific filter */ |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29052
diff
changeset
|
55 typedef struct af_info_s |
7568 | 56 { |
57 const char *info; | |
58 const char *name; | |
59 const char *author; | |
60 const char *comment; | |
7615 | 61 const int flags; |
7568 | 62 int (*open)(struct af_instance_s* vf); |
63 } af_info_t; | |
64 | |
65 // Linked list of audio filters | |
66 typedef struct af_instance_s | |
67 { | |
32134
12db4ae0b3d1
const-correctness for af_info_t audio filter declarations
diego
parents:
31180
diff
changeset
|
68 const af_info_t* info; |
7568 | 69 int (*control)(struct af_instance_s* af, int cmd, void* arg); |
70 void (*uninit)(struct af_instance_s* af); | |
71 af_data_t* (*play)(struct af_instance_s* af, af_data_t* data); | |
72 void* setup; // setup data for this specific instance and filter | |
73 af_data_t* data; // configuration for outgoing data stream | |
74 struct af_instance_s* next; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29052
diff
changeset
|
75 struct af_instance_s* prev; |
24900 | 76 double delay; /* Delay caused by the filter, in units of bytes read without |
77 * corresponding output */ | |
24888 | 78 double mul; /* length multiplier: how much does this instance change |
7568 | 79 the length of the buffer. */ |
80 }af_instance_t; | |
81 | |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
82 // Initialization flags |
8167 | 83 extern int* af_cpu_speed; |
84 | |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
85 #define AF_INIT_AUTO 0x00000000 |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
86 #define AF_INIT_SLOW 0x00000001 |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
87 #define AF_INIT_FAST 0x00000002 |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
88 #define AF_INIT_FORCE 0x00000003 |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
89 #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
|
90 |
8867
558f0b1f45ee
New auto config for volume and resample and added support for float flag in configuration
anders
parents:
8674
diff
changeset
|
91 #define AF_INIT_INT 0x00000000 |
8868
398e3fb7c103
10l bug for float conversion control + feature fix in volume control
anders
parents:
8867
diff
changeset
|
92 #define AF_INIT_FLOAT 0x00000004 |
398e3fb7c103
10l bug for float conversion control + feature fix in volume control
anders
parents:
8867
diff
changeset
|
93 #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
|
94 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29052
diff
changeset
|
95 // Default init type |
8167 | 96 #ifndef AF_INIT_TYPE |
97 #define AF_INIT_TYPE (af_cpu_speed?*af_cpu_speed:AF_INIT_SLOW) | |
98 #endif | |
99 | |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
100 // Configuration switches |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
101 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
|
102 int force; // Initialization type |
8167 | 103 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
|
104 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
|
105 }af_cfg_t; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
106 |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
107 // Current audio stream |
31180 | 108 typedef struct af_stream |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
109 { |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
110 // 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
|
111 af_instance_t* first; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
112 af_instance_t* last; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
113 // 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
|
114 af_data_t input; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
115 af_data_t output; |
8167 | 116 // 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
|
117 af_cfg_t cfg; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
118 }af_stream_t; |
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
119 |
7568 | 120 /********************************************* |
121 // Return values | |
122 */ | |
123 | |
124 #define AF_DETACH 2 | |
125 #define AF_OK 1 | |
126 #define AF_TRUE 1 | |
127 #define AF_FALSE 0 | |
128 #define AF_UNKNOWN -1 | |
129 #define AF_ERROR -2 | |
8167 | 130 #define AF_FATAL -3 |
7568 | 131 |
132 | |
133 | |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
134 /********************************************* |
7568 | 135 // Export functions |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
136 */ |
7568 | 137 |
16627
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 * \defgroup af_chain Audio filter chain functions |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
140 * \{ |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
141 * \param s filter chain |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
142 */ |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
143 |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
144 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
145 * \brief Initialize the stream "s". |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
146 * \return 0 on success, -1 on failure |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
147 * |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
148 * This function creates a new filter list if necessary, according |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
149 * 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
|
150 * 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
|
151 * respectively. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
152 * Filters to convert to the preferred output format are inserted |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
153 * automatically, except when they are set to 0. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
154 * 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
|
155 * stream the stream will be reinitialized. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
156 */ |
15811
9b4bbb6098f6
make -srate work again, unify audio filter init and preinit.
reimar
parents:
14883
diff
changeset
|
157 int af_init(af_stream_t* s); |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
158 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
159 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
160 * \brief Uninit and remove all filters from audio filter chain |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
161 */ |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
162 void af_uninit(af_stream_t* s); |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
163 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
164 /** |
32418
71a04d45357c
Make af_reinit "public", to allow using it in future patches.
reimar
parents:
32134
diff
changeset
|
165 * \brief Reinit the filter list from the given filter on downwards |
71a04d45357c
Make af_reinit "public", to allow using it in future patches.
reimar
parents:
32134
diff
changeset
|
166 * \param Filter instance to begin the reinit from |
71a04d45357c
Make af_reinit "public", to allow using it in future patches.
reimar
parents:
32134
diff
changeset
|
167 * \return AF_OK on success or AF_ERROR on failure |
71a04d45357c
Make af_reinit "public", to allow using it in future patches.
reimar
parents:
32134
diff
changeset
|
168 */ |
71a04d45357c
Make af_reinit "public", to allow using it in future patches.
reimar
parents:
32134
diff
changeset
|
169 int af_reinit(af_stream_t* s, af_instance_t* af); |
71a04d45357c
Make af_reinit "public", to allow using it in future patches.
reimar
parents:
32134
diff
changeset
|
170 |
71a04d45357c
Make af_reinit "public", to allow using it in future patches.
reimar
parents:
32134
diff
changeset
|
171 /** |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
172 * \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
|
173 * \param name name of filter to add |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
174 * \return pointer to the new filter, NULL if insert failed |
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 * The filter will be inserted somewhere nice in the |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
177 * list of filters (i.e. at the beginning unless the |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
178 * first filter is the format filter (why??). |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
179 */ |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
180 af_instance_t* af_add(af_stream_t* s, char* name); |
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
181 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
182 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
183 * \brief Uninit and remove the filter "af" |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
184 * \param af filter to remove |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
185 */ |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
186 void af_remove(af_stream_t* s, af_instance_t* af); |
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
187 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
188 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
189 * \brief find filter in chain by name |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
190 * \param name name of the filter to find |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
191 * \return first filter with right name or NULL if not found |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29052
diff
changeset
|
192 * |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
193 * This function is used for finding already initialized filters |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
194 */ |
7649
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
195 af_instance_t* af_get(af_stream_t* s, char* name); |
90e16aa8ae5f
Adding functionality for adding filters during execution
anders
parents:
7615
diff
changeset
|
196 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
197 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
198 * \brief filter data chunk through the filters in the list |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
199 * \param data data to play |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
200 * \return resulting data |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
201 * \ingroup af_chain |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
202 */ |
7571
8819fdf88b5d
Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents:
7568
diff
changeset
|
203 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
|
204 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
205 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
206 * \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
|
207 * one accepts the command with AF_OK. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
208 * \param cmd filter control command |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
209 * \param arg argument for filter command |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
210 * \return the accepting filter or NULL if none was found |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
211 */ |
14292
12239a0d5408
Make af_control_any_rev return the matching filter
reimar
parents:
13269
diff
changeset
|
212 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
|
213 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
214 /** |
24892 | 215 * \brief calculate average ratio of filter output lenth to input length |
216 * \return the ratio | |
217 */ | |
218 double af_calc_filter_multiplier(af_stream_t* s); | |
7568 | 219 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
220 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
221 * \brief Calculate the total delay caused by the filters |
24900 | 222 * \return delay in bytes of "missing" output |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
223 */ |
7665
fbd5445cc853
Adding function for calculating the delay caused by the filters
anders
parents:
7649
diff
changeset
|
224 double af_calc_delay(af_stream_t* s); |
7568 | 225 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
226 /** \} */ // end of af_chain group |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
227 |
7568 | 228 // Helper functions and macros used inside the audio filters |
229 | |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
230 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
231 * \defgroup af_filter Audio filter helper functions |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
232 * \{ |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
233 */ |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
234 |
7568 | 235 /* Helper function called by the macro with the same name only to be |
236 called from inside filters */ | |
237 int af_resize_local_buffer(af_instance_t* af, af_data_t* data); | |
238 | |
239 /* Helper function used to calculate the exact buffer length needed | |
7589 | 240 when buffers are resized. The returned length is >= than what is |
241 needed */ | |
24888 | 242 int af_lencalc(double mul, af_data_t* data); |
7568 | 243 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
244 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
245 * \brief convert dB to gain value |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
246 * \param n number of values to convert |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
247 * \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
|
248 * \param out [out] gain values |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
249 * \param k input values are divided by this |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
250 * \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
|
251 * \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
|
252 * \return AF_ERROR on error, AF_OK otherwise |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
253 */ |
8607 | 254 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
|
255 |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
256 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
257 * \brief convert gain value to dB |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
258 * \param n number of values to convert |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
259 * \param in [in] gain values, 0 wil become -200 dB |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
260 * \param out [out] values in dB |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
261 * \param k output values will be multiplied by this |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
262 * \return AF_ERROR on error, AF_OK otherwise |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
263 */ |
8607 | 264 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
|
265 |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
266 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
267 * \brief convert milliseconds to sample time |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
268 * \param n number of values to convert |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
269 * \param in [in] values in milliseconds |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
270 * \param out [out] sample time values |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
271 * \param rate sample rate |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
272 * \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
|
273 * \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
|
274 * \return AF_ERROR on error, AF_OK otherwise |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
275 */ |
8674
93212da0032e
10l memory leak + bug fixes in ms to sample time conversion
anders
parents:
8607
diff
changeset
|
276 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
|
277 |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
278 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
279 * \brief convert sample time to milliseconds |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
280 * \param n number of values to convert |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
281 * \param in [in] sample time values |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
282 * \param out [out] values in milliseconds |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
283 * \param rate sample rate |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
284 * \return AF_ERROR on error, AF_OK otherwise |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
285 */ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29052
diff
changeset
|
286 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
|
287 |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
288 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
289 * \brief test if output format matches |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
290 * \param af audio filter |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
291 * \param out needed format, will be overwritten by available |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
292 * format if they do not match |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
293 * \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
|
294 * |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
295 * 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
|
296 */ |
8607 | 297 int af_test_output(struct af_instance_s* af, af_data_t* out); |
298 | |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
299 /** |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
300 * \brief soft clipping function using sin() |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
301 * \param a input value |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
302 * \return clipped value |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
303 */ |
14622 | 304 float af_softclip(float a); |
305 | |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
306 /** \} */ // 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
|
307 |
13269
aa13937da8a0
mplayer -af help now lists all available audio filters.
ivo
parents:
12676
diff
changeset
|
308 /** Print a list of all available audio filters */ |
aa13937da8a0
mplayer -af help now lists all available audio filters.
ivo
parents:
12676
diff
changeset
|
309 void af_help(void); |
aa13937da8a0
mplayer -af help now lists all available audio filters.
ivo
parents:
12676
diff
changeset
|
310 |
16627
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 * \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
|
313 * \param data structure to fill |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
314 * \ingroup af_filter |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29052
diff
changeset
|
315 * |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
316 * Currently only sets bps based on format |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
317 */ |
14883 | 318 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
|
319 |
16627
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
320 /** Memory reallocation macro: if a local buffer is used (i.e. if the |
7568 | 321 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
|
322 called to ensure the buffer is big enough. |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
323 * \ingroup af_filter |
584bd8980d57
documentation-only patch: make doxygen compatible and create
reimar
parents:
15811
diff
changeset
|
324 */ |
7568 | 325 #define RESIZE_LOCAL_BUFFER(a,d)\ |
7591 | 326 ((a->data->len < af_lencalc(a->mul,d))?af_resize_local_buffer(a,d):AF_OK) |
7568 | 327 |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
328 /* Some other useful macro definitions*/ |
7568 | 329 #ifndef min |
330 #define min(a,b)(((a)>(b))?(b):(a)) | |
331 #endif | |
332 | |
333 #ifndef max | |
334 #define max(a,b)(((a)>(b))?(a):(b)) | |
335 #endif | |
336 | |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
337 #ifndef clamp |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
338 #define clamp(a,min,max) (((a)>(max))?(max):(((a)<(min))?(min):(a))) |
7568 | 339 #endif |
7745
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
340 |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
341 #ifndef sign |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29052
diff
changeset
|
342 #define sign(a) (((a)>0)?(1):(-1)) |
8073 | 343 #endif |
344 | |
8167 | 345 #ifndef lrnd |
346 #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
|
347 #endif |
1d3a3dc1f488
Adding volume control and moving control() call parameters to a seperate file
anders
parents:
7665
diff
changeset
|
348 |
26029 | 349 #endif /* MPLAYER_AF_H */ |