ao_pulse: support native mute control
[mplayer.git] / libaf / control.h
blobb99d50bcb4248ab739c56c85a30cec13938bc728
1 /*
2 * This file is part of MPlayer.
4 * MPlayer is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * MPlayer is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 #ifndef MPLAYER_CONTROL_H
20 #define MPLAYER_CONTROL_H
22 #include <sys/types.h>
24 /*********************************************
25 // Control info struct.
27 // This struct is the argument in a info call to a filter.
30 // Argument types
31 #define AF_CONTROL_TYPE_BOOL (0x0<<0)
32 #define AF_CONTROL_TYPE_CHAR (0x1<<0)
33 #define AF_CONTROL_TYPE_INT (0x2<<0)
34 #define AF_CONTROL_TYPE_FLOAT (0x3<<0)
35 #define AF_CONTROL_TYPE_STRUCT (0x4<<0)
36 #define AF_CONTROL_TYPE_SPECIAL (0x5<<0) // a pointer to a function for example
37 #define AF_CONTROL_TYPE_MASK (0x7<<0)
38 // Argument geometry
39 #define AF_CONTROL_GEOM_SCALAR (0x0<<3)
40 #define AF_CONTROL_GEOM_ARRAY (0x1<<3)
41 #define AF_CONTROL_GEOM_MATRIX (0x2<<3)
42 #define AF_CONTROL_GEOM_MASK (0x3<<3)
43 // Argument properties
44 #define AF_CONTROL_PROP_READ (0x0<<5) // The argument can be read
45 #define AF_CONTROL_PROP_WRITE (0x1<<5) // The argument can be written
46 #define AF_CONTROL_PROP_SAVE (0x2<<5) // Can be saved
47 #define AF_CONTROL_PROP_RUNTIME (0x4<<5) // Acessable during execution
48 #define AF_CONTROL_PROP_CHANNEL (0x8<<5) // Argument is set per channel
49 #define AF_CONTROL_PROP_MASK (0xF<<5)
51 typedef struct af_control_info_s{
52 int def; // Control enumrification
53 char* name; // Name of argument
54 char* info; // Description of what it does
55 int flags; // Flags as defined above
56 float max; // Max and min value
57 float min; // (only aplicable on float and int)
58 int xdim; // 1st dimension
59 int ydim; // 2nd dimension (=0 for everything except matrix)
60 size_t sz; // Size of argument in bytes
61 int ch; // Channel number (for future use)
62 void* arg; // Data (for future use)
63 }af_control_info_t;
66 /*********************************************
67 // Extended control used with arguments that operates on only one
68 // channel at the time
70 typedef struct af_control_ext_s{
71 void* arg; // Argument
72 int ch; // Chanel number
73 }af_control_ext_t;
75 /*********************************************
76 // Control parameters
79 /* The control system is divided into 3 levels
80 mandatory calls - all filters must answer to all of these
81 optional calls - are optional
82 filter specific calls - applies only to some filters
85 #define AF_CONTROL_MANDATORY 0x10000000
86 #define AF_CONTROL_OPTIONAL 0x20000000
87 #define AF_CONTROL_FILTER_SPECIFIC 0x40000000
89 // MANDATORY CALLS
91 /* Reinitialize filter. The optional argument contains the new
92 configuration in form of a af_data_t struct. If the filter does not
93 support the new format the struct should be changed and AF_FALSE
94 should be returned. If the incoming and outgoing data streams are
95 identical the filter can return AF_DETACH. This will remove the
96 filter. */
97 #define AF_CONTROL_REINIT 0x00000100 | AF_CONTROL_MANDATORY
99 // OPTIONAL CALLS
101 /* Called just after creation with the af_cfg for the stream in which
102 the filter resides as input parameter this call can be used by the
103 filter to initialize itself */
104 #define AF_CONTROL_POST_CREATE 0x00000100 | AF_CONTROL_OPTIONAL
106 // Called just before destruction of a filter
107 #define AF_CONTROL_PRE_DESTROY 0x00000200 | AF_CONTROL_OPTIONAL
109 /* Commandline parameters. If there were any commandline parameters
110 for this specific filter, they will be given as a char* in the
111 argument */
112 #define AF_CONTROL_COMMAND_LINE 0x00000300 | AF_CONTROL_OPTIONAL
115 // FILTER SPECIFIC CALLS
117 // Basic operations: These can be ored with any of the below calls
118 // Set argument
119 #define AF_CONTROL_SET 0x00000000
120 // Get argument
121 #define AF_CONTROL_GET 0x00000001
122 // Get info about the control, i.e fill in everything except argument
123 #define AF_CONTROL_INFO 0x00000002
125 // Resample
127 // Set output rate in resample
128 #define AF_CONTROL_RESAMPLE_RATE 0x00000100 | AF_CONTROL_FILTER_SPECIFIC
130 // Enable sloppy resampling
131 #define AF_CONTROL_RESAMPLE_SLOPPY 0x00000200 | AF_CONTROL_FILTER_SPECIFIC
133 // Set resampling accuracy
134 #define AF_CONTROL_RESAMPLE_ACCURACY 0x00000300 | AF_CONTROL_FILTER_SPECIFIC
136 // Format
138 #define AF_CONTROL_FORMAT_FMT 0x00000400 | AF_CONTROL_FILTER_SPECIFIC
140 // Channels
142 // Set number of output channels in channels
143 #define AF_CONTROL_CHANNELS 0x00000600 | AF_CONTROL_FILTER_SPECIFIC
145 // Set number of channel routes
146 #define AF_CONTROL_CHANNELS_ROUTES 0x00000700 | AF_CONTROL_FILTER_SPECIFIC
148 // Set channel routing pair, arg is int[2] and ch is used
149 #define AF_CONTROL_CHANNELS_ROUTING 0x00000800 | AF_CONTROL_FILTER_SPECIFIC
151 // Set nuber of channel routing pairs, arg is int*
152 #define AF_CONTROL_CHANNELS_NR 0x00000900 | AF_CONTROL_FILTER_SPECIFIC
154 // Set make af_channels into a router
155 #define AF_CONTROL_CHANNELS_ROUTER 0x00000A00 | AF_CONTROL_FILTER_SPECIFIC
157 // Volume
159 // Turn volume control on and off, arg is int*
160 #define AF_CONTROL_VOLUME_ON_OFF 0x00000B00 | AF_CONTROL_FILTER_SPECIFIC
162 // Turn soft clipping of the volume on and off, arg is binary
163 #define AF_CONTROL_VOLUME_SOFTCLIP 0x00000C00 | AF_CONTROL_FILTER_SPECIFIC
165 // Set volume level, arg is a float* with the volume for all the channels
166 #define AF_CONTROL_VOLUME_LEVEL 0x00000D00 | AF_CONTROL_FILTER_SPECIFIC
168 // Probed power level for all channels, arg is a float*
169 #define AF_CONTROL_VOLUME_PROBE 0x00000E00 | AF_CONTROL_FILTER_SPECIFIC
171 // Maximum probed power level for all channels, arg is a float*
172 #define AF_CONTROL_VOLUME_PROBE_MAX 0x00000F00 | AF_CONTROL_FILTER_SPECIFIC
174 // Compressor/expander
176 // Turn compressor/expander on and off
177 #define AF_CONTROL_COMP_ON_OFF 0x00001000 | AF_CONTROL_FILTER_SPECIFIC
179 // Compression/expansion threshold [dB]
180 #define AF_CONTROL_COMP_THRESH 0x00001100 | AF_CONTROL_FILTER_SPECIFIC
182 // Compression/expansion attack time [ms]
183 #define AF_CONTROL_COMP_ATTACK 0x00001200 | AF_CONTROL_FILTER_SPECIFIC
185 // Compression/expansion release time [ms]
186 #define AF_CONTROL_COMP_RELEASE 0x00001300 | AF_CONTROL_FILTER_SPECIFIC
188 // Compression/expansion gain level [dB]
189 #define AF_CONTROL_COMP_RATIO 0x00001400 | AF_CONTROL_FILTER_SPECIFIC
191 // Noise gate
193 // Turn noise gate on an off
194 #define AF_CONTROL_GATE_ON_OFF 0x00001500 | AF_CONTROL_FILTER_SPECIFIC
196 // Noise gate threshold [dB]
197 #define AF_CONTROL_GATE_THRESH 0x00001600 | AF_CONTROL_FILTER_SPECIFIC
199 // Noise gate attack time [ms]
200 #define AF_CONTROL_GATE_ATTACK 0x00001700 | AF_CONTROL_FILTER_SPECIFIC
202 // Noise gate release time [ms]
203 #define AF_CONTROL_GATE_RELEASE 0x00001800 | AF_CONTROL_FILTER_SPECIFIC
205 // Noise gate release range level [dB]
206 #define AF_CONTROL_GATE_RANGE 0x00001900 | AF_CONTROL_FILTER_SPECIFIC
208 // Pan
210 // Pan levels, arg is a control_ext with a float*
211 #define AF_CONTROL_PAN_LEVEL 0x00001A00 | AF_CONTROL_FILTER_SPECIFIC
213 // Number of outputs from pan, arg is int*
214 #define AF_CONTROL_PAN_NOUT 0x00001B00 | AF_CONTROL_FILTER_SPECIFIC
216 // Balance, arg is float*; range -1 (left) to 1 (right), 0 center
217 #define AF_CONTROL_PAN_BALANCE 0x00001C00 | AF_CONTROL_FILTER_SPECIFIC
219 // Set equalizer gain, arg is a control_ext with a float*
220 #define AF_CONTROL_EQUALIZER_GAIN 0x00001D00 | AF_CONTROL_FILTER_SPECIFIC
223 // Delay length in ms, arg is a control_ext with a float*
224 #define AF_CONTROL_DELAY_LEN 0x00001E00 | AF_CONTROL_FILTER_SPECIFIC
227 // Subwoofer
229 // Channel number which to insert the filtered data, arg in int*
230 #define AF_CONTROL_SUB_CH 0x00001F00 | AF_CONTROL_FILTER_SPECIFIC
232 // Cutoff frequency [Hz] for lowpass filter, arg is float*
233 #define AF_CONTROL_SUB_FC 0x00002000 | AF_CONTROL_FILTER_SPECIFIC
236 // Export
237 #define AF_CONTROL_EXPORT_SZ 0x00003000 | AF_CONTROL_FILTER_SPECIFIC
240 // ExtraStereo Multiplier
241 #define AF_CONTROL_ES_MUL 0x00003100 | AF_CONTROL_FILTER_SPECIFIC
244 // Center
246 // Channel number which to inster the filtered data, arg in int*
247 #define AF_CONTROL_CENTER_CH 0x00003200 | AF_CONTROL_FILTER_SPECIFIC
250 // SineSuppress
251 #define AF_CONTROL_SS_FREQ 0x00003300 | AF_CONTROL_FILTER_SPECIFIC
252 #define AF_CONTROL_SS_DECAY 0x00003400 | AF_CONTROL_FILTER_SPECIFIC
254 #define AF_CONTROL_PLAYBACK_SPEED 0x00003500 | AF_CONTROL_FILTER_SPECIFIC
255 #define AF_CONTROL_SCALETEMPO_AMOUNT 0x00003600 | AF_CONTROL_FILTER_SPECIFIC
257 #endif /* MPLAYER_CONTROL_H */