• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* -----------------------------------------------------------------------------
2 Software License for The Fraunhofer FDK AAC Codec Library for Android
3 
4 © Copyright  1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten
5 Forschung e.V. All rights reserved.
6 
7  1.    INTRODUCTION
8 The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software
9 that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding
10 scheme for digital audio. This FDK AAC Codec software is intended to be used on
11 a wide variety of Android devices.
12 
13 AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient
14 general perceptual audio codecs. AAC-ELD is considered the best-performing
15 full-bandwidth communications codec by independent studies and is widely
16 deployed. AAC has been standardized by ISO and IEC as part of the MPEG
17 specifications.
18 
19 Patent licenses for necessary patent claims for the FDK AAC Codec (including
20 those of Fraunhofer) may be obtained through Via Licensing
21 (www.vialicensing.com) or through the respective patent owners individually for
22 the purpose of encoding or decoding bit streams in products that are compliant
23 with the ISO/IEC MPEG audio standards. Please note that most manufacturers of
24 Android devices already license these patent claims through Via Licensing or
25 directly from the patent owners, and therefore FDK AAC Codec software may
26 already be covered under those patent licenses when it is used for those
27 licensed purposes only.
28 
29 Commercially-licensed AAC software libraries, including floating-point versions
30 with enhanced sound quality, are also available from Fraunhofer. Users are
31 encouraged to check the Fraunhofer website for additional applications
32 information and documentation.
33 
34 2.    COPYRIGHT LICENSE
35 
36 Redistribution and use in source and binary forms, with or without modification,
37 are permitted without payment of copyright license fees provided that you
38 satisfy the following conditions:
39 
40 You must retain the complete text of this software license in redistributions of
41 the FDK AAC Codec or your modifications thereto in source code form.
42 
43 You must retain the complete text of this software license in the documentation
44 and/or other materials provided with redistributions of the FDK AAC Codec or
45 your modifications thereto in binary form. You must make available free of
46 charge copies of the complete source code of the FDK AAC Codec and your
47 modifications thereto to recipients of copies in binary form.
48 
49 The name of Fraunhofer may not be used to endorse or promote products derived
50 from this library without prior written permission.
51 
52 You may not charge copyright license fees for anyone to use, copy or distribute
53 the FDK AAC Codec software or your modifications thereto.
54 
55 Your modified versions of the FDK AAC Codec must carry prominent notices stating
56 that you changed the software and the date of any change. For modified versions
57 of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android"
58 must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK
59 AAC Codec Library for Android."
60 
61 3.    NO PATENT LICENSE
62 
63 NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without
64 limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE.
65 Fraunhofer provides no warranty of patent non-infringement with respect to this
66 software.
67 
68 You may use this FDK AAC Codec software or modifications thereto only for
69 purposes that are authorized by appropriate patent licenses.
70 
71 4.    DISCLAIMER
72 
73 This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright
74 holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
75 including but not limited to the implied warranties of merchantability and
76 fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
77 CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary,
78 or consequential damages, including but not limited to procurement of substitute
79 goods or services; loss of use, data, or profits, or business interruption,
80 however caused and on any theory of liability, whether in contract, strict
81 liability, or tort (including negligence), arising in any way out of the use of
82 this software, even if advised of the possibility of such damage.
83 
84 5.    CONTACT INFORMATION
85 
86 Fraunhofer Institute for Integrated Circuits IIS
87 Attention: Audio and Multimedia Departments - FDK AAC LL
88 Am Wolfsmantel 33
89 91058 Erlangen, Germany
90 
91 www.iis.fraunhofer.de/amm
92 amm-info@iis.fraunhofer.de
93 ----------------------------------------------------------------------------- */
94 
95 /************************* MPEG-D DRC decoder library **************************
96 
97    Author(s):
98 
99    Description:
100 
101 *******************************************************************************/
102 
103 #ifndef DRCDEC_TYPES_H
104 #define DRCDEC_TYPES_H
105 
106 #include "common_fix.h"
107 
108 /* Data structures corresponding to static and dynamic DRC/Loudness payload
109    as defined in section 7 of MPEG-D DRC standard, ISO/IEC 23003-4 */
110 
111 /**************/
112 /* uniDrcGain */
113 /**************/
114 
115 typedef struct {
116   FIXP_SGL gainDb; /* e = 7 */
117   SHORT time;
118 } GAIN_NODE;
119 
120 /* uniDrcGainExtension() (Table 56) */
121 typedef struct {
122   UCHAR uniDrcGainExtType[8];
123   ULONG extBitSize[8 - 1];
124 } UNI_DRC_GAIN_EXTENSION;
125 
126 /* uniDrcGain() (Table 55) */
127 typedef struct {
128   UCHAR nNodes[12]; /* unsaturated value, i.e. as provided in bitstream */
129   GAIN_NODE gainNode[12][16];
130 
131   UCHAR uniDrcGainExtPresent;
132   UNI_DRC_GAIN_EXTENSION uniDrcGainExtension;
133 } UNI_DRC_GAIN, *HANDLE_UNI_DRC_GAIN;
134 
135 /****************/
136 /* uniDrcConfig */
137 /****************/
138 
139 typedef enum {
140   EB_NIGHT = 0x0001,
141   EB_NOISY = 0x0002,
142   EB_LIMITED = 0x0004,
143   EB_LOWLEVEL = 0x0008,
144   EB_DIALOG = 0x0010,
145   EB_GENERAL_COMPR = 0x0020,
146   EB_EXPAND = 0x0040,
147   EB_ARTISTIC = 0x0080,
148   EB_CLIPPING = 0x0100,
149   EB_FADE = 0x0200,
150   EB_DUCK_OTHER = 0x0400,
151   EB_DUCK_SELF = 0x0800
152 } EFFECT_BIT;
153 
154 typedef enum {
155   GCP_REGULAR = 0,
156   GCP_FADING = 1,
157   GCP_CLIPPING_DUCKING = 2,
158   GCP_CONSTANT = 3
159 } GAIN_CODING_PROFILE;
160 
161 typedef enum { GIT_SPLINE = 0, GIT_LINEAR = 1 } GAIN_INTERPOLATION_TYPE;
162 
163 typedef enum { CS_LEFT = 0, CS_RIGHT = 1 } CHARACTERISTIC_SIDE;
164 
165 typedef enum { CF_SIGMOID = 0, CF_NODES = 1 } CHARACTERISTIC_FORMAT;
166 
167 typedef enum {
168   GF_QMF32 = 0x1,
169   GF_QMFHYBRID39 = 0x2,
170   GF_QMF64 = 0x3,
171   GF_QMFHYBRID71 = 0x4,
172   GF_QMF128 = 0x5,
173   GF_QMFHYBRID135 = 0x6,
174   GF_UNIFORM = 0x7
175 } EQ_SUBBAND_GAIN_FORMAT;
176 
177 typedef struct {
178   UCHAR duckingScalingPresent;
179   FIXP_SGL duckingScaling; /* e = 2 */
180 } DUCKING_MODIFICATION;
181 
182 typedef struct {
183   UCHAR targetCharacteristicLeftPresent;
184   UCHAR targetCharacteristicLeftIndex;
185   UCHAR targetCharacteristicRightPresent;
186   UCHAR targetCharacteristicRightIndex;
187   UCHAR gainScalingPresent;
188   FIXP_SGL attenuationScaling;   /* e = 2 */
189   FIXP_SGL amplificationScaling; /* e = 2 */
190   UCHAR gainOffsetPresent;
191   FIXP_SGL gainOffset; /* e = 4 */
192 } GAIN_MODIFICATION;
193 
194 typedef union {
195   UCHAR crossoverFreqIndex;
196   USHORT startSubBandIndex;
197 } BAND_BORDER;
198 
199 typedef struct {
200   UCHAR left;
201   UCHAR right;
202 } CUSTOM_INDEX;
203 
204 typedef struct {
205   UCHAR present;
206   UCHAR isCICP;
207   union {
208     UCHAR cicpIndex;
209     CUSTOM_INDEX custom;
210   };
211 } DRC_CHARACTERISTIC;
212 
213 typedef struct {
214   UCHAR gainCodingProfile;
215   UCHAR gainInterpolationType;
216   UCHAR fullFrame;
217   UCHAR timeAlignment;
218   UCHAR timeDeltaMinPresent;
219   USHORT timeDeltaMin;
220   UCHAR bandCount;
221   UCHAR drcBandType;
222   UCHAR gainSequenceIndex[4];
223   DRC_CHARACTERISTIC drcCharacteristic[4];
224   BAND_BORDER bandBorder[4];
225 } GAIN_SET;
226 
227 typedef struct {
228   FIXP_SGL gain;    /* e = 6 */
229   FIXP_SGL ioRatio; /* e = 2 */
230   FIXP_SGL exp;     /* e = 5 */
231   UCHAR flipSign;
232 } CUSTOM_DRC_CHAR_SIGMOID;
233 
234 typedef struct {
235   UCHAR characteristicNodeCount;
236   FIXP_SGL nodeLevel[4 + 1]; /* e = 7 */
237   FIXP_SGL nodeGain[4 + 1];  /* e = 7 */
238 } CUSTOM_DRC_CHAR_NODES;
239 
240 typedef shouldBeUnion {
241   CUSTOM_DRC_CHAR_SIGMOID sigmoid;
242   CUSTOM_DRC_CHAR_NODES nodes;
243 }
244 CUSTOM_DRC_CHAR;
245 
246 /* drcCoefficientsUniDrc() (Table 67) */
247 typedef struct {
248   UCHAR drcLocation;
249   UCHAR drcFrameSizePresent;
250   USHORT drcFrameSize;
251   UCHAR characteristicLeftCount;
252   UCHAR characteristicLeftFormat[8];
253   CUSTOM_DRC_CHAR customCharacteristicLeft[8];
254   UCHAR characteristicRightCount;
255   UCHAR characteristicRightFormat[8];
256   CUSTOM_DRC_CHAR customCharacteristicRight[8];
257   UCHAR
258   gainSequenceCount;  /* unsaturated value, i.e. as provided in bitstream */
259   UCHAR gainSetCount; /* saturated to 12 */
260   GAIN_SET gainSet[12];
261   /* derived data */
262   UCHAR gainSetIndexForGainSequence[12];
263 } DRC_COEFFICIENTS_UNI_DRC;
264 
265 /* drcInstructionsUniDrc() (Table 72) */
266 typedef struct {
267   SCHAR drcSetId;
268   UCHAR drcSetComplexityLevel;
269   UCHAR drcLocation;
270   UCHAR drcApplyToDownmix;
271   UCHAR downmixIdCount;
272   UCHAR downmixId[8];
273   USHORT drcSetEffect;
274   UCHAR limiterPeakTargetPresent;
275   FIXP_SGL limiterPeakTarget; /* e = 5 */
276   UCHAR drcSetTargetLoudnessPresent;
277   SCHAR drcSetTargetLoudnessValueUpper;
278   SCHAR drcSetTargetLoudnessValueLower;
279   UCHAR dependsOnDrcSetPresent;
280   union {
281     SCHAR dependsOnDrcSet;
282     UCHAR noIndependentUse;
283   };
284   UCHAR requiresEq;
285   shouldBeUnion {
286     GAIN_MODIFICATION gainModificationForChannelGroup[8][4];
287     DUCKING_MODIFICATION duckingModificationForChannel[8];
288   };
289   SCHAR gainSetIndex[8];
290 
291   /* derived data */
292   UCHAR drcChannelCount;
293   UCHAR nDrcChannelGroups;
294   SCHAR gainSetIndexForChannelGroup[8];
295 } DRC_INSTRUCTIONS_UNI_DRC;
296 
297 /* channelLayout() (Table 62) */
298 typedef struct {
299   UCHAR baseChannelCount;
300   UCHAR layoutSignalingPresent;
301   UCHAR definedLayout;
302   UCHAR speakerPosition[8];
303 } CHANNEL_LAYOUT;
304 
305 /* downmixInstructions() (Table 63) */
306 typedef struct {
307   UCHAR downmixId;
308   UCHAR targetChannelCount;
309   UCHAR targetLayout;
310   UCHAR downmixCoefficientsPresent;
311   UCHAR bsDownmixOffset;
312   FIXP_DBL downmixCoefficient[8 * 8]; /* e = 2 */
313 } DOWNMIX_INSTRUCTIONS;
314 
315 typedef struct {
316   UCHAR uniDrcConfigExtType[8];
317   ULONG extBitSize[8 - 1];
318 } UNI_DRC_CONFIG_EXTENSION;
319 
320 /* uniDrcConfig() (Table 57) */
321 typedef struct {
322   UCHAR sampleRatePresent;
323   ULONG sampleRate;
324   UCHAR downmixInstructionsCountV0;
325   UCHAR downmixInstructionsCountV1;
326   UCHAR downmixInstructionsCount; /* saturated to 6 */
327   UCHAR drcCoefficientsUniDrcCountV0;
328   UCHAR drcCoefficientsUniDrcCountV1;
329   UCHAR drcCoefficientsUniDrcCount; /* saturated to 2 */
330   UCHAR drcInstructionsUniDrcCountV0;
331   UCHAR drcInstructionsUniDrcCountV1;
332   UCHAR drcInstructionsUniDrcCount; /* saturated to (12 + 1 + 6) */
333   CHANNEL_LAYOUT channelLayout;
334   DOWNMIX_INSTRUCTIONS downmixInstructions[6];
335   DRC_COEFFICIENTS_UNI_DRC drcCoefficientsUniDrc[2];
336   DRC_INSTRUCTIONS_UNI_DRC drcInstructionsUniDrc[(12 + 1 + 6)];
337   UCHAR uniDrcConfigExtPresent;
338   UNI_DRC_CONFIG_EXTENSION uniDrcConfigExt;
339 
340   /* derived data */
341   UCHAR drcInstructionsCountInclVirtual;
342   UCHAR diff;
343 } UNI_DRC_CONFIG, *HANDLE_UNI_DRC_CONFIG;
344 
345 /*******************/
346 /* loudnessInfoSet */
347 /*******************/
348 
349 typedef enum {
350   MD_UNKNOWN_OTHER = 0,
351   MD_PROGRAM_LOUDNESS = 1,
352   MD_ANCHOR_LOUDNESS = 2,
353   MD_MAX_OF_LOUDNESS_RANGE = 3,
354   MD_MOMENTARY_LOUDNESS_MAX = 4,
355   MD_SHORT_TERM_LOUDNESS_MAX = 5,
356   MD_LOUDNESS_RANGE = 6,
357   MD_MIXING_LEVEL = 7,
358   MD_ROOM_TYPE = 8,
359   MD_SHORT_TERM_LOUDNESS = 9
360 } METHOD_DEFINITION;
361 
362 typedef enum {
363   MS_UNKNOWN_OTHER = 0,
364   MS_EBU_R_128 = 1,
365   MS_BS_1770_4 = 2,
366   MS_BS_1770_4_PRE_PROCESSING = 3,
367   MS_USER = 4,
368   MS_EXPERT_PANEL = 5,
369   MS_BS_1771_1 = 6,
370   MS_RESERVED_A = 7,
371   MS_RESERVED_B = 8,
372   MS_RESERVED_C = 9,
373   MS_RESERVED_D = 10,
374   MS_RESERVED_E = 11
375 } MEASUREMENT_SYSTEM;
376 
377 typedef enum {
378   R_UKNOWN = 0,
379   R_UNVERIFIED = 1,
380   R_CEILING = 2,
381   R_ACCURATE = 3
382 } RELIABILITY;
383 
384 typedef struct {
385   UCHAR methodDefinition;
386   FIXP_DBL methodValue; /* e = 7 for all methodDefinitions */
387   UCHAR measurementSystem;
388   UCHAR reliability;
389 } LOUDNESS_MEASUREMENT;
390 
391 /* loudnessInfo() (Table 59) */
392 typedef struct {
393   SCHAR drcSetId;
394   UCHAR eqSetId;
395   UCHAR downmixId;
396   UCHAR samplePeakLevelPresent;
397   FIXP_DBL samplePeakLevel; /* e = 7 */
398   UCHAR truePeakLevelPresent;
399   FIXP_DBL truePeakLevel; /* e = 7 */
400   UCHAR truePeakLevelMeasurementSystem;
401   UCHAR truePeakLevelReliability;
402   UCHAR measurementCount; /* saturated to 8 */
403   LOUDNESS_MEASUREMENT loudnessMeasurement[8];
404 } LOUDNESS_INFO;
405 
406 /* loudnessInfoSetExtension() (Table 61) */
407 typedef struct {
408   UCHAR loudnessInfoSetExtType[8];
409   ULONG extBitSize[8 - 1];
410 } LOUDNESS_INFO_SET_EXTENSION;
411 
412 /* loudnessInfoSet() (Table 58) */
413 typedef struct {
414   UCHAR loudnessInfoAlbumCountV0;
415   UCHAR loudnessInfoAlbumCountV1;
416   UCHAR loudnessInfoAlbumCount; /* saturated to 12 */
417   UCHAR loudnessInfoCountV0;
418   UCHAR loudnessInfoCountV1;
419   UCHAR loudnessInfoCount; /* saturated to 12 */
420   LOUDNESS_INFO loudnessInfoAlbum[12];
421   LOUDNESS_INFO loudnessInfo[12];
422   UCHAR loudnessInfoSetExtPresent;
423   LOUDNESS_INFO_SET_EXTENSION loudnessInfoSetExt;
424   /* derived data */
425   UCHAR diff;
426 } LOUDNESS_INFO_SET, *HANDLE_LOUDNESS_INFO_SET;
427 
428 #endif
429