Mercurial > hg > sv-dependency-builds
comparison win32-mingw/include/vorbis/vorbisenc.h @ 3:6c505a35919a
Add some MinGW builds
author | Chris Cannam |
---|---|
date | Wed, 20 Mar 2013 13:49:36 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:cc5d363db385 | 3:6c505a35919a |
---|---|
1 /******************************************************************** | |
2 * * | |
3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * | |
4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * | |
5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * | |
6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * | |
7 * * | |
8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * | |
9 * by the Xiph.Org Foundation http://www.xiph.org/ * | |
10 * * | |
11 ******************************************************************** | |
12 | |
13 function: vorbis encode-engine setup | |
14 last mod: $Id: vorbisenc.h 17021 2010-03-24 09:29:41Z xiphmont $ | |
15 | |
16 ********************************************************************/ | |
17 | |
18 /** \file | |
19 * Libvorbisenc is a convenient API for setting up an encoding | |
20 * environment using libvorbis. Libvorbisenc encapsulates the | |
21 * actions needed to set up the encoder properly. | |
22 */ | |
23 | |
24 #ifndef _OV_ENC_H_ | |
25 #define _OV_ENC_H_ | |
26 | |
27 #ifdef __cplusplus | |
28 extern "C" | |
29 { | |
30 #endif /* __cplusplus */ | |
31 | |
32 #include "codec.h" | |
33 | |
34 /** | |
35 * This is the primary function within libvorbisenc for setting up managed | |
36 * bitrate modes. | |
37 * | |
38 * Before this function is called, the \ref vorbis_info | |
39 * struct should be initialized by using vorbis_info_init() from the libvorbis | |
40 * API. After encoding, vorbis_info_clear() should be called. | |
41 * | |
42 * The max_bitrate, nominal_bitrate, and min_bitrate settings are used to set | |
43 * constraints for the encoded file. This function uses these settings to | |
44 * select the appropriate encoding mode and set it up. | |
45 * | |
46 * \param vi Pointer to an initialized \ref vorbis_info struct. | |
47 * \param channels The number of channels to be encoded. | |
48 * \param rate The sampling rate of the source audio. | |
49 * \param max_bitrate Desired maximum bitrate (limit). -1 indicates unset. | |
50 * \param nominal_bitrate Desired average, or central, bitrate. -1 indicates unset. | |
51 * \param min_bitrate Desired minimum bitrate. -1 indicates unset. | |
52 * | |
53 * \return Zero for success, and negative values for failure. | |
54 * | |
55 * \retval 0 Success. | |
56 * \retval OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption. | |
57 * \retval OV_EINVAL Invalid setup request, eg, out of range argument. | |
58 * \retval OV_EIMPL Unimplemented mode; unable to comply with bitrate request. | |
59 */ | |
60 extern int vorbis_encode_init(vorbis_info *vi, | |
61 long channels, | |
62 long rate, | |
63 | |
64 long max_bitrate, | |
65 long nominal_bitrate, | |
66 long min_bitrate); | |
67 | |
68 /** | |
69 * This function performs step-one of a three-step bitrate-managed encode | |
70 * setup. It functions similarly to the one-step setup performed by \ref | |
71 * vorbis_encode_init but allows an application to make further encode setup | |
72 * tweaks using \ref vorbis_encode_ctl before finally calling \ref | |
73 * vorbis_encode_setup_init to complete the setup process. | |
74 * | |
75 * Before this function is called, the \ref vorbis_info struct should be | |
76 * initialized by using vorbis_info_init() from the libvorbis API. After | |
77 * encoding, vorbis_info_clear() should be called. | |
78 * | |
79 * The max_bitrate, nominal_bitrate, and min_bitrate settings are used to set | |
80 * constraints for the encoded file. This function uses these settings to | |
81 * select the appropriate encoding mode and set it up. | |
82 * | |
83 * \param vi Pointer to an initialized vorbis_info struct. | |
84 * \param channels The number of channels to be encoded. | |
85 * \param rate The sampling rate of the source audio. | |
86 * \param max_bitrate Desired maximum bitrate (limit). -1 indicates unset. | |
87 * \param nominal_bitrate Desired average, or central, bitrate. -1 indicates unset. | |
88 * \param min_bitrate Desired minimum bitrate. -1 indicates unset. | |
89 * | |
90 * \return Zero for success, and negative for failure. | |
91 * | |
92 * \retval 0 Success | |
93 * \retval OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption. | |
94 * \retval OV_EINVAL Invalid setup request, eg, out of range argument. | |
95 * \retval OV_EIMPL Unimplemented mode; unable to comply with bitrate request. | |
96 */ | |
97 extern int vorbis_encode_setup_managed(vorbis_info *vi, | |
98 long channels, | |
99 long rate, | |
100 | |
101 long max_bitrate, | |
102 long nominal_bitrate, | |
103 long min_bitrate); | |
104 | |
105 /** | |
106 * This function performs step-one of a three-step variable bitrate | |
107 * (quality-based) encode setup. It functions similarly to the one-step setup | |
108 * performed by \ref vorbis_encode_init_vbr() but allows an application to | |
109 * make further encode setup tweaks using \ref vorbis_encode_ctl() before | |
110 * finally calling \ref vorbis_encode_setup_init to complete the setup | |
111 * process. | |
112 * | |
113 * Before this function is called, the \ref vorbis_info struct should be | |
114 * initialized by using \ref vorbis_info_init() from the libvorbis API. After | |
115 * encoding, vorbis_info_clear() should be called. | |
116 * | |
117 * \param vi Pointer to an initialized vorbis_info struct. | |
118 * \param channels The number of channels to be encoded. | |
119 * \param rate The sampling rate of the source audio. | |
120 * \param quality Desired quality level, currently from -0.1 to 1.0 (lo to hi). | |
121 * | |
122 * \return Zero for success, and negative values for failure. | |
123 * | |
124 * \retval 0 Success | |
125 * \retval OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption. | |
126 * \retval OV_EINVAL Invalid setup request, eg, out of range argument. | |
127 * \retval OV_EIMPL Unimplemented mode; unable to comply with quality level request. | |
128 */ | |
129 extern int vorbis_encode_setup_vbr(vorbis_info *vi, | |
130 long channels, | |
131 long rate, | |
132 | |
133 float quality | |
134 ); | |
135 | |
136 /** | |
137 * This is the primary function within libvorbisenc for setting up variable | |
138 * bitrate ("quality" based) modes. | |
139 * | |
140 * | |
141 * Before this function is called, the vorbis_info struct should be | |
142 * initialized by using vorbis_info_init() from the libvorbis API. After | |
143 * encoding, vorbis_info_clear() should be called. | |
144 * | |
145 * \param vi Pointer to an initialized vorbis_info struct. | |
146 * \param channels The number of channels to be encoded. | |
147 * \param rate The sampling rate of the source audio. | |
148 * \param base_quality Desired quality level, currently from -0.1 to 1.0 (lo to hi). | |
149 * | |
150 * | |
151 * \return Zero for success, or a negative number for failure. | |
152 * | |
153 * \retval 0 Success | |
154 * \retval OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption. | |
155 * \retval OV_EINVAL Invalid setup request, eg, out of range argument. | |
156 * \retval OV_EIMPL Unimplemented mode; unable to comply with quality level request. | |
157 */ | |
158 extern int vorbis_encode_init_vbr(vorbis_info *vi, | |
159 long channels, | |
160 long rate, | |
161 | |
162 float base_quality | |
163 ); | |
164 | |
165 /** | |
166 * This function performs the last stage of three-step encoding setup, as | |
167 * described in the API overview under managed bitrate modes. | |
168 * | |
169 * Before this function is called, the \ref vorbis_info struct should be | |
170 * initialized by using vorbis_info_init() from the libvorbis API, one of | |
171 * \ref vorbis_encode_setup_managed() or \ref vorbis_encode_setup_vbr() called to | |
172 * initialize the high-level encoding setup, and \ref vorbis_encode_ctl() | |
173 * called if necessary to make encoding setup changes. | |
174 * vorbis_encode_setup_init() finalizes the highlevel encoding structure into | |
175 * a complete encoding setup after which the application may make no further | |
176 * setup changes. | |
177 * | |
178 * After encoding, vorbis_info_clear() should be called. | |
179 * | |
180 * \param vi Pointer to an initialized \ref vorbis_info struct. | |
181 * | |
182 * \return Zero for success, and negative values for failure. | |
183 * | |
184 * \retval 0 Success. | |
185 * \retval OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption. | |
186 * | |
187 * \retval OV_EINVAL Attempt to use vorbis_encode_setup_init() without first | |
188 * calling one of vorbis_encode_setup_managed() or vorbis_encode_setup_vbr() to | |
189 * initialize the high-level encoding setup | |
190 * | |
191 */ | |
192 extern int vorbis_encode_setup_init(vorbis_info *vi); | |
193 | |
194 /** | |
195 * This function implements a generic interface to miscellaneous encoder | |
196 * settings similar to the classic UNIX 'ioctl()' system call. Applications | |
197 * may use vorbis_encode_ctl() to query or set bitrate management or quality | |
198 * mode details by using one of several \e request arguments detailed below. | |
199 * vorbis_encode_ctl() must be called after one of | |
200 * vorbis_encode_setup_managed() or vorbis_encode_setup_vbr(). When used | |
201 * to modify settings, \ref vorbis_encode_ctl() must be called before \ref | |
202 * vorbis_encode_setup_init(). | |
203 * | |
204 * \param vi Pointer to an initialized vorbis_info struct. | |
205 * | |
206 * \param number Specifies the desired action; See \ref encctlcodes "the list | |
207 * of available requests". | |
208 * | |
209 * \param arg void * pointing to a data structure matching the request | |
210 * argument. | |
211 * | |
212 * \retval 0 Success. Any further return information (such as the result of a | |
213 * query) is placed into the storage pointed to by *arg. | |
214 * | |
215 * \retval OV_EINVAL Invalid argument, or an attempt to modify a setting after | |
216 * calling vorbis_encode_setup_init(). | |
217 * | |
218 * \retval OV_EIMPL Unimplemented or unknown request | |
219 */ | |
220 extern int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg); | |
221 | |
222 /** | |
223 * \deprecated This is a deprecated interface. Please use vorbis_encode_ctl() | |
224 * with the \ref ovectl_ratemanage2_arg struct and \ref | |
225 * OV_ECTL_RATEMANAGE2_GET and \ref OV_ECTL_RATEMANAGE2_SET calls in new code. | |
226 * | |
227 * The \ref ovectl_ratemanage_arg structure is used with vorbis_encode_ctl() | |
228 * and the \ref OV_ECTL_RATEMANAGE_GET, \ref OV_ECTL_RATEMANAGE_SET, \ref | |
229 * OV_ECTL_RATEMANAGE_AVG, \ref OV_ECTL_RATEMANAGE_HARD calls in order to | |
230 * query and modify specifics of the encoder's bitrate management | |
231 * configuration. | |
232 */ | |
233 struct ovectl_ratemanage_arg { | |
234 int management_active; /**< nonzero if bitrate management is active*/ | |
235 /** hard lower limit (in kilobits per second) below which the stream bitrate | |
236 will never be allowed for any given bitrate_hard_window seconds of time.*/ | |
237 long bitrate_hard_min; | |
238 /** hard upper limit (in kilobits per second) above which the stream bitrate | |
239 will never be allowed for any given bitrate_hard_window seconds of time.*/ | |
240 long bitrate_hard_max; | |
241 /** the window period (in seconds) used to regulate the hard bitrate minimum | |
242 and maximum*/ | |
243 double bitrate_hard_window; | |
244 /** soft lower limit (in kilobits per second) below which the average bitrate | |
245 tracker will start nudging the bitrate higher.*/ | |
246 long bitrate_av_lo; | |
247 /** soft upper limit (in kilobits per second) above which the average bitrate | |
248 tracker will start nudging the bitrate lower.*/ | |
249 long bitrate_av_hi; | |
250 /** the window period (in seconds) used to regulate the average bitrate | |
251 minimum and maximum.*/ | |
252 double bitrate_av_window; | |
253 /** Regulates the relative centering of the average and hard windows; in | |
254 libvorbis 1.0 and 1.0.1, the hard window regulation overlapped but | |
255 followed the average window regulation. In libvorbis 1.1 a bit-reservoir | |
256 interface replaces the old windowing interface; the older windowing | |
257 interface is simulated and this field has no effect.*/ | |
258 double bitrate_av_window_center; | |
259 }; | |
260 | |
261 /** | |
262 * \name struct ovectl_ratemanage2_arg | |
263 * | |
264 * The ovectl_ratemanage2_arg structure is used with vorbis_encode_ctl() and | |
265 * the OV_ECTL_RATEMANAGE2_GET and OV_ECTL_RATEMANAGE2_SET calls in order to | |
266 * query and modify specifics of the encoder's bitrate management | |
267 * configuration. | |
268 * | |
269 */ | |
270 struct ovectl_ratemanage2_arg { | |
271 int management_active; /**< nonzero if bitrate management is active */ | |
272 /** Lower allowed bitrate limit in kilobits per second */ | |
273 long bitrate_limit_min_kbps; | |
274 /** Upper allowed bitrate limit in kilobits per second */ | |
275 long bitrate_limit_max_kbps; | |
276 long bitrate_limit_reservoir_bits; /**<Size of the bitrate reservoir in bits */ | |
277 /** Regulates the bitrate reservoir's preferred fill level in a range from 0.0 | |
278 * to 1.0; 0.0 tries to bank bits to buffer against future bitrate spikes, 1.0 | |
279 * buffers against future sudden drops in instantaneous bitrate. Default is | |
280 * 0.1 | |
281 */ | |
282 double bitrate_limit_reservoir_bias; | |
283 /** Average bitrate setting in kilobits per second */ | |
284 long bitrate_average_kbps; | |
285 /** Slew rate limit setting for average bitrate adjustment; sets the minimum | |
286 * time in seconds the bitrate tracker may swing from one extreme to the | |
287 * other when boosting or damping average bitrate. | |
288 */ | |
289 double bitrate_average_damping; | |
290 }; | |
291 | |
292 | |
293 /** | |
294 * \name vorbis_encode_ctl() codes | |
295 * | |
296 * \anchor encctlcodes | |
297 * | |
298 * These values are passed as the \c number parameter of vorbis_encode_ctl(). | |
299 * The type of the referent of that function's \c arg pointer depends on these | |
300 * codes. | |
301 */ | |
302 /*@{*/ | |
303 | |
304 /** | |
305 * Query the current encoder bitrate management setting. | |
306 * | |
307 *Argument: <tt>struct ovectl_ratemanage2_arg *</tt> | |
308 * | |
309 * Used to query the current encoder bitrate management setting. Also used to | |
310 * initialize fields of an ovectl_ratemanage2_arg structure for use with | |
311 * \ref OV_ECTL_RATEMANAGE2_SET. | |
312 */ | |
313 #define OV_ECTL_RATEMANAGE2_GET 0x14 | |
314 | |
315 /** | |
316 * Set the current encoder bitrate management settings. | |
317 * | |
318 * Argument: <tt>struct ovectl_ratemanage2_arg *</tt> | |
319 * | |
320 * Used to set the current encoder bitrate management settings to the values | |
321 * listed in the ovectl_ratemanage2_arg. Passing a NULL pointer will disable | |
322 * bitrate management. | |
323 */ | |
324 #define OV_ECTL_RATEMANAGE2_SET 0x15 | |
325 | |
326 /** | |
327 * Returns the current encoder hard-lowpass setting (kHz) in the double | |
328 * pointed to by arg. | |
329 * | |
330 * Argument: <tt>double *</tt> | |
331 */ | |
332 #define OV_ECTL_LOWPASS_GET 0x20 | |
333 | |
334 /** | |
335 * Sets the encoder hard-lowpass to the value (kHz) pointed to by arg. Valid | |
336 * lowpass settings range from 2 to 99. | |
337 * | |
338 * Argument: <tt>double *</tt> | |
339 */ | |
340 #define OV_ECTL_LOWPASS_SET 0x21 | |
341 | |
342 /** | |
343 * Returns the current encoder impulse block setting in the double pointed | |
344 * to by arg. | |
345 * | |
346 * Argument: <tt>double *</tt> | |
347 */ | |
348 #define OV_ECTL_IBLOCK_GET 0x30 | |
349 | |
350 /** | |
351 * Sets the impulse block bias to the the value pointed to by arg. | |
352 * | |
353 * Argument: <tt>double *</tt> | |
354 * | |
355 * Valid range is -15.0 to 0.0 [default]. A negative impulse block bias will | |
356 * direct to encoder to use more bits when incoding short blocks that contain | |
357 * strong impulses, thus improving the accuracy of impulse encoding. | |
358 */ | |
359 #define OV_ECTL_IBLOCK_SET 0x31 | |
360 | |
361 /** | |
362 * Returns the current encoder coupling setting in the int pointed | |
363 * to by arg. | |
364 * | |
365 * Argument: <tt>int *</tt> | |
366 */ | |
367 #define OV_ECTL_COUPLING_GET 0x40 | |
368 | |
369 /** | |
370 * Enables/disables channel coupling in multichannel encoding according to arg. | |
371 * | |
372 * Argument: <tt>int *</tt> | |
373 * | |
374 * Zero disables channel coupling for multichannel inputs, nonzer enables | |
375 * channel coupling. Setting has no effect on monophonic encoding or | |
376 * multichannel counts that do not offer coupling. At present, coupling is | |
377 * available for stereo and 5.1 encoding. | |
378 */ | |
379 #define OV_ECTL_COUPLING_SET 0x41 | |
380 | |
381 /* deprecated rate management supported only for compatibility */ | |
382 | |
383 /** | |
384 * Old interface to querying bitrate management settings. | |
385 * | |
386 * Deprecated after move to bit-reservoir style management in 1.1 rendered | |
387 * this interface partially obsolete. | |
388 | |
389 * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_GET instead. | |
390 * | |
391 * Argument: <tt>struct ovectl_ratemanage_arg *</tt> | |
392 */ | |
393 #define OV_ECTL_RATEMANAGE_GET 0x10 | |
394 /** | |
395 * Old interface to modifying bitrate management settings. | |
396 * | |
397 * deprecated after move to bit-reservoir style management in 1.1 rendered | |
398 * this interface partially obsolete. | |
399 * | |
400 * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead. | |
401 * | |
402 * Argument: <tt>struct ovectl_ratemanage_arg *</tt> | |
403 */ | |
404 #define OV_ECTL_RATEMANAGE_SET 0x11 | |
405 /** | |
406 * Old interface to setting average-bitrate encoding mode. | |
407 * | |
408 * Deprecated after move to bit-reservoir style management in 1.1 rendered | |
409 * this interface partially obsolete. | |
410 * | |
411 * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead. | |
412 * | |
413 * Argument: <tt>struct ovectl_ratemanage_arg *</tt> | |
414 */ | |
415 #define OV_ECTL_RATEMANAGE_AVG 0x12 | |
416 /** | |
417 * Old interface to setting bounded-bitrate encoding modes. | |
418 * | |
419 * deprecated after move to bit-reservoir style management in 1.1 rendered | |
420 * this interface partially obsolete. | |
421 * | |
422 * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead. | |
423 * | |
424 * Argument: <tt>struct ovectl_ratemanage_arg *</tt> | |
425 */ | |
426 #define OV_ECTL_RATEMANAGE_HARD 0x13 | |
427 | |
428 /*@}*/ | |
429 | |
430 | |
431 | |
432 #ifdef __cplusplus | |
433 } | |
434 #endif /* __cplusplus */ | |
435 | |
436 #endif |