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

多媒体编程

开发平台:

Visual C++

  1. /*
  2. ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
  3. ** Copyright (C) 2003-2005 M. Bakker, Ahead Software AG, http://www.nero.com
  4. **  
  5. ** This program is free software; you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation; either version 2 of the License, or
  8. ** (at your option) any later version.
  9. ** 
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. ** GNU General Public License for more details.
  14. ** 
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program; if not, write to the Free Software 
  17. ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  18. **
  19. ** Any non-GPL usage of this software or parts of this software is strictly
  20. ** forbidden.
  21. **
  22. ** Software using this code must display the following message visibly in the
  23. ** software:
  24. ** "FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Ahead Software, www.nero.com"
  25. ** in, for example, the about-box or help/startup screen.
  26. **
  27. ** Commercial non-GPL licensing of this software is possible.
  28. ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
  29. **
  30. ** $Id: neaacdec.h,v 1.3 2005/11/01 21:41:43 gabest Exp $
  31. **/
  32. #ifndef __NEAACDEC_H__
  33. #define __NEAACDEC_H__
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif /* __cplusplus */
  37. #if 1
  38. /* MACROS FOR BACKWARDS COMPATIBILITY */
  39. /* structs */
  40. #define faacDecHandle                  NeAACDecHandle
  41. #define faacDecConfiguration           NeAACDecConfiguration
  42. #define faacDecConfigurationPtr        NeAACDecConfigurationPtr
  43. #define faacDecFrameInfo               NeAACDecFrameInfo
  44. /* functions */
  45. #define faacDecGetErrorMessage         NeAACDecGetErrorMessage
  46. #define faacDecSetConfiguration        NeAACDecSetConfiguration
  47. #define faacDecGetCurrentConfiguration NeAACDecGetCurrentConfiguration
  48. #define faacDecInit                    NeAACDecInit
  49. #define faacDecInit2                   NeAACDecInit2
  50. #define faacDecInitDRM                 NeAACDecInitDRM
  51. #define faacDecPostSeekReset           NeAACDecPostSeekReset
  52. #define faacDecOpen                    NeAACDecOpen
  53. #define faacDecClose                   NeAACDecClose
  54. #define faacDecDecode                  NeAACDecDecode
  55. #define AudioSpecificConfig            NeAACDecAudioSpecificConfig
  56. #endif
  57. #ifdef _WIN32
  58.   #pragma pack(push, 8)
  59.   #ifndef NEAACDECAPI
  60.     #define NEAACDECAPI __cdecl
  61.   #endif
  62. #else
  63.   #ifndef NEAACDECAPI
  64.     #define NEAACDECAPI
  65.   #endif
  66. #endif
  67. #define FAAD2_VERSION "2.1 beta"
  68. /* object types for AAC */
  69. #define MAIN       1
  70. #define LC         2
  71. #define SSR        3
  72. #define LTP        4
  73. #define HE_AAC     5
  74. #define ER_LC     17
  75. #define ER_LTP    19
  76. #define LD        23
  77. #define DRM_ER_LC 27 /* special object type for DRM */
  78. /* header types */
  79. #define RAW        0
  80. #define ADIF       1
  81. #define ADTS       2
  82. /* SBR signalling */
  83. #define NO_SBR           0
  84. #define SBR_UPSAMPLED    1
  85. #define SBR_DOWNSAMPLED  2
  86. #define NO_SBR_UPSAMPLED 3
  87. /* library output formats */
  88. #define FAAD_FMT_16BIT  1
  89. #define FAAD_FMT_24BIT  2
  90. #define FAAD_FMT_32BIT  3
  91. #define FAAD_FMT_FLOAT  4
  92. #define FAAD_FMT_FIXED  FAAD_FMT_FLOAT
  93. #define FAAD_FMT_DOUBLE 5
  94. /* Capabilities */
  95. #define LC_DEC_CAP           (1<<0) /* Can decode LC */
  96. #define MAIN_DEC_CAP         (1<<1) /* Can decode MAIN */
  97. #define LTP_DEC_CAP          (1<<2) /* Can decode LTP */
  98. #define LD_DEC_CAP           (1<<3) /* Can decode LD */
  99. #define ERROR_RESILIENCE_CAP (1<<4) /* Can decode ER */
  100. #define FIXED_POINT_CAP      (1<<5) /* Fixed point */
  101. /* Channel definitions */
  102. #define FRONT_CHANNEL_CENTER (1)
  103. #define FRONT_CHANNEL_LEFT   (2)
  104. #define FRONT_CHANNEL_RIGHT  (3)
  105. #define SIDE_CHANNEL_LEFT    (4)
  106. #define SIDE_CHANNEL_RIGHT   (5)
  107. #define BACK_CHANNEL_LEFT    (6)
  108. #define BACK_CHANNEL_RIGHT   (7)
  109. #define BACK_CHANNEL_CENTER  (8)
  110. #define LFE_CHANNEL          (9)
  111. #define UNKNOWN_CHANNEL      (0)
  112. /* DRM channel definitions */
  113. #define DRMCH_MONO          1
  114. #define DRMCH_STEREO        2
  115. #define DRMCH_SBR_MONO      3
  116. #define DRMCH_SBR_STEREO    4
  117. #define DRMCH_SBR_PS_STEREO 5
  118. /* A decode call can eat up to FAAD_MIN_STREAMSIZE bytes per decoded channel,
  119.    so at least so much bytes per channel should be available in this stream */
  120. #define FAAD_MIN_STREAMSIZE 768 /* 6144 bits/channel */
  121. typedef void *NeAACDecHandle;
  122. typedef struct mp4AudioSpecificConfig
  123. {
  124.     /* Audio Specific Info */
  125.     unsigned char objectTypeIndex;
  126.     unsigned char samplingFrequencyIndex;
  127.     unsigned long samplingFrequency;
  128.     unsigned char channelsConfiguration;
  129.     /* GA Specific Info */
  130.     unsigned char frameLengthFlag;
  131.     unsigned char dependsOnCoreCoder;
  132.     unsigned short coreCoderDelay;
  133.     unsigned char extensionFlag;
  134.     unsigned char aacSectionDataResilienceFlag;
  135.     unsigned char aacScalefactorDataResilienceFlag;
  136.     unsigned char aacSpectralDataResilienceFlag;
  137.     unsigned char epConfig;
  138.     char sbr_present_flag;
  139.     char forceUpSampling;
  140.     char downSampledSBR;
  141. } mp4AudioSpecificConfig;
  142. typedef struct NeAACDecConfiguration
  143. {
  144.     unsigned char defObjectType;
  145.     unsigned long defSampleRate;
  146.     unsigned char outputFormat;
  147.     unsigned char downMatrix;
  148.     unsigned char useOldADTSFormat;
  149.     unsigned char dontUpSampleImplicitSBR;
  150. } NeAACDecConfiguration, *NeAACDecConfigurationPtr;
  151. typedef struct NeAACDecFrameInfo
  152. {
  153.     unsigned long bytesconsumed;
  154.     unsigned long samples;
  155.     unsigned char channels;
  156.     unsigned char error;
  157.     unsigned long samplerate;
  158.     /* SBR: 0: off, 1: on; upsample, 2: on; downsampled, 3: off; upsampled */
  159.     unsigned char sbr;
  160.     /* MPEG-4 ObjectType */
  161.     unsigned char object_type;
  162.     /* AAC header type; MP4 will be signalled as RAW also */
  163.     unsigned char header_type;
  164.     /* multichannel configuration */
  165.     unsigned char num_front_channels;
  166.     unsigned char num_side_channels;
  167.     unsigned char num_back_channels;
  168.     unsigned char num_lfe_channels;
  169.     unsigned char channel_position[64];
  170.     /* PS: 0: off, 1: on */
  171.     unsigned char ps;
  172. } NeAACDecFrameInfo;
  173. char* NEAACDECAPI NeAACDecGetErrorMessage(unsigned char errcode);
  174. unsigned long NEAACDECAPI NeAACDecGetCapabilities(void);
  175. NeAACDecHandle NEAACDECAPI NeAACDecOpen(void);
  176. NeAACDecConfigurationPtr NEAACDECAPI NeAACDecGetCurrentConfiguration(NeAACDecHandle hDecoder);
  177. unsigned char NEAACDECAPI NeAACDecSetConfiguration(NeAACDecHandle hDecoder,
  178.                                                    NeAACDecConfigurationPtr config);
  179. /* Init the library based on info from the AAC file (ADTS/ADIF) */
  180. long NEAACDECAPI NeAACDecInit(NeAACDecHandle hDecoder,
  181.                               unsigned char *buffer,
  182.                               unsigned long buffer_size,
  183.                               unsigned long *samplerate,
  184.                               unsigned char *channels);
  185. /* Init the library using a DecoderSpecificInfo */
  186. char NEAACDECAPI NeAACDecInit2(NeAACDecHandle hDecoder, unsigned char *pBuffer,
  187.                                unsigned long SizeOfDecoderSpecificInfo,
  188.                                unsigned long *samplerate, unsigned char *channels);
  189. /* Init the library for DRM */
  190. char NEAACDECAPI NeAACDecInitDRM(NeAACDecHandle *hDecoder, unsigned long samplerate,
  191.                                  unsigned char channels);
  192. void NEAACDECAPI NeAACDecPostSeekReset(NeAACDecHandle hDecoder, long frame);
  193. void NEAACDECAPI NeAACDecClose(NeAACDecHandle hDecoder);
  194. void* NEAACDECAPI NeAACDecDecode(NeAACDecHandle hDecoder,
  195.                                  NeAACDecFrameInfo *hInfo,
  196.                                  unsigned char *buffer,
  197.                                  unsigned long buffer_size);
  198. void* NEAACDECAPI NeAACDecDecode2(NeAACDecHandle hDecoder,
  199.                                   NeAACDecFrameInfo *hInfo,
  200.                                   unsigned char *buffer,
  201.                                   unsigned long buffer_size,
  202.                                   void **sample_buffer,
  203.                                   unsigned long sample_buffer_size);
  204. char NEAACDECAPI NeAACDecAudioSpecificConfig(unsigned char *pBuffer,
  205.                                              unsigned long buffer_size,
  206.                                              mp4AudioSpecificConfig *mp4ASC);
  207. #ifdef _WIN32
  208.   #pragma pack(pop)
  209. #endif
  210. #ifdef __cplusplus
  211. }
  212. #endif /* __cplusplus */
  213. #endif