annotate libaf/af.h @ 7616:d09c125a88fa

Changing frequency limit for resampling
author anders
date Sun, 06 Oct 2002 11:28:03 +0000
parents c67328dd459a
children 90e16aa8ae5f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
1 #ifndef __aop_h__
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
2 #define __aop_h__
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
3
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
4 struct af_instance_s;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
5
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
6 // Audio data chunk
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
7 typedef struct af_data_s
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
8 {
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
9 void* audio; // data buffer
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
10 int len; // buffer length
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
11 int rate; // sample rate
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
12 int nch; // number of channels
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
13 int format; // format
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
14 int bps; // bytes per sample
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
15 } af_data_t;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
16
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
17 // Fraction, used to calculate buffer lengths
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
18 typedef struct frac_s
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
19 {
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
20 int n; // Numerator
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
21 int d; // Denominator
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
22 } frac_t;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
23
7615
c67328dd459a Adding Support for non-reentrant audio filters
anders
parents: 7598
diff changeset
24 // Flags used for defining the behavour of an audio filter
c67328dd459a Adding Support for non-reentrant audio filters
anders
parents: 7598
diff changeset
25 #define AF_FLAGS_REENTRANT 0x00000000
c67328dd459a Adding Support for non-reentrant audio filters
anders
parents: 7598
diff changeset
26 #define AF_FLAGS_NOT_REENTRANT 0x00000001
c67328dd459a Adding Support for non-reentrant audio filters
anders
parents: 7598
diff changeset
27
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
28 /* Audio filter information not specific for current instance, but for
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
29 a specific filter */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
30 typedef struct af_info_s
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 const char *info;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
33 const char *name;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
34 const char *author;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
35 const char *comment;
7615
c67328dd459a Adding Support for non-reentrant audio filters
anders
parents: 7598
diff changeset
36 const int flags;
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
37 int (*open)(struct af_instance_s* vf);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
38 } af_info_t;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
39
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
40 // Linked list of audio filters
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
41 typedef struct af_instance_s
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
42 {
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
43 af_info_t* info;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
44 int (*control)(struct af_instance_s* af, int cmd, void* arg);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
45 void (*uninit)(struct af_instance_s* af);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
46 af_data_t* (*play)(struct af_instance_s* af, af_data_t* data);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
47 void* setup; // setup data for this specific instance and filter
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
48 af_data_t* data; // configuration for outgoing data stream
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
49 struct af_instance_s* next;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
50 struct af_instance_s* prev;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
51 frac_t mul; /* length multiplier: how much does this instance change
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
52 the length of the buffer. */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
53 }af_instance_t;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
54
7571
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
55 // Initialization types
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
56 #define SLOW 1
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
57 #define FAST 2
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
58 #define FORCE 3
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
59
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
60 // Configuration switches
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
61 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
62 int force; // Initialization type
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
63 char** list; /* list of names of plugins that are added to filter
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
64 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
65 }af_cfg_t;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
66
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
67 // Current audio stream
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
68 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
69 {
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
70 // 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
71 af_instance_t* first;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
72 af_instance_t* last;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
73 // 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
74 af_data_t input;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
75 af_data_t output;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
76 // Cofiguration for this stream
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
77 af_cfg_t cfg;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
78 }af_stream_t;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
79
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
80 /*********************************************
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
81 // Control parameters
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
82 */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
83
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
84 /* The control system is divided into 3 levels
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
85 mandatory calls - all filters must answer to all of these
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
86 optional calls - are optional
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
87 filter specific calls - applies only to some filters
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
88 */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
89
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
90 #define AF_CONTROL_MANDATORY_BASE 0
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
91 #define AF_CONTROL_OPTIONAL_BASE 100
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
92 #define AF_CONTROL_FILTER_SPECIFIC_BASE 200
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
93
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
94 // MANDATORY CALLS
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
95
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
96 /* Reinitialize filter. The optional argument contains the new
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
97 configuration in form of a af_data_t struct. If the filter does not
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
98 support the new format the struct should be changed and AF_FALSE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
99 should be returned. If the incoming and outgoing data streams are
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
100 identical the filter can return AF_DETACH. This will remove the
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
101 filter. */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
102 #define AF_CONTROL_REINIT 1 + AF_CONTROL_MANDATORY_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
103
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
104 // OPTIONAL CALLS
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
105
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
106
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
107 // FILTER SPECIFIC CALLS
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
108
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
109 // Set output rate in resample
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
110 #define AF_CONTROL_RESAMPLE 1 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
111 // Set output format in format
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
112 #define AF_CONTROL_FORMAT 2 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
113 // Set number of output channels in channels
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
114 #define AF_CONTROL_CHANNELS 3 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
115 // Set delay length in delay
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
116 #define AF_CONTROL_SET_DELAY_LEN 4 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
117 /*********************************************
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
118 // Return values
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
119 */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
120
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
121 #define AF_DETACH 2
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
122 #define AF_OK 1
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
123 #define AF_TRUE 1
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
124 #define AF_FALSE 0
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
125 #define AF_UNKNOWN -1
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
126 #define AF_ERROR -2
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
127 #define AF_NA -3
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
128
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
129
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
130
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
131 // Export functions
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
132
7571
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
133 /* Initialize the stream "s". This function creates a new fileterlist
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
134 if nessesary according to the values set in input and output. Input
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
135 and output should contain the format of the current movie and the
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
136 formate of the preferred output respectively. The function is
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
137 reentreant i.e. if called wit an already initialized stream the
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
138 stream will be reinitialized. The return value is 0 if sucess and
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
139 -1 if failure */
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
140 int af_init(af_stream_t* s);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
141 // Uninit and remove all filters
7571
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
142 void af_uninit(af_stream_t* s);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
143 // Filter data chunk through the filters in the list
7571
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
144 af_data_t* af_play(af_stream_t* s, af_data_t* data);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
145 /* Calculate how long the output from the filters will be given the
7589
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
146 input length "len". The calculated length is >= the actual
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
147 length */
7571
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
148 int af_outputlen(af_stream_t* s, int len);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
149 /* Calculate how long the input to the filters should be to produce a
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
150 certain output length, i.e. the return value of this function is
7589
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
151 the input length required to produce the output length "len". The
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
152 calculated length is <= the actual length */
7571
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
153 int af_inputlen(af_stream_t* s, int len);
7598
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
154 /* Calculate how long the input IN to the filters should be to produce
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
155 a certain output length OUT but with the following three constraints:
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
156 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
157 block length
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
158 2. OUT <= max_outsize, where max_outsize is the maximum possible
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
159 output block length
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
160 3. If possible OUT >= len.
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
161 Return -1 in case of error */
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
162 int af_calc_insize_constrained(af_stream_t* s, int len,
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
163 int max_outsize,int max_insize);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
164
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
165
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
166 // Helper functions and macros used inside the audio filters
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
167
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
168 /* Helper function called by the macro with the same name only to be
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
169 called from inside filters */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
170 int af_resize_local_buffer(af_instance_t* af, af_data_t* data);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
171
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
172 /* Helper function used to calculate the exact buffer length needed
7589
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
173 when buffers are resized. The returned length is >= than what is
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
174 needed */
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
175 int af_lencalc(frac_t mul, af_data_t* data);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
176
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
177 /* Memory reallocation macro: if a local buffer is used (i.e. if the
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
178 filter doesn't operate on the incoming buffer this macro must be
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
179 called to ensure the buffer is big enough. */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
180 #define RESIZE_LOCAL_BUFFER(a,d)\
7591
5ef4d009f950 Correcting error in macro
anders
parents: 7589
diff changeset
181 ((a->data->len < af_lencalc(a->mul,d))?af_resize_local_buffer(a,d):AF_OK)
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
182
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
183 #ifndef min
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
184 #define min(a,b)(((a)>(b))?(b):(a))
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
185 #endif
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
186
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
187 #ifndef max
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
188 #define max(a,b)(((a)>(b))?(a):(b))
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
189 #endif
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
190
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
191 #endif