formatBitstream.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:4k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #ifndef _FORMAT_BITSTREAM_H
  2. #define _FORMAT_BITSTREAM_H
  3. /*********************************************************************
  4.   Copyright (c) 1995 ISO/IEC JTC1 SC29 WG1, All Rights Reserved
  5.   formatBitstream.h
  6. **********************************************************************/
  7. /*
  8.   Revision History:
  9.   Date        Programmer                Comment
  10.   ==========  ========================= ===============================
  11.   1995/09/06  mc@fivebats.com           created
  12. */
  13. #include "machine.h"
  14. #ifndef MAX_CHANNELS
  15. #define MAX_CHANNELS 2
  16. #endif
  17. #ifndef MAX_GRANULES
  18. #define MAX_GRANULES 2
  19. #endif
  20. /*
  21.   This is the prototype for the function pointer you must
  22.   provide to write bits to the bitstream. It should write
  23.   'length' bits from 'value,' msb first. Bits in value are
  24.   assumed to be right-justified.
  25. */
  26. void putMyBits( u_int value, u_int length );
  27. /*
  28.   A BitstreamElement contains encoded data
  29.   to be written to the bitstream.
  30.   'length' bits of 'value' will be written to
  31.   the bitstream msb-first.
  32. */
  33. typedef struct
  34. {
  35.     u_int value;
  36.     u_short length;
  37. } BF_BitstreamElement;
  38. /*
  39.   A BitstreamPart contains a group
  40.   of 'nrEntries' of BitstreamElements.
  41.   Each BitstreamElement will be written
  42.   to the bitstream in the order it appears
  43.   in the 'element' array.
  44. */
  45. typedef struct
  46. {
  47.     u_int              nrEntries;
  48.     BF_BitstreamElement *element;
  49. } BF_BitstreamPart;
  50. /*
  51.   This structure contains all the information needed by the
  52.   bitstream formatter to encode one frame of data. You must
  53.   fill this out and provide a pointer to it when you call
  54.   the formatter.
  55.   Maintainers: If you add or remove part of the side
  56.   information, you will have to update the routines that
  57.   make local copies of that information (in formatBitstream.c)
  58. */
  59. typedef struct BF_FrameData
  60. {
  61.     int              frameLength;
  62.     int              nGranules;
  63.     int              nChannels;
  64.     BF_BitstreamPart *header;
  65.     BF_BitstreamPart *frameSI;
  66.     BF_BitstreamPart *channelSI[MAX_CHANNELS];
  67.     BF_BitstreamPart *spectrumSI[MAX_GRANULES][MAX_CHANNELS];
  68.     BF_BitstreamPart *scaleFactors[MAX_GRANULES][MAX_CHANNELS];
  69.     BF_BitstreamPart *codedData[MAX_GRANULES][MAX_CHANNELS];
  70.     BF_BitstreamPart *userSpectrum[MAX_GRANULES][MAX_CHANNELS];
  71.     BF_BitstreamPart *userFrameData;
  72. } BF_FrameData;
  73. /*
  74.   This structure contains information provided by
  75.   the bitstream formatter. You can use this to
  76.   check to see if your code agrees with the results
  77.   of the call to the formatter.
  78. */
  79. typedef struct BF_FrameResults
  80. {
  81.     int SILength;
  82.     int mainDataLength;
  83.     int nextBackPtr;
  84. } BF_FrameResults;
  85. /*
  86.   public functions in formatBitstream.c
  87. */
  88. /* Initialize the bitstream */
  89. void InitFormatBitStream(void);
  90. /* count the bits in a BitstreamPart */
  91. int  BF_PartLength( BF_BitstreamPart *part );
  92. /* encode a frame of audio and write it to your bitstream */
  93. void BF_BitstreamFrame( BF_FrameData *frameInfo, BF_FrameResults *results );
  94. /* write any remaining frames to the bitstream, padding with zeros */
  95. void BF_FlushBitstream( BF_FrameData *frameInfo, BF_FrameResults *results );
  96. typedef struct BF_PartHolder
  97. {
  98.     int              max_elements;
  99.     BF_BitstreamPart *part;
  100. } BF_PartHolder;
  101. BF_PartHolder *BF_newPartHolder( int max_elements );
  102. BF_PartHolder *BF_resizePartHolder( BF_PartHolder *oldPH, int max_elements );
  103. BF_PartHolder *BF_addElement( BF_PartHolder *thePH, BF_BitstreamElement *theElement );
  104. BF_PartHolder *BF_addEntry( BF_PartHolder *thePH, u_int value, u_int length );
  105. BF_PartHolder *BF_NewHolderFromBitstreamPart( BF_BitstreamPart *thePart );
  106. BF_PartHolder *BF_LoadHolderFromBitstreamPart( BF_PartHolder *theHolder, BF_BitstreamPart *thePart );
  107. BF_PartHolder *BF_freePartHolder( BF_PartHolder *thePH );
  108. #endif  /* #ifndef _FORMAT_BITSTREAM_H */