aboutsummaryrefslogtreecommitdiffstats
path: root/libAACdec/src/aacdecoder.h
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2012-07-11 10:15:24 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2012-07-11 10:15:24 -0700
commit2228e360595641dd906bf1773307f43d304f5b2e (patch)
tree57f3d390ebb0782cc0de0fb984c8ea7e45b4f386 /libAACdec/src/aacdecoder.h
downloadfdk-aac-dabplus-2228e360595641dd906bf1773307f43d304f5b2e.tar.gz
fdk-aac-dabplus-2228e360595641dd906bf1773307f43d304f5b2e.tar.bz2
fdk-aac-dabplus-2228e360595641dd906bf1773307f43d304f5b2e.zip
Snapshot 2bda038c163298531d47394bc2c09e1409c5d0db
Change-Id: If584e579464f28b97d50e51fc76ba654a5536c54
Diffstat (limited to 'libAACdec/src/aacdecoder.h')
-rw-r--r--libAACdec/src/aacdecoder.h312
1 files changed, 312 insertions, 0 deletions
diff --git a/libAACdec/src/aacdecoder.h b/libAACdec/src/aacdecoder.h
new file mode 100644
index 0000000..f153c84
--- /dev/null
+++ b/libAACdec/src/aacdecoder.h
@@ -0,0 +1,312 @@
+
+/* -----------------------------------------------------------------------------------------------------------
+Software License for The Fraunhofer FDK AAC Codec Library for Android
+
+© Copyright 1995 - 2012 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:
+
+******************************************************************************/
+
+#ifndef AACDECODER_H
+#define AACDECODER_H
+
+#include "common_fix.h"
+
+#include "FDK_bitstream.h"
+
+#include "channel.h"
+
+#include "tpdec_lib.h"
+#include "FDK_audio.h"
+
+#include "block.h"
+
+#include "genericStds.h"
+
+
+#include "sbrdecoder.h"
+
+
+#include "aacdec_drc.h"
+
+ #include "pcmutils_lib.h"
+
+
+/* Capabilities flags */
+#define CAPF_AAC_LC 0x00000001
+#define CAPF_AAC_LD 0x00000002
+#define CAPF_AAC_SCAL 0x00000004
+#define CAPF_AAC_ER 0x00000008
+#define CAPF_AAC_480 0x00000010
+#define CAPF_AAC_512 0x00000020
+#define CAPF_AAC_960 0x00000040
+#define CAPF_AAC_1024 0x00000080
+#define CAPF_AAC_HCR 0x00000100
+#define CAPF_AAC_VCB11 0x00000200
+#define CAPF_AAC_RVLC 0x00000400
+#define CAPF_AAC_MPEG4 0x00000800 /* PNS */
+#define CAPF_AAC_DRC 0x00001000
+#define CAPF_AAC_CONCEAL 0x00002000
+#define CAPF_AAC_DRM_BSFORMAT 0x00004000
+#define CAPF_AAC_BSAC 0x00008000
+
+typedef struct AAC_DECODER_INSTANCE *HANDLE_AACDECODER;
+
+
+enum
+{
+ L = 0,
+ R = 1
+};
+
+typedef struct {
+ unsigned char *buffer;
+ int bufferSize;
+ int offset[8];
+ int nrElements;
+} CAncData;
+
+typedef enum {
+ NOT_DEFINED = -1,
+ MODE_HQ = 0,
+ MODE_LP = 1
+} QMF_MODE;
+
+typedef struct {
+ int bsDelay;
+} SBR_PARAMS;
+
+
+/* AAC decoder (opaque toward userland) struct declaration */
+struct AAC_DECODER_INSTANCE {
+ INT aacChannels; /*!< Amount of AAC decoder channels allocated. */
+ INT ascChannels; /*!< Amount of AAC decoder channels signalled in ASC. */
+ INT blockNumber; /*!< frame counter */
+
+ INT nrOfLayers;
+
+ INT outputInterleaved; /*!< PCM output format (interleaved/none interleaved). */
+
+ HANDLE_TRANSPORTDEC hInput; /*!< Transport layer handle. */
+
+ SamplingRateInfo samplingRateInfo; /*!< Sampling Rate information table */
+
+ UCHAR frameOK; /*!< Will be unset if a consistency check, e.g. CRC etc. fails */
+
+ UINT flags; /*!< Flags for internal decoder use. DO NOT USE self::streaminfo::flags ! */
+
+ MP4_ELEMENT_ID elements[7]; /*!< Table where the element Id's are listed */
+ UCHAR elTags[7]; /*!< Table where the elements id Tags are listed */
+ UCHAR chMapping[(6)]; /*!< Table of MPEG canonical order to bitstream channel order mapping. */
+
+ AUDIO_CHANNEL_TYPE channelType[(6)]; /*!< Audio channel type of each output audio channel (from 0 upto numChannels). */
+ UCHAR channelIndices[(6)]; /*!< Audio channel index for each output audio channel (from 0 upto numChannels). */
+ /* See ISO/IEC 13818-7:2005(E), 8.5.3.2 Explicit channel mapping using a program_config_element() */
+
+
+ const UCHAR (*channelOutputMapping)[8]; /*!< Table for MPEG canonical order to output channel order mapping. */
+
+
+ CProgramConfig pce;
+ CStreamInfo streamInfo; /*!< pointer to StreamInfo data (read from the bitstream) */
+ CAacDecoderChannelInfo *pAacDecoderChannelInfo[(6)]; /*!< Temporal channel memory */
+ CAacDecoderStaticChannelInfo *pAacDecoderStaticChannelInfo[(6)]; /*!< Persistent channel memory */
+
+ CAacDecoderCommonData aacCommonData; /*!< Temporal shared data for all channels hooked into pAacDecoderChannelInfo */
+
+ CConcealParams concealCommonData;
+ INT concealChannels;
+
+
+ HANDLE_SBRDECODER hSbrDecoder; /*!< SBR decoder handle. */
+ UCHAR sbrEnabled; /*!< flag to store if SBR has been detected */
+ UCHAR sbrEnabledPrev; /*!< flag to store if SBR has been detected from previous frame */
+ UCHAR psPossible; /*!< flag to store if PS is possible */
+ SBR_PARAMS sbrParams; /*!< struct to store all sbr parameters */
+
+ QMF_MODE qmfModeCurr; /*!< The current QMF mode */
+ QMF_MODE qmfModeUser; /*!< The QMF mode requested by the library user */
+
+ HANDLE_AAC_DRC hDrcInfo; /*!< handle to DRC data structure */
+
+
+ CAncData ancData; /*!< structure to handle ancillary data */
+
+ HANDLE_PCM_DOWNMIX hPcmUtils; /*!< privat data for the PCM utils. */
+
+};
+
+
+#define AAC_DEBUG_EXTHLP "\
+--- AAC-Core ---\n\
+ 0x00010000 Header data\n\
+ 0x00020000 CRC data\n\
+ 0x00040000 Channel info\n\
+ 0x00080000 Section data\n\
+ 0x00100000 Scalefactor data\n\
+ 0x00200000 Pulse data\n\
+ 0x00400000 Tns data\n\
+ 0x00800000 Quantized spectrum\n\
+ 0x01000000 Requantized spectrum\n\
+ 0x02000000 Time output\n\
+ 0x04000000 Fatal errors\n\
+ 0x08000000 Buffer fullness\n\
+ 0x10000000 Average bitrate\n\
+ 0x20000000 Synchronization\n\
+ 0x40000000 Concealment\n\
+ 0x7FFF0000 all AAC-Core-Info\n\
+"
+
+/**
+ * \brief Synchronise QMF mode for all modules using QMF data.
+ * \param self decoder handle
+ */
+void CAacDecoder_SyncQmfMode(HANDLE_AACDECODER self);
+
+/**
+ * \brief Signal a bit stream interruption to the decoder
+ * \param self decoder handle
+ */
+void CAacDecoder_SignalInterruption(HANDLE_AACDECODER self);
+
+/*!
+ \brief Initialize ancillary buffer
+
+ \ancData Pointer to ancillary data structure
+ \buffer Pointer to (external) anc data buffer
+ \size Size of the buffer pointed on by buffer
+
+ \return Error code
+*/
+AAC_DECODER_ERROR CAacDecoder_AncDataInit(CAncData *ancData, unsigned char *buffer, int size);
+
+/*!
+ \brief Get one ancillary data element
+
+ \ancData Pointer to ancillary data structure
+ \index Index of the anc data element to get
+ \ptr Pointer to a buffer receiving a pointer to the requested anc data element
+ \size Pointer to a buffer receiving the length of the requested anc data element
+
+ \return Error code
+*/
+AAC_DECODER_ERROR CAacDecoder_AncDataGet(CAncData *ancData, int index, unsigned char **ptr, int *size);
+
+
+/* initialization of aac decoder */
+LINKSPEC_H HANDLE_AACDECODER CAacDecoder_Open(TRANSPORT_TYPE bsFormat);
+
+/* Initialization of stream-info elements */
+LINKSPEC_H AAC_DECODER_ERROR CAacDecoder_Init(HANDLE_AACDECODER self,
+ const CSAudioSpecificConfig *asc);
+
+/*!
+ \brief Decodes one aac frame
+
+ The function decodes one aac frame. The decoding of coupling channel
+ elements are not supported. The transport layer might signal, that the
+ data of the current frame is invalid, e.g. as a result of a packet
+ loss in streaming mode.
+ The bitstream position of transportDec_GetBitstream(self->hInput) must
+ be exactly the end of the access unit, including all byte alignment bits.
+ For this purpose, the variable auStartAnchor is used.
+
+ \return error status
+*/
+LINKSPEC_H AAC_DECODER_ERROR CAacDecoder_DecodeFrame(
+ HANDLE_AACDECODER self,
+ const UINT flags,
+ INT_PCM *pTimeData,
+ const INT timeDataSize,
+ const INT interleaved
+ );
+
+/* Destroy aac decoder */
+LINKSPEC_H void CAacDecoder_Close ( HANDLE_AACDECODER self );
+
+/* get streaminfo handle from decoder */
+LINKSPEC_H CStreamInfo* CAacDecoder_GetStreamInfo ( HANDLE_AACDECODER self );
+
+
+#endif /* #ifndef AACDECODER_H */