annotate libaf/af.h @ 7666:407031aeedcf

cosmetics :)
author arpi
date Tue, 08 Oct 2002 17:59:52 +0000
parents fbd5445cc853
children 1d3a3dc1f488
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;
7665
fbd5445cc853 Adding function for calculating the delay caused by the filters
anders
parents: 7649
diff changeset
51 double delay; // Delay caused by the filter [ms]
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
52 frac_t mul; /* length multiplier: how much does this instance change
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
53 the length of the buffer. */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
54 }af_instance_t;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
55
7571
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
56 // Initialization types
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
57 #define SLOW 1
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
58 #define FAST 2
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
59 #define FORCE 3
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
60
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
61 // Configuration switches
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
62 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
63 int force; // Initialization type
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
64 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
65 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
66 }af_cfg_t;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
67
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
68 // Current audio stream
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
69 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
70 {
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
71 // 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
72 af_instance_t* first;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
73 af_instance_t* last;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
74 // 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
75 af_data_t input;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
76 af_data_t output;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
77 // Cofiguration for this stream
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
78 af_cfg_t cfg;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
79 }af_stream_t;
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
80
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
81 /*********************************************
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
82 // Control parameters
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
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
85 /* The control system is divided into 3 levels
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
86 mandatory calls - all filters must answer to all of these
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
87 optional calls - are optional
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
88 filter specific calls - applies only to some filters
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
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
91 #define AF_CONTROL_MANDATORY_BASE 0
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
92 #define AF_CONTROL_OPTIONAL_BASE 100
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
93 #define AF_CONTROL_FILTER_SPECIFIC_BASE 200
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
94
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
95 // MANDATORY CALLS
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
96
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
97 /* Reinitialize filter. The optional argument contains the new
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
98 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
99 support the new format the struct should be changed and AF_FALSE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
100 should be returned. If the incoming and outgoing data streams are
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
101 identical the filter can return AF_DETACH. This will remove the
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
102 filter. */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
103 #define AF_CONTROL_REINIT 1 + AF_CONTROL_MANDATORY_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
104
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
105 // OPTIONAL CALLS
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
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
108 // FILTER SPECIFIC CALLS
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
109
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
110 // Set output rate in resample
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
111 #define AF_CONTROL_RESAMPLE 1 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
112 // Set output format in format
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
113 #define AF_CONTROL_FORMAT 2 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
114 // Set number of output channels in channels
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
115 #define AF_CONTROL_CHANNELS 3 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
116 // Set delay length in delay
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
117 #define AF_CONTROL_SET_DELAY_LEN 4 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
118 /*********************************************
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
119 // Return values
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
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
122 #define AF_DETACH 2
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
123 #define AF_OK 1
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
124 #define AF_TRUE 1
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
125 #define AF_FALSE 0
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
126 #define AF_UNKNOWN -1
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
127 #define AF_ERROR -2
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
128 #define AF_NA -3
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
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
132 // Export functions
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
133
7571
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
134 /* 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
135 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
136 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
137 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
138 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
139 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
140 -1 if failure */
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
141 int af_init(af_stream_t* s);
7649
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
142
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
143 // 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
144 void af_uninit(af_stream_t* s);
7649
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
145
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
146 /* Add filter during execution. This function adds the filter "name"
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
147 to the stream s. The filter will be inserted somewhere nice in the
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
148 list of filters. The return value is a pointer to the new filter,
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
149 If the filter couldn't be added the return value is NULL. */
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
150 af_instance_t* af_add(af_stream_t* s, char* name);
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
151
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
152 // Uninit and remove the filter "af"
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
153 void af_remove(af_stream_t* s, af_instance_t* af);
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
154
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
155 /* Find filter in the dynamic filter list using it's name This
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
156 function is used for finding already initialized filters */
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
157 af_instance_t* af_get(af_stream_t* s, char* name);
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
158
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
159 // 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
160 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
161
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
162 /* Calculate how long the output from the filters will be given the
7589
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
163 input length "len". The calculated length is >= the actual
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
164 length */
7571
8819fdf88b5d Adding support for multiple audio streams and removing annoying message from resample and format
anders
parents: 7568
diff changeset
165 int af_outputlen(af_stream_t* s, int len);
7649
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
166
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
167 /* 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
168 certain output length, i.e. the return value of this function is
7589
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
169 the input length required to produce the output length "len". The
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
170 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
171 int af_inputlen(af_stream_t* s, int len);
7649
90e16aa8ae5f Adding functionality for adding filters during execution
anders
parents: 7615
diff changeset
172
7598
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
173 /* 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
174 a certain output length OUT but with the following three constraints:
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
175 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
176 block length
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
177 2. OUT <= max_outsize, where max_outsize is the maximum possible
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
178 output block length
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
179 3. If possible OUT >= len.
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
180 Return -1 in case of error */
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
181 int af_calc_insize_constrained(af_stream_t* s, int len,
48f8c731efb5 Adding function for estimating required buffer length
anders
parents: 7591
diff changeset
182 int max_outsize,int max_insize);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
183
7665
fbd5445cc853 Adding function for calculating the delay caused by the filters
anders
parents: 7649
diff changeset
184 /* Calculate the total delay caused by the filters */
fbd5445cc853 Adding function for calculating the delay caused by the filters
anders
parents: 7649
diff changeset
185 double af_calc_delay(af_stream_t* s);
7568
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 // Helper functions and macros used inside the audio filters
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
188
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
189 /* 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
190 called from inside filters */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
191 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
192
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
193 /* Helper function used to calculate the exact buffer length needed
7589
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
194 when buffers are resized. The returned length is >= than what is
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
195 needed */
443b440798a5 Redesign of buffer length calculation
anders
parents: 7571
diff changeset
196 int af_lencalc(frac_t mul, af_data_t* data);
7568
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
197
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
198 /* 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
199 filter doesn't operate on the incoming buffer this macro must be
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
200 called to ensure the buffer is big enough. */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
201 #define RESIZE_LOCAL_BUFFER(a,d)\
7591
5ef4d009f950 Correcting error in macro
anders
parents: 7589
diff changeset
202 ((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
203
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
204 #ifndef min
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
205 #define min(a,b)(((a)>(b))?(b):(a))
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
206 #endif
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
207
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
208 #ifndef max
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
209 #define max(a,b)(((a)>(b))?(a):(b))
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
210 #endif
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
211
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
212 #endif