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
|
#ifndef __audio_plugin_h__
#define __audio_plugin_h__
// Functions supplied by plugins
typedef struct ao_plugin_functions_s
{
ao_info_t *info;
int (*control)(int cmd, void *arg);
int (*init)();
void (*uninit)();
void (*reset)();
int (*play)();
} ao_plugin_functions_t;
// Global data for all audio plugins
typedef struct ao_plugin_data_s
{
void* data; /* current data block read only ok to change */
int len; /* setup and current buffer length */
int rate; /* setup data rate */
int channels; /* setup number of channels */
int format; /* setup format */
double sz_mult; /* Buffer size multiplier */
double sz_fix; /* Fix (as in static) extra buffer size */
float delay_mult; /* Delay multiplier */
float delay_fix; /* Fix delay */
}ao_plugin_data_t;
extern volatile ao_plugin_data_t ao_plugin_data;
// Plugin confuguration data set by cmd-line parameters
typedef struct ao_plugin_cfg_s
{
char* plugin_list; // List of used plugins read from cfg
int pl_format_type; // Output format
int pl_delay_len; // Number of samples to delay sound output
int pl_resample_fout; // Output frequency from resampling
int pl_volume_volume; // Initial volume setting
float pl_extrastereo_mul; // Stereo enhancer multiplier
int pl_volume_softclip; // Enable soft clipping
} ao_plugin_cfg_t;
extern ao_plugin_cfg_t ao_plugin_cfg;
// Configuration defaults
#define CFG_DEFAULTS { \
NULL, \
AFMT_S16_LE, \
0, \
48000, \
101, \
2.5, \
0 \
};
// This block should not be available in the pl_xxxx files
// due to compilation issues
#ifndef PLUGIN
#define NPL 8+1 // Number of PLugins ( +1 list ends with NULL )
// List of plugins
extern ao_plugin_functions_t audio_plugin_delay;
extern ao_plugin_functions_t audio_plugin_format;
extern ao_plugin_functions_t audio_plugin_surround;
extern ao_plugin_functions_t audio_plugin_resample;
extern ao_plugin_functions_t audio_plugin_volume;
extern ao_plugin_functions_t audio_plugin_extrastereo;
extern ao_plugin_functions_t audio_plugin_volnorm;
extern ao_plugin_functions_t audio_plugin_eq;
#define AO_PLUGINS { \
&audio_plugin_delay, \
&audio_plugin_format, \
&audio_plugin_surround, \
&audio_plugin_resample, \
&audio_plugin_volume, \
&audio_plugin_extrastereo, \
&audio_plugin_volnorm, \
&audio_plugin_eq, \
NULL \
}
#endif /* PLUGIN */
// Control parameters used by the plugins
#define AOCONTROL_PLUGIN_SET_LEN 1 // All plugins must respond to this parameter
#define AOCONTROL_PLUGIN_ES_SET 4 // set extra stereo coefficient
#define AOCONTROL_PLUGIN_ES_GET 5 // get extra stereo coefficient
#endif
|