mirror of https://github.com/mpv-player/mpv
219 lines
7.2 KiB
C
219 lines
7.2 KiB
C
#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
|
|
|
|
// Set output format bits per sample
|
|
#define AF_CONTROL_FORMAT_BPS 0x00000400 | AF_CONTROL_FILTER_SPECIFIC
|
|
|
|
// Set output format sample format
|
|
#define AF_CONTROL_FORMAT_FMT 0x00000500 | 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
|
|
|
|
|
|
#endif /*__af_control_h */
|