diff options
Diffstat (limited to 'libAACdec/src/channelinfo.h')
-rw-r--r-- | libAACdec/src/channelinfo.h | 450 |
1 files changed, 0 insertions, 450 deletions
diff --git a/libAACdec/src/channelinfo.h b/libAACdec/src/channelinfo.h deleted file mode 100644 index e092ab3..0000000 --- a/libAACdec/src/channelinfo.h +++ /dev/null @@ -1,450 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/***************************** MPEG-4 AAC Decoder ************************** - - Author(s): Josef Hoepfl - Description: individual channel stream info - -******************************************************************************/ - -#ifndef CHANNELINFO_H -#define CHANNELINFO_H - -#include "common_fix.h" - -#include "aac_rom.h" -#include "aacdecoder_lib.h" -#include "FDK_bitstream.h" -#include "overlapadd.h" - -#include "mdct.h" -#include "stereo.h" -#include "pulsedata.h" -#include "aacdec_tns.h" - -#include "aacdec_pns.h" - -#include "aacdec_hcr_types.h" -#include "rvlc_info.h" - - -#include "conceal_types.h" - - #include "aacdec_drc_types.h" - -/* Output rendering mode */ -typedef enum { - AACDEC_RENDER_INVALID = 0, - AACDEC_RENDER_IMDCT, - AACDEC_RENDER_ELDFB, - AACDEC_RENDER_LPD, - AACDEC_RENDER_INTIMDCT -} AACDEC_RENDER_MODE; - -enum { - MAX_QUANTIZED_VALUE = 8191 -}; - -enum -{ - OnlyLongSequence = 0, - LongStartSequence, - EightShortSequence, - LongStopSequence -}; - - -typedef struct -{ - const SHORT *ScaleFactorBands_Long; - const SHORT *ScaleFactorBands_Short; - UCHAR NumberOfScaleFactorBands_Long; - UCHAR NumberOfScaleFactorBands_Short; - UINT samplingRateIndex; - UINT samplingRate; -} SamplingRateInfo; - -typedef struct -{ - UCHAR CommonWindow; - UCHAR GlobalGain; - -} CRawDataInfo; - -typedef struct -{ - UCHAR WindowGroupLength[8]; - UCHAR WindowGroups; - UCHAR Valid; - - UCHAR WindowShape; /* 0: sine window, 1: KBD, 2: low overlap */ - UCHAR WindowSequence; /* See enum above, 0: long, 1: start, 2: short, 3: stop */ - UCHAR MaxSfBands; - UCHAR ScaleFactorGrouping; - - UCHAR TotalSfBands; - -} CIcsInfo; - - -enum -{ - ZERO_HCB = 0, - ESCBOOK = 11, - NSPECBOOKS = ESCBOOK + 1, - BOOKSCL = NSPECBOOKS, - NOISE_HCB = 13, - INTENSITY_HCB2 = 14, - INTENSITY_HCB = 15, - LAST_HCB -}; - -#define TNS_SCALE 3 - -/* - * This struct must be allocated one for every channel and must be persistent. - */ -typedef struct -{ - FIXP_DBL *pOverlapBuffer; - mdct_t IMdct; - - - - CDrcChannelData drcData; - CConcealmentInfo concealmentInfo; - -} CAacDecoderStaticChannelInfo; - - -/* - * This union must be allocated for every element (up to 2 channels). - */ -typedef struct { - - /* Common bit stream data */ - SHORT aScaleFactor[(8*16)]; /* Spectral scale factors for each sfb in each window. */ - SHORT aSfbScale[(8*16)]; /* could be free after ApplyTools() */ - UCHAR aCodeBook[(8*16)]; /* section data: codebook for each window and sfb. */ - CTnsData TnsData; - CRawDataInfo RawDataInfo; - - shouldBeUnion { - - struct { - CPulseData PulseData; - SHORT aNumLineInSec4Hcr[MAX_SFB_HCR]; /* needed once for all channels except for Drm syntax */ - UCHAR aCodeBooks4Hcr[MAX_SFB_HCR]; /* needed once for all channels except for Drm syntax. Same as "aCodeBook" ? */ - SHORT lenOfReorderedSpectralData; - SCHAR lenOfLongestCodeword; - SCHAR numberSection; - SCHAR rvlcCurrentScaleFactorOK; - SCHAR rvlcIntensityUsed; - } aac; - } specificTo; - -} CAacDecoderDynamicData; - -typedef shouldBeUnion { - CAacDecoderDynamicData pAacDecoderDynamicData[2]; - - /* Common signal data, can be used once the bit stream data from above is not used anymore. */ - FIXP_DBL mdctOutTemp[1024]; - FIXP_DBL sbrWorkBuffer[1024*2]; - -} CWorkBufferCore1; - -/* Common data referenced by all channels */ -typedef struct { - - CWorkBufferCore1 *workBufferCore1; - FIXP_DBL* workBufferCore2; - - CPnsInterChannelData pnsInterChannelData; - INT pnsCurrentSeed; - INT pnsRandomSeed[(8*16)]; - - CJointStereoData jointStereoData; /* One for one element */ - - shouldBeUnion { - struct { - CErHcrInfo erHcrInfo; - CErRvlcInfo erRvlcInfo; - SHORT aRvlcScfEsc[RVLC_MAX_SFB]; /* needed once for all channels */ - SHORT aRvlcScfFwd[RVLC_MAX_SFB]; /* needed once for all channels */ - SHORT aRvlcScfBwd[RVLC_MAX_SFB]; /* needed once for all channels */ - } aac; - - } overlay; - -} CAacDecoderCommonData; - - -/* - * This struct must be allocated one for every channels of every element and must be persistent. - * Among its members, the following memory areas can be overwritten under the given conditions: - * - pSpectralCoefficient The memory pointed to can be overwritten after time signal rendering. - * - data can be overwritten after time signal rendering. - * - pDynData memory pointed to can be overwritten after each CChannelElement_Decode() call. - * - pComData->overlay memory pointed to can be overwritten after each CChannelElement_Decode() call.. - */ -typedef struct -{ - SPECTRAL_PTR pSpectralCoefficient; /* Spectral coefficients of each window */ - SHORT specScale[8]; /* Scale shift values of each spectrum window */ - CIcsInfo icsInfo; - INT granuleLength; /* Size of smallest spectrum piece */ - UCHAR ElementInstanceTag; - - AACDEC_RENDER_MODE renderMode; /* Output signal rendering mode */ - - shouldBeUnion { - struct { - CPnsData PnsData; /* Not required for USAC */ - } aac; - - struct { - } usac; - } data; - - CAacDecoderDynamicData *pDynData; /* Data required for one element and discarded after decoding */ - CAacDecoderCommonData *pComData; /* Data required for one channel at a time during decode */ - -} CAacDecoderChannelInfo; - -/* channelinfo.cpp */ - -AAC_DECODER_ERROR getSamplingRateInfo(SamplingRateInfo *t, UINT samplesPerFrame, UINT samplingRateIndex, UINT samplingRate); - -/** - * \brief Read max SFB from bit stream and assign TotalSfBands according - * to the window sequence and sample rate. - * \param hBs bit stream handle as data source - * \param pIcsInfo IcsInfo structure to read the window sequence and store MaxSfBands and TotalSfBands - * \param pSamplingRateInfo read only - */ -AAC_DECODER_ERROR IcsReadMaxSfb ( - HANDLE_FDK_BITSTREAM hBs, - CIcsInfo *pIcsInfo, - const SamplingRateInfo *pSamplingRateInfo - ); - -AAC_DECODER_ERROR IcsRead( - HANDLE_FDK_BITSTREAM bs, - CIcsInfo *pIcsInfo, - const SamplingRateInfo* SamplingRateInfoTable, - const UINT flags - ); - -/* stereo.cpp, only called from this file */ - -/*! - \brief Applies MS stereo. - - The function applies MS stereo. - - \param pAacDecoderChannelInfo aac channel info. - \param pScaleFactorBandOffsets pointer to scalefactor band offsets. - \param pWindowGroupLength pointer to window group length array. - \param windowGroups number of window groups. - \param scaleFactorBandsTransmittedL number of transmitted scalefactor bands in left channel. - \param scaleFactorBandsTransmittedR number of transmitted scalefactor bands in right channel. - May differ from scaleFactorBandsTransmittedL only for USAC. - \return none -*/ -void CJointStereo_ApplyMS(CAacDecoderChannelInfo *pAacDecoderChannelInfo[2], - const short *pScaleFactorBandOffsets, - const UCHAR *pWindowGroupLength, - const int windowGroups, - const int scaleFactorBandsTransmittedL, - const int scaleFactorBandsTransmittedR); - -/*! - \brief Applies intensity stereo - - The function applies intensity stereo. - - \param pAacDecoderChannelInfo aac channel info. - \param pScaleFactorBandOffsets pointer to scalefactor band offsets. - \param pWindowGroupLength pointer to window group length array. - \param windowGroups number of window groups. - \param scaleFactorBandsTransmitted number of transmitted scalefactor bands. - \param CommonWindow common window bit. - \return none -*/ -void CJointStereo_ApplyIS(CAacDecoderChannelInfo *pAacDecoderChannelInfo[2], - const short *pScaleFactorBandOffsets, - const UCHAR *pWindowGroupLength, - const int windowGroups, - const int scaleFactorBandsTransmitted, - const UINT CommonWindow); - - -/* aacdec_pns.cpp */ -int CPns_IsPnsUsed (const CPnsData *pPnsData, - const int group, - const int band); - -void CPns_SetCorrelation(CPnsData *pPnsData, - const int group, - const int band, - const int outofphase); - -/****************** inline functions ******************/ - -inline UCHAR IsValid(const CIcsInfo *pIcsInfo) -{ - return pIcsInfo->Valid; -} - -inline UCHAR IsLongBlock(const CIcsInfo *pIcsInfo) -{ - return (pIcsInfo->WindowSequence != EightShortSequence); -} - -inline UCHAR GetWindowShape(const CIcsInfo *pIcsInfo) -{ - return pIcsInfo->WindowShape; -} - -inline UCHAR GetWindowSequence(const CIcsInfo *pIcsInfo) -{ - return pIcsInfo->WindowSequence; -} - -inline const SHORT *GetScaleFactorBandOffsets(const CIcsInfo *pIcsInfo, const SamplingRateInfo* samplingRateInfo) -{ - if (IsLongBlock(pIcsInfo)) - { - return samplingRateInfo->ScaleFactorBands_Long; - } - else - { - return samplingRateInfo->ScaleFactorBands_Short; - } -} - -inline int GetWindowsPerFrame(const CIcsInfo *pIcsInfo) -{ - return (pIcsInfo->WindowSequence == EightShortSequence) ? 8 : 1; -} - -inline UCHAR GetWindowGroups(const CIcsInfo *pIcsInfo) -{ - return pIcsInfo->WindowGroups; -} - -inline UCHAR GetWindowGroupLength(const CIcsInfo *pIcsInfo, const INT index) -{ - return pIcsInfo->WindowGroupLength[index]; -} - -inline const UCHAR *GetWindowGroupLengthTable(const CIcsInfo *pIcsInfo) -{ - return pIcsInfo->WindowGroupLength; -} - -inline UCHAR GetScaleFactorBandsTransmitted(const CIcsInfo *pIcsInfo) -{ - return pIcsInfo->MaxSfBands; -} - -inline UCHAR GetScaleMaxFactorBandsTransmitted(const CIcsInfo *pIcsInfo0, const CIcsInfo *pIcsInfo1) -{ - return fMax(pIcsInfo0->MaxSfBands, pIcsInfo1->MaxSfBands); -} - -inline UCHAR GetScaleFactorBandsTotal(const CIcsInfo *pIcsInfo) -{ - return pIcsInfo->TotalSfBands; -} - -/* Note: This function applies to AAC-LC only ! */ -inline UCHAR GetMaximumTnsBands(const CIcsInfo *pIcsInfo, const int samplingRateIndex) -{ - return tns_max_bands_tbl[samplingRateIndex][!IsLongBlock(pIcsInfo)]; -} - -#endif /* #ifndef CHANNELINFO_H */ - |