1203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
2203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi/* -----------------------------------------------------------------------------------------------------------
3203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviSoftware License for The Fraunhofer FDK AAC Codec Library for Android
4203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
5203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi� Copyright  1995 - 2015 Fraunhofer-Gesellschaft zur F�rderung der angewandten Forschung e.V.
6203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  All rights reserved.
7203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
8203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi 1.    INTRODUCTION
9203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviThe Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
10203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivithe MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
11203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviThis FDK AAC Codec software is intended to be used on a wide variety of Android devices.
12203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
13203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviAAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
14203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviaudio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
15203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviindependent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
16203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviof the MPEG specifications.
17203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
18203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviPatent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
19203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivimay be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
20203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviindividually for the purpose of encoding or decoding bit streams in products that are compliant with
21203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivithe ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
22203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivithese patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
23203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivisoftware may already be covered under those patent licenses when it is used for those licensed purposes only.
24203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
25203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviCommercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
26203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviare also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
27203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviapplications information and documentation.
28203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
29203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi2.    COPYRIGHT LICENSE
30203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
31203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviRedistribution and use in source and binary forms, with or without modification, are permitted without
32203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivipayment of copyright license fees provided that you satisfy the following conditions:
33203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
34203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviYou must retain the complete text of this software license in redistributions of the FDK AAC Codec or
35203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviyour modifications thereto in source code form.
36203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
37203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviYou must retain the complete text of this software license in the documentation and/or other materials
38203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviprovided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
39203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviYou must make available free of charge copies of the complete source code of the FDK AAC Codec and your
40203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivimodifications thereto to recipients of copies in binary form.
41203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
42203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviThe name of Fraunhofer may not be used to endorse or promote products derived from this library without
43203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviprior written permission.
44203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
45203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviYou may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
46203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivisoftware or your modifications thereto.
47203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
48203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviYour modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
49203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviand the date of any change. For modified versions of the FDK AAC Codec, the term
50203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
51203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
52203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
53203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi3.    NO PATENT LICENSE
54203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
55203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviNO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
56203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
57203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivirespect to this software.
58203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
59203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviYou may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
60203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviby appropriate patent licenses.
61203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
62203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi4.    DISCLAIMER
63203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
64203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviThis FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
65203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
66203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviof merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
67203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviCONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
68203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviincluding but not limited to procurement of substitute goods or services; loss of use, data, or profits,
69203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivior business interruption, however caused and on any theory of liability, whether in contract, strict
70203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviliability, or tort (including negligence), arising in any way out of the use of this software, even if
71203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviadvised of the possibility of such damage.
72203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
73203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi5.    CONTACT INFORMATION
74203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
75203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviFraunhofer Institute for Integrated Circuits IIS
76203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviAttention: Audio and Multimedia Departments - FDK AAC LL
77203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviAm Wolfsmantel 33
78203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi91058 Erlangen, Germany
79203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
80203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviwww.iis.fraunhofer.de/amm
81203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviamm-info@iis.fraunhofer.de
82203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi----------------------------------------------------------------------------------------------------------- */
83203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
84203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi/*****************************  MPEG-4 AAC Decoder  **************************
85203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
86203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi   Author(s):   Christian Griebel
87203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi   Description: DRM transport stuff
88203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
89203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi******************************************************************************/
90203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
91203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi#include "tpdec_drm.h"
92203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
93203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
94203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi#include "FDK_bitstream.h"
95203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
96203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
97203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
98203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivivoid drmRead_CrcInit(HANDLE_DRM pDrm)      /*!< pointer to drm crc info stucture */
99203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi{
100203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  FDK_ASSERT(pDrm != NULL);
101203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
102203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  FDKcrcInit(&pDrm->crcInfo, 0x001d, 0xFFFF, 8);
103203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi}
104203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
105203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Triviint drmRead_CrcStartReg(
106203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi                     HANDLE_DRM pDrm,            /*!< pointer to drm stucture */
107203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi                     HANDLE_FDK_BITSTREAM hBs,   /*!< handle to current bit buffer structure */
108203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi                     int mBits                   /*!< number of bits in crc region */
109203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi                   )
110203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi{
111203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  FDK_ASSERT(pDrm != NULL);
112203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
113203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  FDKcrcReset(&pDrm->crcInfo);
114203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
115203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  pDrm->crcReadValue = FDKreadBits(hBs, 8);
116203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
117203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  return ( FDKcrcStartReg(&pDrm->crcInfo, hBs, mBits) );
118203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
119203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi}
120203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
121203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivivoid drmRead_CrcEndReg(
122203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi                    HANDLE_DRM pDrm,             /*!< pointer to drm crc info stucture */
123203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi                    HANDLE_FDK_BITSTREAM hBs,    /*!< handle to current bit buffer structure */
124203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi                    int reg                      /*!< crc region */
125203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi                  )
126203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi{
127203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  FDK_ASSERT(pDrm != NULL);
128203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
129203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  FDKcrcEndReg(&pDrm->crcInfo, hBs, reg);
130203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi}
131203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
132203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel TriviTRANSPORTDEC_ERROR drmRead_CrcCheck( HANDLE_DRM pDrm )
133203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi{
134203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  TRANSPORTDEC_ERROR ErrorStatus = TRANSPORTDEC_OK;
135203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  USHORT crc;
136203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
137203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  crc = FDKcrcGetCRC(&pDrm->crcInfo) ^ 0xFF;
138203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  if (crc != pDrm->crcReadValue)
139203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  {
140203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi    return (TRANSPORTDEC_CRC_ERROR);
141203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  }
142203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
143203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi  return (ErrorStatus);
144203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi}
145203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
146203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi
147