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 |
