Ap4AdtsParser.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:3k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*****************************************************************
  2. |
  3. |      File: Ap4AdtsParser.h
  4. |
  5. |      AP4 - ADTS Parser
  6. |
  7. |      (c) 2005 Gilles Boccon-Gibod
  8. |      Author: Gilles Boccon-Gibod (bok@bok.net)
  9. |
  10.  ****************************************************************/
  11. #ifndef _AP4_ADTS_PARSER_H_
  12. #define _AP4_ADTS_PARSER_H_
  13. /*----------------------------------------------------------------------
  14. |       includes
  15. +---------------------------------------------------------------------*/
  16. #include "Ap4Types.h"
  17. #include "Ap4BitStream.h"
  18. /*----------------------------------------------------------------------
  19. |       constants
  20. +---------------------------------------------------------------------*/
  21. extern const unsigned long AP4_AdtsSamplingFrequencyTable[16];
  22. /*----------------------------------------------------------------------
  23. |       types
  24. +---------------------------------------------------------------------*/
  25. class AP4_AdtsHeader {
  26. public:
  27.     // constructor
  28.     AP4_AdtsHeader(const AP4_UI08* bytes);
  29.     
  30.     // methods
  31.     AP4_Result Check();
  32.     // members
  33.     // fixed part
  34.     unsigned int m_Id;
  35.     unsigned int m_ProtectionAbsent;
  36.     unsigned int m_ProfileObjectType;
  37.     unsigned int m_SamplingFrequencyIndex;
  38.     unsigned int m_ChannelConfiguration;
  39.     // variable part
  40.     unsigned int m_FrameLength;
  41.     unsigned int m_RawDataBlocks;
  42.     // class methods
  43.     static bool MatchFixed(unsigned char* a, unsigned char* b);
  44. };
  45. typedef enum {
  46.     AP4_AAC_STANDARD_MPEG2,
  47.     AP4_AAC_STANDARD_MPEG4
  48. } AP4_AacStandard;
  49. typedef enum {
  50.     AP4_AAC_PROFILE_MAIN,
  51.     AP4_AAC_PROFILE_LC,
  52.     AP4_AAC_PROFILE_SSR,
  53.     AP4_AAC_PROFILE_LTP
  54. } AP4_AacProfile;
  55. typedef struct {
  56.     AP4_AacStandard m_Standard;
  57.     AP4_AacProfile  m_Profile;
  58.     unsigned int    m_SamplingFrequencyIndex;
  59.     unsigned long   m_SamplingFrequency;
  60.     unsigned int    m_ChannelConfiguration;
  61.     unsigned int    m_FrameLength;     
  62. } AP4_AacFrameInfo;
  63. typedef struct {
  64.     AP4_BitStream*   m_Source;
  65.     AP4_AacFrameInfo m_Info;
  66. } AP4_AacFrame;
  67. class AP4_AdtsParser {
  68. public:
  69.     // constructor and destructor
  70.     AP4_AdtsParser();
  71.     virtual ~AP4_AdtsParser();
  72.     // methods
  73.     AP4_Result Reset();
  74.     AP4_Result Feed(const AP4_UI08* buffer, 
  75.                     AP4_Size*       buffer_size,
  76.                     AP4_Flags       flags = 0);
  77.     AP4_Result FindFrame(AP4_AacFrame& frame);
  78.     AP4_Result Skip(AP4_Size size);
  79.     AP4_Size   GetBytesFree();
  80.     AP4_Size   GetBytesAvailable();
  81. private:
  82.     // methods
  83.     AP4_Result FindHeader(AP4_UI08* header);
  84.     // members
  85.     AP4_BitStream m_Bits;
  86.     AP4_Cardinal  m_FrameCount;
  87. };
  88. #endif // _AP4_ADTS_PARSER_H_