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 _V_BITRATE_H_ |
18 | #define _V_BITRATE_H_ |
19 | |
20 | #include "vorbis/codec.h" |
21 | #include "codec_internal.h" |
22 | #include "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 | |