bitrate.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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-2001 *
  9. * by the XIPHOPHORUS Company http://www.xiph.org/ *
  10. * *
  11. ********************************************************************
  12. function: bitrate tracking and management
  13. last mod: $Id: bitrate.h,v 1.6 2002/06/28 22:19:35 xiphmont Exp $
  14. ********************************************************************/
  15. #ifndef _V_BITRATE_H_
  16. #define _V_BITRATE_H_
  17. #include "vorbis/codec.h"
  18. #include "codec_internal.h"
  19. #include "os.h"
  20. /* encode side bitrate tracking */
  21. typedef struct bitrate_manager_state {
  22. ogg_uint32_t *queue_binned;
  23. ogg_uint32_t *queue_actual;
  24. int queue_size;
  25. int queue_head;
  26. int queue_bins;
  27. long *avg_binacc;
  28. int avg_center;
  29. int avg_tail;
  30. ogg_uint32_t avg_centeracc;
  31. ogg_uint32_t avg_sampleacc;
  32. ogg_uint32_t avg_sampledesired;
  33. ogg_uint32_t avg_centerdesired;
  34. long *minmax_binstack;
  35. long *minmax_posstack;
  36. long *minmax_limitstack;
  37. long minmax_stackptr;
  38. long minmax_acctotal;
  39. int minmax_tail;
  40. ogg_uint32_t minmax_sampleacc;
  41. ogg_uint32_t minmax_sampledesired;
  42. int next_to_flush;
  43. int last_to_flush;
  44. double avgfloat;
  45. /* unfortunately, we need to hold queued packet data somewhere */
  46. oggpack_buffer *packetbuffers;
  47. ogg_packet *packets;
  48. } bitrate_manager_state;
  49. typedef struct bitrate_manager_info{
  50. /* detailed bitrate management setup */
  51. double queue_avg_time;
  52. double queue_avg_center;
  53. double queue_minmax_time;
  54. double queue_hardmin;
  55. double queue_hardmax;
  56. double queue_avgmin;
  57. double queue_avgmax;
  58. double avgfloat_downslew_max;
  59. double avgfloat_upslew_max;
  60. } bitrate_manager_info;
  61. extern void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bs);
  62. extern void vorbis_bitrate_clear(bitrate_manager_state *bs);
  63. extern int vorbis_bitrate_managed(vorbis_block *vb);
  64. extern int vorbis_bitrate_addblock(vorbis_block *vb);
  65. extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, ogg_packet *op);
  66. #endif