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-2007 * 9 * by the Xiph.Org Foundation https://xiph.org/ * 10 * * 11 ******************************************************************** 12 13 function: bitrate tracking and management 14 15 ********************************************************************/ 16 17 #ifndef _vorbis_bitrate_h_ 18 #define _vorbis_bitrate_h_ 19 20 #include "vorbis_codec.h" 21 #include "vorbis_codec_internal.h" 22 #include "vorbis_os.h" 23 24 /* encode side bitrate tracking */ 25 typedef struct bitrate_manager_state { 26 int managed; 27 28 long avg_reservoir; 29 long minmax_reservoir; 30 long avg_bitsper; 31 long min_bitsper; 32 long max_bitsper; 33 34 long short_per_long; 35 double avgfloat; 36 37 vorbis_block *vb; 38 int choice; 39 } bitrate_manager_state; 40 41 typedef struct bitrate_manager_info{ 42 long avg_rate; 43 long min_rate; 44 long max_rate; 45 long reservoir_bits; 46 double reservoir_bias; 47 48 double slew_damp; 49 50 } bitrate_manager_info; 51 52 extern void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bs); 53 extern void vorbis_bitrate_clear(bitrate_manager_state *bs); 54 extern int vorbis_bitrate_managed(vorbis_block *vb); 55 extern int vorbis_bitrate_addblock(vorbis_block *vb); 56 extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, ogg_packet *op); 57 58 #endif 59