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-2007 * 98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * by the Xiph.Org Foundation http://www.xiph.org/ * 108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * * 118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ******************************************************************** 128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels function: bitrate tracking and management 148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels last mod: $Id: bitrate.h 13293 2007-07-24 00:09:47Z xiphmont $ 158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ********************************************************************/ 178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifndef _V_BITRATE_H_ 198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define _V_BITRATE_H_ 208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "vorbis/codec.h" 228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "codec_internal.h" 238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "os.h" 248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* encode side bitrate tracking */ 268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct bitrate_manager_state { 278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int managed; 288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long avg_reservoir; 308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long minmax_reservoir; 318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long avg_bitsper; 328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long min_bitsper; 338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long max_bitsper; 348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long short_per_long; 368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels double avgfloat; 378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels vorbis_block *vb; 398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels int choice; 408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} bitrate_manager_state; 418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct bitrate_manager_info{ 438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long avg_rate; 448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long min_rate; 458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long max_rate; 468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels long reservoir_bits; 478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels double reservoir_bias; 488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels double slew_damp; 508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} bitrate_manager_info; 528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bs); 548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void vorbis_bitrate_clear(bitrate_manager_state *bs); 558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_bitrate_managed(vorbis_block *vb); 568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_bitrate_addblock(vorbis_block *vb); 578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, ogg_packet *op); 588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif 60