aboutsummaryrefslogtreecommitdiffhomepage
path: root/libaf/control.h
blob: dcbb2ddba0ed090218a9efc0fc4e4024e59f0784 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
#ifndef __af_control_h
#define __af_control_h

/*********************************************
// Control info struct. 
//
// This struct is the argument in a info call to a filter.
*/

// Argument types 
#define AF_CONTROL_TYPE_BOOL	(0x0<<0)
#define AF_CONTROL_TYPE_CHAR	(0x1<<0)
#define AF_CONTROL_TYPE_INT	(0x2<<0)
#define AF_CONTROL_TYPE_FLOAT	(0x3<<0)
#define AF_CONTROL_TYPE_STRUCT	(0x4<<0)
#define AF_CONTROL_TYPE_SPECIAL	(0x5<<0) // a pointer to a function for example
#define AF_CONTROL_TYPE_MASK	(0x7<<0)
// Argument geometry
#define AF_CONTROL_GEOM_SCALAR	(0x0<<3)
#define AF_CONTROL_GEOM_ARRAY	(0x1<<3)
#define AF_CONTROL_GEOM_MATRIX	(0x2<<3)
#define AF_CONTROL_GEOM_MASK	(0x3<<3)
// Argument properties
#define AF_CONTROL_PROP_READ	(0x0<<5) // The argument can be read
#define AF_CONTROL_PROP_WRITE	(0x1<<5) // The argument can be written
#define AF_CONTROL_PROP_SAVE	(0x2<<5) // Can be saved
#define AF_CONTROL_PROP_RUNTIME	(0x4<<5) // Acessable during execution
#define AF_CONTROL_PROP_CHANNEL (0x8<<5) // Argument is set per channel
#define AF_CONTROL_PROP_MASK	(0xF<<5)

typedef struct af_control_info_s{
  int	 def;	// Control enumrification
  char*	 name; 	// Name of argument
  char*	 info;	// Description of what it does
  int 	 flags;	// Flags as defined above	
  float	 max;	// Max and min value 
  float	 min;	// (only aplicable on float and int) 
  int	 xdim;	// 1st dimension
  int	 ydim;	// 2nd dimension (=0 for everything except matrix)
  size_t sz;	// Size of argument in bytes
  int	 ch;	// Channel number (for future use)
  void*  arg;	// Data (for future use)
}af_control_info_t;


/*********************************************
// Extended control used with arguments that operates on only one
// channel at the time
*/
typedef struct af_control_ext_s{
  void* arg;	// Argument
  int	ch;	// Chanel number
}af_control_ext_t;

/*********************************************
// Control parameters 
*/

/* The control system is divided into 3 levels 
   mandatory calls 	 - all filters must answer to all of these
   optional calls  	 - are optional
   filter specific calls - applies only to some filters
*/

#define AF_CONTROL_MANDATORY		0x10000000
#define AF_CONTROL_OPTIONAL		0x20000000
#define AF_CONTROL_FILTER_SPECIFIC	0x40000000

// MANDATORY CALLS

/* Reinitialize filter. The optional argument contains the new
   configuration in form of a af_data_t struct. If the filter does not
   support the new format the struct should be changed and AF_FALSE
   should be returned. If the incoming and outgoing data streams are
   identical the filter can return AF_DETACH. This will remove the
   filter. */
#define AF_CONTROL_REINIT  		0x00000100 | AF_CONTROL_MANDATORY

// OPTIONAL CALLS

/* Called just after creation with the af_cfg for the stream in which
   the filter resides as input parameter this call can be used by the
   filter to initialize itself */
#define AF_CONTROL_POST_CREATE 		0x00000100 | AF_CONTROL_OPTIONAL

// Called just before destruction of a filter
#define AF_CONTROL_PRE_DESTROY 		0x00000200 | AF_CONTROL_OPTIONAL

/* Commandline parameters. If there were any commandline parameters
   for this specific filter, they will be given as a char* in the
   argument */
#define AF_CONTROL_COMMAND_LINE		0x00000300 | AF_CONTROL_OPTIONAL


// FILTER SPECIFIC CALLS

// Basic operations: These can be ored with any of the below calls
// Set argument 
#define AF_CONTROL_SET			0x00000000
// Get argument
#define AF_CONTROL_GET			0x00000001
// Get info about the control, i.e fill in everything except argument
#define AF_CONTROL_INFO			0x00000002  

// Resample

// Set output rate in resample
#define AF_CONTROL_RESAMPLE_RATE	0x00000100 | AF_CONTROL_FILTER_SPECIFIC

// Enable sloppy resampling
#define AF_CONTROL_RESAMPLE_SLOPPY	0x00000200 | AF_CONTROL_FILTER_SPECIFIC

// Set resampling accuracy
#define AF_CONTROL_RESAMPLE_ACCURACY	0x00000300 | AF_CONTROL_FILTER_SPECIFIC

// Format

#define AF_CONTROL_FORMAT_FMT		0x00000400 | AF_CONTROL_FILTER_SPECIFIC

// Channels

// Set number of output channels in channels
#define AF_CONTROL_CHANNELS		0x00000600 | AF_CONTROL_FILTER_SPECIFIC

// Set number of channel routes
#define AF_CONTROL_CHANNELS_ROUTES	0x00000700 | AF_CONTROL_FILTER_SPECIFIC

// Set channel routing pair, arg is int[2] and ch is used
#define AF_CONTROL_CHANNELS_ROUTING	0x00000800 | AF_CONTROL_FILTER_SPECIFIC

// Set nuber of channel routing pairs, arg is int*
#define AF_CONTROL_CHANNELS_NR		0x00000900 | AF_CONTROL_FILTER_SPECIFIC

// Set make af_channels into a router
#define AF_CONTROL_CHANNELS_ROUTER	0x00000A00 | AF_CONTROL_FILTER_SPECIFIC
	
// Volume 

// Turn volume control on and off, arg is int*
#define AF_CONTROL_VOLUME_ON_OFF	0x00000B00 | AF_CONTROL_FILTER_SPECIFIC

// Turn soft clipping of the volume on and off, arg is binary
#define AF_CONTROL_VOLUME_SOFTCLIP	0x00000C00 | AF_CONTROL_FILTER_SPECIFIC

// Set volume level, arg is a float* with the volume for all the channels
#define AF_CONTROL_VOLUME_LEVEL		0x00000D00 | AF_CONTROL_FILTER_SPECIFIC

// Probed power level for all channels, arg is a float* 
#define AF_CONTROL_VOLUME_PROBE		0x00000E00 | AF_CONTROL_FILTER_SPECIFIC

// Maximum probed power level for all channels, arg is a float* 
#define AF_CONTROL_VOLUME_PROBE_MAX	0x00000F00 | AF_CONTROL_FILTER_SPECIFIC

// Compressor/expander

// Turn compressor/expander on and off
#define AF_CONTROL_COMP_ON_OFF	 	0x00001000 | AF_CONTROL_FILTER_SPECIFIC

// Compression/expansion threshold [dB]
#define AF_CONTROL_COMP_THRESH	 	0x00001100 | AF_CONTROL_FILTER_SPECIFIC

// Compression/expansion attack time [ms]
#define AF_CONTROL_COMP_ATTACK	 	0x00001200 | AF_CONTROL_FILTER_SPECIFIC

// Compression/expansion release time [ms]
#define AF_CONTROL_COMP_RELEASE 	0x00001300 | AF_CONTROL_FILTER_SPECIFIC

// Compression/expansion gain level [dB]
#define AF_CONTROL_COMP_RATIO	 	0x00001400 | AF_CONTROL_FILTER_SPECIFIC

// Noise gate

// Turn noise gate on an off
#define AF_CONTROL_GATE_ON_OFF	 	0x00001500 | AF_CONTROL_FILTER_SPECIFIC

// Noise gate threshold [dB] 
#define AF_CONTROL_GATE_THRESH	 	0x00001600 | AF_CONTROL_FILTER_SPECIFIC

// Noise gate attack time [ms]
#define AF_CONTROL_GATE_ATTACK	 	0x00001700 | AF_CONTROL_FILTER_SPECIFIC

// Noise gate release time [ms] 
#define AF_CONTROL_GATE_RELEASE 	0x00001800 | AF_CONTROL_FILTER_SPECIFIC

// Noise gate release range level [dB]
#define AF_CONTROL_GATE_RANGE	 	0x00001900 | AF_CONTROL_FILTER_SPECIFIC

// Pan

// Pan levels, arg is a control_ext with a float* 
#define AF_CONTROL_PAN_LEVEL	 	0x00001A00 | AF_CONTROL_FILTER_SPECIFIC

// Number of outputs from pan, arg is int*
#define AF_CONTROL_PAN_NOUT	 	0x00001B00 | AF_CONTROL_FILTER_SPECIFIC
 

// Set equalizer gain, arg is a control_ext with a float* 
#define AF_CONTROL_EQUALIZER_GAIN 	0x00001C00 | AF_CONTROL_FILTER_SPECIFIC


// Delay length in ms, arg is a control_ext with a float*
#define AF_CONTROL_DELAY_LEN		0x00001D00 | AF_CONTROL_FILTER_SPECIFIC


// Subwoofer

// Channel number which to insert the filtered data, arg in int*
#define AF_CONTROL_SUB_CH		0x00001E00 | AF_CONTROL_FILTER_SPECIFIC

// Cutoff frequency [Hz] for lowpass filter, arg is float*
#define AF_CONTROL_SUB_FC		0x00001F00 | AF_CONTROL_FILTER_SPECIFIC


// Export
#define AF_CONTROL_EXPORT_SZ            0x00002000 | AF_CONTROL_FILTER_SPECIFIC


// ExtraStereo Multiplier
#define AF_CONTROL_ES_MUL		0x00002100 | AF_CONTROL_FILTER_SPECIFIC


// Center

// Channel number which to inster the filtered data, arg in int*
#define AF_CONTROL_CENTER_CH		0x00002200 | AF_CONTROL_FILTER_SPECIFIC

#endif /*__af_control_h */