Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1 | pmbaty | 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 |