annotate libaf/af.h @ 7570:a0bba1b6c458

FreeBSD fix
author nexus
date Tue, 01 Oct 2002 09:20:27 +0000
parents d08513b9fed6
children 8819fdf88b5d
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
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
24 /* Audio filter information not specific for current instance, but for
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
25 a specific filter */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
26 typedef struct af_info_s
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
27 {
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
28 const char *info;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
29 const char *name;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
30 const char *author;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
31 const char *comment;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
32 int (*open)(struct af_instance_s* vf);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
33 } af_info_t;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
34
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
35 // Linked list of audio filters
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
36 typedef struct af_instance_s
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
37 {
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
38 af_info_t* info;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
39 int (*control)(struct af_instance_s* af, int cmd, void* arg);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
40 void (*uninit)(struct af_instance_s* af);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
41 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
42 void* setup; // setup data for this specific instance and filter
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
43 af_data_t* data; // configuration for outgoing data stream
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
44 struct af_instance_s* next;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
45 struct af_instance_s* prev;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
46 frac_t mul; /* length multiplier: how much does this instance change
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
47 the length of the buffer. */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
48 }af_instance_t;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
49
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
50 /*********************************************
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
51 // Control parameters
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
52 */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
53
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
54 /* The control system is divided into 3 levels
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
55 mandatory calls - all filters must answer to all of these
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
56 optional calls - are optional
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
57 filter specific calls - applies only to some filters
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
58 */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
59
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
60 #define AF_CONTROL_MANDATORY_BASE 0
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
61 #define AF_CONTROL_OPTIONAL_BASE 100
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
62 #define AF_CONTROL_FILTER_SPECIFIC_BASE 200
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
63
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
64 // MANDATORY CALLS
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
65
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
66 /* Reinitialize filter. The optional argument contains the new
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
67 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
68 support the new format the struct should be changed and AF_FALSE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
69 should be returned. If the incoming and outgoing data streams are
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
70 identical the filter can return AF_DETACH. This will remove the
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
71 filter. */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
72 #define AF_CONTROL_REINIT 1 + AF_CONTROL_MANDATORY_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
73
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
74 // OPTIONAL CALLS
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
75
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
76
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
77 // FILTER SPECIFIC CALLS
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
78
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
79 // Set output rate in resample
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
80 #define AF_CONTROL_RESAMPLE 1 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
81 // Set output format in format
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
82 #define AF_CONTROL_FORMAT 2 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
83 // Set number of output channels in channels
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
84 #define AF_CONTROL_CHANNELS 3 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
85 // Set delay length in delay
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
86 #define AF_CONTROL_SET_DELAY_LEN 4 + AF_CONTROL_FILTER_SPECIFIC_BASE
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
87 /*********************************************
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
88 // Return values
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_DETACH 2
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
92 #define AF_OK 1
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
93 #define AF_TRUE 1
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
94 #define AF_FALSE 0
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
95 #define AF_UNKNOWN -1
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
96 #define AF_ERROR -2
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
97 #define AF_NA -3
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
98
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
99
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
100 /*********************************************
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
101 // Command line configuration switches
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
102 */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
103 typedef struct af_cfg_s{
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
104 int rate;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
105 int format;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
106 int bps;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
107 int force;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
108 char** list;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
109 }af_cfg_t;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
110
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
111
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
112 // Export functions
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
113
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
114 /* Init read configuration and create filter list accordingly. In and
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
115 out contains the format of the current movie and the formate of the
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
116 prefered output respectively */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
117 int af_init(af_data_t* in, af_data_t* out);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
118 // Uninit and remove all filters
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
119 void af_uninit();
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
120 // Filter data chunk through the filters in the list
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
121 af_data_t* af_play(af_data_t* data);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
122 /* Calculate how long the output from the filters will be given the
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
123 input length "len" */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
124 int af_outputlen(int len);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
125 /* 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
126 certain output length, i.e. the return value of this function is
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
127 the input length required to produce the output length "len". */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
128 int af_inputlen(int len);
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 // Helper functions and macros used inside the audio filters
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
133
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
134 /* 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
135 called from inside filters */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
136 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
137
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
138 /* Helper function used to calculate the exact buffer length needed
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
139 when buffers are resized */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
140 int af_lencalc(frac_t mul, int len);
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
141
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
142 /* 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
143 filter doesn't operate on the incoming buffer this macro must be
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
144 called to ensure the buffer is big enough. */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
145 #define RESIZE_LOCAL_BUFFER(a,d)\
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
146 ((af->data->len < af_lencalc(af->mul,data->len))?af_resize_local_buffer(af,data):AF_OK)
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
147
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
148 #ifndef min
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
149 #define min(a,b)(((a)>(b))?(b):(a))
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
150 #endif
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
151
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
152 #ifndef max
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
153 #define max(a,b)(((a)>(b))?(a):(b))
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
154 #endif
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
155
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
156 #ifndef AUDIO_FILTER
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
157 extern af_cfg_t af_cfg;
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
158 #endif /* AUDIO_FILTER */
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
159
d08513b9fed6 Adding new audio output filter layer libaf
anders
parents:
diff changeset
160 #endif