138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin
238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin/* -----------------------------------------------------------------------------------------------------------
338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. LevinSoftware License for The Fraunhofer FDK AAC Codec Library for Android
438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin
538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin� Copyright  1995 - 2013 Fraunhofer-Gesellschaft zur F�rderung der angewandten Forschung e.V.
638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin  All rights reserved.
738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin
838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin 1.    INTRODUCTION
938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. LevinThe Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
1038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinthe MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
1138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. LevinThis FDK AAC Codec software is intended to be used on a wide variety of Android devices.
1238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin
1338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. LevinAAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
1438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinaudio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
1538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinindependent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
1638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinof the MPEG specifications.
1738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin
1838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. LevinPatent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
1938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinmay be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
2038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinindividually for the purpose of encoding or decoding bit streams in products that are compliant with
2138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinthe ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
2238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinthese patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
2338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinsoftware may already be covered under those patent licenses when it is used for those licensed purposes only.
2438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin
2538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. LevinCommercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
2638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinare also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
2738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levinapplications information and documentation.
2838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin
29b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen2.    COPYRIGHT LICENSE
30317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
31b88a6f877eb08e6d45130374fc1a1867371db703Stefan SørensenRedistribution and use in source and binary forms, with or without modification, are permitted without
32b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensenpayment of copyright license fees provided that you satisfy the following conditions:
330ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin
34b88a6f877eb08e6d45130374fc1a1867371db703Stefan SørensenYou must retain the complete text of this software license in redistributions of the FDK AAC Codec or
35c7afb4881f14e44968f3a78ae5988f04ecc66b68Dmitry V. Levinyour modifications thereto in source code form.
36317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
37b88a6f877eb08e6d45130374fc1a1867371db703Stefan SørensenYou must retain the complete text of this software license in the documentation and/or other materials
38b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensenprovided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
39317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinYou must make available free of charge copies of the complete source code of the FDK AAC Codec and your
40b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensenmodifications thereto to recipients of copies in binary form.
41b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen
42317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinThe name of Fraunhofer may not be used to endorse or promote products derived from this library without
43317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinprior written permission.
44b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen
45317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinYou may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
46317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinsoftware or your modifications thereto.
47317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
48b88a6f877eb08e6d45130374fc1a1867371db703Stefan SørensenYour modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
49317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinand the date of any change. For modified versions of the FDK AAC Codec, the term
50317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
51317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
52317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
53317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin3.    NO PATENT LICENSE
54b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen
55317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinNO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
56317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
57b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensenrespect to this software.
58317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
59317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinYou may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
60317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinby appropriate patent licenses.
61b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen
62317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin4.    DISCLAIMER
63317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
64317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinThis FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
65317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
66317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinof merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
67317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinCONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
68317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinincluding but not limited to procurement of substitute goods or services; loss of use, data, or profits,
69317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinor business interruption, however caused and on any theory of liability, whether in contract, strict
70317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinliability, or tort (including negligence), arising in any way out of the use of this software, even if
71317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinadvised of the possibility of such damage.
72b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen
73317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin5.    CONTACT INFORMATION
74317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
75317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinFraunhofer Institute for Integrated Circuits IIS
76b88a6f877eb08e6d45130374fc1a1867371db703Stefan SørensenAttention: Audio and Multimedia Departments - FDK AAC LL
77317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinAm Wolfsmantel 33
78317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin91058 Erlangen, Germany
79317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
80317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinwww.iis.fraunhofer.de/amm
81317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levinamm-info@iis.fraunhofer.de
82317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin----------------------------------------------------------------------------------------------------------- */
83317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
84b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen/******************************** MPEG Audio Encoder **************************
85317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
86b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen   Initial author:       Alex Groeschel
87317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin   contents/description: ADTS Transport writer
88317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
89b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen******************************************************************************/
90317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
91317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin#ifndef TPENC_ADTS_H
92317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin#define TPENC_ADTS_H
93317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
94b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen
95317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
96317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin#include "tp_data.h"
97317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
98317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin#include "FDK_crc.h"
99317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
100b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensentypedef struct {
101317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  INT sample_freq;
102317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  CHANNEL_MODE channel_mode;
103317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  UCHAR decoderCanDoMpeg4;
104317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  UCHAR mpeg_id;
105317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  UCHAR layer;
106317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  UCHAR protection_absent;
107317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  UCHAR profile;
108317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  UCHAR sample_freq_index;
109317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  UCHAR private_bit;
110b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen  UCHAR original;
111b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen  UCHAR home;
112317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  UCHAR copyright_id;
113317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  UCHAR copyright_start;
114317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  USHORT frame_length;
115b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen  UCHAR num_raw_blocks;
116317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  UCHAR BufferFullnesStartFlag;
117317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  int headerBits;                /*!< Header bit demand for the current raw data block */
118317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  int currentBlock;              /*!< Index of current raw data block */
119b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen  int subFrameStartBit;          /*!< Bit position where the current raw data block begins */
120317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin  FDK_CRCINFO crcInfo;
121b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen} STRUCT_ADTS;
122317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
123317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levintypedef STRUCT_ADTS *HANDLE_ADTS;
124317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin
125317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin/**
126317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin * \brief Initialize ADTS data structure
127317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin *
128317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin * \param hAdts ADTS data handle
129317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin * \param config a valid CODER_CONFIG struct from where the required
130317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin *        information for the ADTS header is extrated from
131b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen *
132317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin * \return 0 in case of success.
133317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin */
134317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. LevinINT adtsWrite_Init(
135317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin        HANDLE_ADTS   hAdts,
136317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin        CODER_CONFIG *config
137317d19e8e99d16173b900f98c81e9a95a465b5bbDmitry V. Levin        );
138b88a6f877eb08e6d45130374fc1a1867371db703Stefan Sørensen
139/**
140 * \brief Get the total bit overhead caused by ADTS
141 *
142 * \hAdts handle to ADTS data
143 *
144 * \return Amount of additional bits required for the current raw data block
145 */
146int adtsWrite_GetHeaderBits( HANDLE_ADTS hAdts );
147
148/**
149 * \brief Write an ADTS header into the given bitstream. May not write a header
150 *        in case of multiple raw data blocks.
151 *
152 * \param hAdts ADTS data handle
153 * \param hBitStream bitstream handle into which the ADTS may be written into
154 * \param buffer_fullness the buffer fullness value for the ADTS header
155 * \param the current raw data block length
156 *
157 * \return 0 in case of success.
158 */
159INT adtsWrite_EncodeHeader(
160        HANDLE_ADTS          hAdts,
161        HANDLE_FDK_BITSTREAM hBitStream,
162        int                  bufferFullness,
163        int                  frame_length
164        );
165/**
166 * \brief Finish a ADTS raw data block
167 *
168 * \param hAdts ADTS data handle
169 * \param hBs bitstream handle into which the ADTS may be written into
170 * \param pBits a pointer to a integer holding the current bitstream buffer bit count,
171 *              which is corrected to the current raw data block boundary.
172 *
173 */
174void adtsWrite_EndRawDataBlock(
175        HANDLE_ADTS          hAdts,
176        HANDLE_FDK_BITSTREAM hBs,
177        int                 *bits
178        );
179
180
181/**
182 * \brief Start CRC region with a maximum number of bits
183 *        If mBits is positive zero padding will be used for CRC calculation, if there
184 *        are less than mBits bits available.
185 *        If mBits is negative no zero padding is done.
186 *        If mBits is zero the memory for the buffer is allocated dynamically, the
187 *        number of bits is not limited.
188 *
189 * \param pAdts ADTS data handle
190 * \param hBs bitstream handle of which the CRC region ends
191 * \param mBits limit of number of bits to be considered for the requested CRC region
192 *
193 * \return ID for the created region, -1 in case of an error
194 */
195int adtsWrite_CrcStartReg(
196        HANDLE_ADTS          pAdts,
197        HANDLE_FDK_BITSTREAM hBs,
198        int                  mBits
199        );
200
201/**
202 * \brief Ends CRC region identified by reg
203 *
204 * \param pAdts ADTS data handle
205 * \param hBs bitstream handle of which the CRC region ends
206 * \param reg a CRC region ID returned previously by adtsWrite_CrcStartReg()
207 */
208void adtsWrite_CrcEndReg(
209        HANDLE_ADTS          pAdts,
210        HANDLE_FDK_BITSTREAM hBs,
211        int                  reg
212        );
213
214
215
216
217#endif /* TPENC_ADTS_H */
218
219