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