formatBitstream.h
资源名称:NETVIDEO.rar [点击查看]
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:4k
源码类别:
流媒体/Mpeg4/MP4
开发平台:
Visual C++
- #ifndef _FORMAT_BITSTREAM_H
- #define _FORMAT_BITSTREAM_H
- /*********************************************************************
- Copyright (c) 1995 ISO/IEC JTC1 SC29 WG1, All Rights Reserved
- formatBitstream.h
- **********************************************************************/
- /*
- Revision History:
- Date Programmer Comment
- ========== ========================= ===============================
- 1995/09/06 mc@fivebats.com created
- */
- #include "machine.h"
- #ifndef MAX_CHANNELS
- #define MAX_CHANNELS 2
- #endif
- #ifndef MAX_GRANULES
- #define MAX_GRANULES 2
- #endif
- /*
- This is the prototype for the function pointer you must
- provide to write bits to the bitstream. It should write
- 'length' bits from 'value,' msb first. Bits in value are
- assumed to be right-justified.
- */
- void putMyBits( u_int value, u_int length );
- /*
- A BitstreamElement contains encoded data
- to be written to the bitstream.
- 'length' bits of 'value' will be written to
- the bitstream msb-first.
- */
- typedef struct
- {
- u_int value;
- u_short length;
- } BF_BitstreamElement;
- /*
- A BitstreamPart contains a group
- of 'nrEntries' of BitstreamElements.
- Each BitstreamElement will be written
- to the bitstream in the order it appears
- in the 'element' array.
- */
- typedef struct
- {
- u_int nrEntries;
- BF_BitstreamElement *element;
- } BF_BitstreamPart;
- /*
- This structure contains all the information needed by the
- bitstream formatter to encode one frame of data. You must
- fill this out and provide a pointer to it when you call
- the formatter.
- Maintainers: If you add or remove part of the side
- information, you will have to update the routines that
- make local copies of that information (in formatBitstream.c)
- */
- typedef struct BF_FrameData
- {
- int frameLength;
- int nGranules;
- int nChannels;
- BF_BitstreamPart *header;
- BF_BitstreamPart *frameSI;
- BF_BitstreamPart *channelSI[MAX_CHANNELS];
- BF_BitstreamPart *spectrumSI[MAX_GRANULES][MAX_CHANNELS];
- BF_BitstreamPart *scaleFactors[MAX_GRANULES][MAX_CHANNELS];
- BF_BitstreamPart *codedData[MAX_GRANULES][MAX_CHANNELS];
- BF_BitstreamPart *userSpectrum[MAX_GRANULES][MAX_CHANNELS];
- BF_BitstreamPart *userFrameData;
- } BF_FrameData;
- /*
- This structure contains information provided by
- the bitstream formatter. You can use this to
- check to see if your code agrees with the results
- of the call to the formatter.
- */
- typedef struct BF_FrameResults
- {
- int SILength;
- int mainDataLength;
- int nextBackPtr;
- } BF_FrameResults;
- /*
- public functions in formatBitstream.c
- */
- /* Initialize the bitstream */
- void InitFormatBitStream(void);
- /* count the bits in a BitstreamPart */
- int BF_PartLength( BF_BitstreamPart *part );
- /* encode a frame of audio and write it to your bitstream */
- void BF_BitstreamFrame( BF_FrameData *frameInfo, BF_FrameResults *results );
- /* write any remaining frames to the bitstream, padding with zeros */
- void BF_FlushBitstream( BF_FrameData *frameInfo, BF_FrameResults *results );
- typedef struct BF_PartHolder
- {
- int max_elements;
- BF_BitstreamPart *part;
- } BF_PartHolder;
- BF_PartHolder *BF_newPartHolder( int max_elements );
- BF_PartHolder *BF_resizePartHolder( BF_PartHolder *oldPH, int max_elements );
- BF_PartHolder *BF_addElement( BF_PartHolder *thePH, BF_BitstreamElement *theElement );
- BF_PartHolder *BF_addEntry( BF_PartHolder *thePH, u_int value, u_int length );
- BF_PartHolder *BF_NewHolderFromBitstreamPart( BF_BitstreamPart *thePart );
- BF_PartHolder *BF_LoadHolderFromBitstreamPart( BF_PartHolder *theHolder, BF_BitstreamPart *thePart );
- BF_PartHolder *BF_freePartHolder( BF_PartHolder *thePH );
- #endif /* #ifndef _FORMAT_BITSTREAM_H */