18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/********************************************************************
28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *                                                                  *
38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *                                                                  *
88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * by the Xiph.Org Foundation http://www.xiph.org/                  *
108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *                                                                  *
118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ********************************************************************
128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels function: vorbis encode-engine setup
148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels last mod: $Id: vorbisenc.h 17021 2010-03-24 09:29:41Z xiphmont $
158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ********************************************************************/
178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** \file
198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Libvorbisenc is a convenient API for setting up an encoding
208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * environment using libvorbis. Libvorbisenc encapsulates the
218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * actions needed to set up the encoder properly.
228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifndef _OV_ENC_H_
258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define _OV_ENC_H_
268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifdef __cplusplus
288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern "C"
298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels{
308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif /* __cplusplus */
318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "codec.h"
338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * This is the primary function within libvorbisenc for setting up managed
368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * bitrate modes.
378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Before this function is called, the \ref vorbis_info
398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * struct should be initialized by using vorbis_info_init() from the libvorbis
408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * API.  After encoding, vorbis_info_clear() should be called.
418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * The max_bitrate, nominal_bitrate, and min_bitrate settings are used to set
438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * constraints for the encoded file.  This function uses these settings to
448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * select the appropriate encoding mode and set it up.
458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param vi               Pointer to an initialized \ref vorbis_info struct.
478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param channels         The number of channels to be encoded.
488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param rate             The sampling rate of the source audio.
498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param max_bitrate      Desired maximum bitrate (limit). -1 indicates unset.
508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param nominal_bitrate  Desired average, or central, bitrate. -1 indicates unset.
518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param min_bitrate      Desired minimum bitrate. -1 indicates unset.
528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \return Zero for success, and negative values for failure.
548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval 0          Success.
568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EFAULT  Internal logic fault; indicates a bug or heap/stack corruption.
578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EINVAL  Invalid setup request, eg, out of range argument.
588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EIMPL   Unimplemented mode; unable to comply with bitrate request.
598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_encode_init(vorbis_info *vi,
618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                              long channels,
628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                              long rate,
638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                              long max_bitrate,
658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                              long nominal_bitrate,
668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                              long min_bitrate);
678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * This function performs step-one of a three-step bitrate-managed encode
708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * setup.  It functions similarly to the one-step setup performed by \ref
718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * vorbis_encode_init but allows an application to make further encode setup
728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * tweaks using \ref vorbis_encode_ctl before finally calling \ref
738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * vorbis_encode_setup_init to complete the setup process.
748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Before this function is called, the \ref vorbis_info struct should be
768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * initialized by using vorbis_info_init() from the libvorbis API.  After
778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * encoding, vorbis_info_clear() should be called.
788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * The max_bitrate, nominal_bitrate, and min_bitrate settings are used to set
808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * constraints for the encoded file.  This function uses these settings to
818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * select the appropriate encoding mode and set it up.
828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param vi                Pointer to an initialized vorbis_info struct.
848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param channels          The number of channels to be encoded.
858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param rate              The sampling rate of the source audio.
868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param max_bitrate       Desired maximum bitrate (limit). -1 indicates unset.
878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param nominal_bitrate   Desired average, or central, bitrate. -1 indicates unset.
888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param min_bitrate       Desired minimum bitrate. -1 indicates unset.
898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \return Zero for success, and negative for failure.
918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval 0           Success
938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EFAULT   Internal logic fault; indicates a bug or heap/stack corruption.
948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EINVAL   Invalid setup request, eg, out of range argument.
958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EIMPL    Unimplemented mode; unable to comply with bitrate request.
968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_encode_setup_managed(vorbis_info *vi,
988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                       long channels,
998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                       long rate,
1008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                       long max_bitrate,
1028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                       long nominal_bitrate,
1038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                       long min_bitrate);
1048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
1068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * This function performs step-one of a three-step variable bitrate
1078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * (quality-based) encode setup.  It functions similarly to the one-step setup
1088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * performed by \ref vorbis_encode_init_vbr() but allows an application to
1098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * make further encode setup tweaks using \ref vorbis_encode_ctl() before
1108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * finally calling \ref vorbis_encode_setup_init to complete the setup
1118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * process.
1128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Before this function is called, the \ref vorbis_info struct should be
1148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * initialized by using \ref vorbis_info_init() from the libvorbis API.  After
1158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * encoding, vorbis_info_clear() should be called.
1168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param vi        Pointer to an initialized vorbis_info struct.
1188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param channels  The number of channels to be encoded.
1198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param rate      The sampling rate of the source audio.
1208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param quality   Desired quality level, currently from -0.1 to 1.0 (lo to hi).
1218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \return Zero for success, and negative values for failure.
1238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval  0          Success
1258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval  OV_EFAULT  Internal logic fault; indicates a bug or heap/stack corruption.
1268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval  OV_EINVAL  Invalid setup request, eg, out of range argument.
1278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval  OV_EIMPL   Unimplemented mode; unable to comply with quality level request.
1288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
1298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_encode_setup_vbr(vorbis_info *vi,
1308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                  long channels,
1318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                  long rate,
1328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                  float quality
1348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                  );
1358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
1378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * This is the primary function within libvorbisenc for setting up variable
1388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * bitrate ("quality" based) modes.
1398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Before this function is called, the vorbis_info struct should be
1428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * initialized by using vorbis_info_init() from the libvorbis API. After
1438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * encoding, vorbis_info_clear() should be called.
1448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param vi           Pointer to an initialized vorbis_info struct.
1468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param channels     The number of channels to be encoded.
1478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param rate         The sampling rate of the source audio.
1488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param base_quality Desired quality level, currently from -0.1 to 1.0 (lo to hi).
1498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \return Zero for success, or a negative number for failure.
1528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval 0           Success
1548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EFAULT   Internal logic fault; indicates a bug or heap/stack corruption.
1558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EINVAL   Invalid setup request, eg, out of range argument.
1568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EIMPL    Unimplemented mode; unable to comply with quality level request.
1578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
1588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_encode_init_vbr(vorbis_info *vi,
1598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                  long channels,
1608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                  long rate,
1618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                  float base_quality
1638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                  );
1648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
1668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * This function performs the last stage of three-step encoding setup, as
1678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * described in the API overview under managed bitrate modes.
1688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Before this function is called, the \ref vorbis_info struct should be
1708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * initialized by using vorbis_info_init() from the libvorbis API, one of
1718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \ref vorbis_encode_setup_managed() or \ref vorbis_encode_setup_vbr() called to
1728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * initialize the high-level encoding setup, and \ref vorbis_encode_ctl()
1738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * called if necessary to make encoding setup changes.
1748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * vorbis_encode_setup_init() finalizes the highlevel encoding structure into
1758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * a complete encoding setup after which the application may make no further
1768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * setup changes.
1778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * After encoding, vorbis_info_clear() should be called.
1798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param vi Pointer to an initialized \ref vorbis_info struct.
1818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \return Zero for success, and negative values for failure.
1838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval  0           Success.
1858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval  OV_EFAULT  Internal logic fault; indicates a bug or heap/stack corruption.
1868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EINVAL   Attempt to use vorbis_encode_setup_init() without first
1888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * calling one of vorbis_encode_setup_managed() or vorbis_encode_setup_vbr() to
1898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * initialize the high-level encoding setup
1908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
1918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
1928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_encode_setup_init(vorbis_info *vi);
1938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
1958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * This function implements a generic interface to miscellaneous encoder
1968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * settings similar to the classic UNIX 'ioctl()' system call.  Applications
1978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * may use vorbis_encode_ctl() to query or set bitrate management or quality
1988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * mode details by using one of several \e request arguments detailed below.
1998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * vorbis_encode_ctl() must be called after one of
2008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * vorbis_encode_setup_managed() or vorbis_encode_setup_vbr().  When used
2018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * to modify settings, \ref vorbis_encode_ctl() must be called before \ref
2028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * vorbis_encode_setup_init().
2038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param vi      Pointer to an initialized vorbis_info struct.
2058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param number Specifies the desired action; See \ref encctlcodes "the list
2078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * of available requests".
2088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \param arg void * pointing to a data structure matching the request
2108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * argument.
2118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval 0          Success. Any further return information (such as the result of a
2138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * query) is placed into the storage pointed to by *arg.
2148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EINVAL  Invalid argument, or an attempt to modify a setting after
2168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * calling vorbis_encode_setup_init().
2178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \retval OV_EIMPL   Unimplemented or unknown request
2198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
2208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg);
2218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
2238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \deprecated This is a deprecated interface. Please use vorbis_encode_ctl()
2248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * with the \ref ovectl_ratemanage2_arg struct and \ref
2258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * OV_ECTL_RATEMANAGE2_GET and \ref OV_ECTL_RATEMANAGE2_SET calls in new code.
2268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * The \ref ovectl_ratemanage_arg structure is used with vorbis_encode_ctl()
2288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * and the \ref OV_ECTL_RATEMANAGE_GET, \ref OV_ECTL_RATEMANAGE_SET, \ref
2298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * OV_ECTL_RATEMANAGE_AVG, \ref OV_ECTL_RATEMANAGE_HARD calls in order to
2308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * query and modify specifics of the encoder's bitrate management
2318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * configuration.
2328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*/
2338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsstruct ovectl_ratemanage_arg {
2348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int    management_active; /**< nonzero if bitrate management is active*/
2358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** hard lower limit (in kilobits per second) below which the stream bitrate
2368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    will never be allowed for any given bitrate_hard_window seconds of time.*/
2378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long   bitrate_hard_min;
2388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** hard upper limit (in kilobits per second) above which the stream bitrate
2398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    will never be allowed for any given bitrate_hard_window seconds of time.*/
2408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long   bitrate_hard_max;
2418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** the window period (in seconds) used to regulate the hard bitrate minimum
2428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    and maximum*/
2438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  double bitrate_hard_window;
2448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** soft lower limit (in kilobits per second) below which the average bitrate
2458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    tracker will start nudging the bitrate higher.*/
2468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long   bitrate_av_lo;
2478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** soft upper limit (in kilobits per second) above which the average bitrate
2488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    tracker will start nudging the bitrate lower.*/
2498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long   bitrate_av_hi;
2508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** the window period (in seconds) used to regulate the average bitrate
2518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    minimum and maximum.*/
2528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  double bitrate_av_window;
2538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** Regulates the relative centering of the average and hard windows; in
2548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    libvorbis 1.0 and 1.0.1, the hard window regulation overlapped but
2558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    followed the average window regulation. In libvorbis 1.1 a bit-reservoir
2568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    interface replaces the old windowing interface; the older windowing
2578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    interface is simulated and this field has no effect.*/
2588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  double bitrate_av_window_center;
2598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels};
2608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
2628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \name struct ovectl_ratemanage2_arg
2638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * The ovectl_ratemanage2_arg structure is used with vorbis_encode_ctl() and
2658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * the OV_ECTL_RATEMANAGE2_GET and OV_ECTL_RATEMANAGE2_SET calls in order to
2668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * query and modify specifics of the encoder's bitrate management
2678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * configuration.
2688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*/
2708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsstruct ovectl_ratemanage2_arg {
2718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int    management_active; /**< nonzero if bitrate management is active */
2728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** Lower allowed bitrate limit in kilobits per second */
2738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long   bitrate_limit_min_kbps;
2748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** Upper allowed bitrate limit in kilobits per second */
2758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long   bitrate_limit_max_kbps;
2768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long   bitrate_limit_reservoir_bits; /**<Size of the bitrate reservoir in bits */
2778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** Regulates the bitrate reservoir's preferred fill level in a range from 0.0
2788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * to 1.0; 0.0 tries to bank bits to buffer against future bitrate spikes, 1.0
2798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * buffers against future sudden drops in instantaneous bitrate. Default is
2808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * 0.1
2818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
2828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  double bitrate_limit_reservoir_bias;
2838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** Average bitrate setting in kilobits per second */
2848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long   bitrate_average_kbps;
2858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/** Slew rate limit setting for average bitrate adjustment; sets the minimum
2868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  time in seconds the bitrate tracker may swing from one extreme to the
2878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  other when boosting or damping average bitrate.
2888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
2898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  double bitrate_average_damping;
2908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels};
2918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
2948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \name vorbis_encode_ctl() codes
2958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \anchor encctlcodes
2978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
2988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * These values are passed as the \c number parameter of vorbis_encode_ctl().
2998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * The type of the referent of that function's \c arg pointer depends on these
3008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * codes.
3018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
3028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/*@{*/
3038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
3058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Query the current encoder bitrate management setting.
3068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *Argument: <tt>struct ovectl_ratemanage2_arg *</tt>
3088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Used to query the current encoder bitrate management setting. Also used to
3108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * initialize fields of an ovectl_ratemanage2_arg structure for use with
3118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \ref OV_ECTL_RATEMANAGE2_SET.
3128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
3138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_RATEMANAGE2_GET      0x14
3148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
3168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Set the current encoder bitrate management settings.
3178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>struct ovectl_ratemanage2_arg *</tt>
3198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Used to set the current encoder bitrate management settings to the values
3218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * listed in the ovectl_ratemanage2_arg. Passing a NULL pointer will disable
3228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * bitrate management.
3238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*/
3248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_RATEMANAGE2_SET      0x15
3258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
3278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Returns the current encoder hard-lowpass setting (kHz) in the double
3288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * pointed to by arg.
3298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>double *</tt>
3318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*/
3328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_LOWPASS_GET          0x20
3338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
3358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  Sets the encoder hard-lowpass to the value (kHz) pointed to by arg. Valid
3368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  lowpass settings range from 2 to 99.
3378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>double *</tt>
3398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*/
3408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_LOWPASS_SET          0x21
3418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
3438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  Returns the current encoder impulse block setting in the double pointed
3448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  to by arg.
3458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>double *</tt>
3478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*/
3488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_IBLOCK_GET           0x30
3498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
3518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  Sets the impulse block bias to the the value pointed to by arg.
3528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>double *</tt>
3548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  Valid range is -15.0 to 0.0 [default]. A negative impulse block bias will
3568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  direct to encoder to use more bits when incoding short blocks that contain
3578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  strong impulses, thus improving the accuracy of impulse encoding.
3588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
3598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_IBLOCK_SET           0x31
3608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
3628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  Returns the current encoder coupling setting in the int pointed
3638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  to by arg.
3648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>int *</tt>
3668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*/
3678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_COUPLING_GET         0x40
3688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
3708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  Enables/disables channel coupling in multichannel encoding according to arg.
3718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>int *</tt>
3738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  Zero disables channel coupling for multichannel inputs, nonzer enables
3758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  channel coupling.  Setting has no effect on monophonic encoding or
3768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  multichannel counts that do not offer coupling.  At present, coupling is
3778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  available for stereo and 5.1 encoding.
3788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
3798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_COUPLING_SET         0x41
3808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  /* deprecated rate management supported only for compatibility */
3828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
3848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Old interface to querying bitrate management settings.
3858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Deprecated after move to bit-reservoir style management in 1.1 rendered
3878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * this interface partially obsolete.
3888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_GET instead.
3908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
3928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
3938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_RATEMANAGE_GET       0x10
3948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
3958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Old interface to modifying bitrate management settings.
3968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
3978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  deprecated after move to bit-reservoir style management in 1.1 rendered
3988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  this interface partially obsolete.
3998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
4008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead.
4018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
4028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
4038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
4048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_RATEMANAGE_SET       0x11
4058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
4068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Old interface to setting average-bitrate encoding mode.
4078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
4088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Deprecated after move to bit-reservoir style management in 1.1 rendered
4098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * this interface partially obsolete.
4108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
4118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead.
4128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
4138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
4148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
4158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_RATEMANAGE_AVG       0x12
4168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/**
4178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Old interface to setting bounded-bitrate encoding modes.
4188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
4198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * deprecated after move to bit-reservoir style management in 1.1 rendered
4208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * this interface partially obsolete.
4218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
4228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *  \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead.
4238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *
4248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
4258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels */
4268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ECTL_RATEMANAGE_HARD      0x13
4278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
4288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/*@}*/
4298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
4308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
4318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
4328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifdef __cplusplus
4338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels}
4348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif /* __cplusplus */
4358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
4368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif
437