cannam@86: /******************************************************************** cannam@86: * * cannam@86: * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * cannam@86: * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * cannam@86: * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * cannam@86: * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * cannam@86: * * cannam@86: * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * cannam@86: * by the Xiph.Org Foundation http://www.xiph.org/ * cannam@86: * * cannam@86: ******************************************************************** cannam@86: cannam@86: function: bitrate tracking and management cannam@86: last mod: $Id: bitrate.h 13293 2007-07-24 00:09:47Z xiphmont $ cannam@86: cannam@86: ********************************************************************/ cannam@86: cannam@86: #ifndef _V_BITRATE_H_ cannam@86: #define _V_BITRATE_H_ cannam@86: cannam@86: #include "vorbis/codec.h" cannam@86: #include "codec_internal.h" cannam@86: #include "os.h" cannam@86: cannam@86: /* encode side bitrate tracking */ cannam@86: typedef struct bitrate_manager_state { cannam@86: int managed; cannam@86: cannam@86: long avg_reservoir; cannam@86: long minmax_reservoir; cannam@86: long avg_bitsper; cannam@86: long min_bitsper; cannam@86: long max_bitsper; cannam@86: cannam@86: long short_per_long; cannam@86: double avgfloat; cannam@86: cannam@86: vorbis_block *vb; cannam@86: int choice; cannam@86: } bitrate_manager_state; cannam@86: cannam@86: typedef struct bitrate_manager_info{ cannam@86: long avg_rate; cannam@86: long min_rate; cannam@86: long max_rate; cannam@86: long reservoir_bits; cannam@86: double reservoir_bias; cannam@86: cannam@86: double slew_damp; cannam@86: cannam@86: } bitrate_manager_info; cannam@86: cannam@86: extern void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bs); cannam@86: extern void vorbis_bitrate_clear(bitrate_manager_state *bs); cannam@86: extern int vorbis_bitrate_managed(vorbis_block *vb); cannam@86: extern int vorbis_bitrate_addblock(vorbis_block *vb); cannam@86: extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, ogg_packet *op); cannam@86: cannam@86: #endif