1603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
2603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/* -----------------------------------------------------------------------------------------------------------
3603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviSoftware License for The Fraunhofer FDK AAC Codec Library for Android
4603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
5603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi� Copyright  1995 - 2013 Fraunhofer-Gesellschaft zur F�rderung der angewandten Forschung e.V.
6603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi  All rights reserved.
7603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
8603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi 1.    INTRODUCTION
9603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviThe Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
10603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivithe MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
11603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviThis FDK AAC Codec software is intended to be used on a wide variety of Android devices.
12603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
13603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviAAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
14603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviaudio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
15603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviindependent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
16603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviof the MPEG specifications.
17603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
18603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviPatent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
19603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivimay be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
20603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviindividually for the purpose of encoding or decoding bit streams in products that are compliant with
21603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivithe ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
22603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivithese patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
23603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivisoftware may already be covered under those patent licenses when it is used for those licensed purposes only.
24603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
25603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviCommercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
26603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviare also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
27603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviapplications information and documentation.
28603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
29603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi2.    COPYRIGHT LICENSE
30603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
31603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviRedistribution and use in source and binary forms, with or without modification, are permitted without
32603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivipayment of copyright license fees provided that you satisfy the following conditions:
33603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
34603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviYou must retain the complete text of this software license in redistributions of the FDK AAC Codec or
35603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviyour modifications thereto in source code form.
36603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
37603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviYou must retain the complete text of this software license in the documentation and/or other materials
38603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviprovided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
39603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviYou must make available free of charge copies of the complete source code of the FDK AAC Codec and your
40603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivimodifications thereto to recipients of copies in binary form.
41603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
42603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviThe name of Fraunhofer may not be used to endorse or promote products derived from this library without
43603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviprior written permission.
44603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
45603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviYou may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
46603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivisoftware or your modifications thereto.
47603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
48603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviYour modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
49603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviand the date of any change. For modified versions of the FDK AAC Codec, the term
50603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
51603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
52603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
53603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi3.    NO PATENT LICENSE
54603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
55603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviNO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
56603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
57603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivirespect to this software.
58603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
59603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviYou may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
60603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviby appropriate patent licenses.
61603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
62603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi4.    DISCLAIMER
63603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
64603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviThis FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
65603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
66603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviof merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
67603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviCONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
68603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviincluding but not limited to procurement of substitute goods or services; loss of use, data, or profits,
69603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivior business interruption, however caused and on any theory of liability, whether in contract, strict
70603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviliability, or tort (including negligence), arising in any way out of the use of this software, even if
71603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviadvised of the possibility of such damage.
72603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
73603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi5.    CONTACT INFORMATION
74603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
75603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviFraunhofer Institute for Integrated Circuits IIS
76603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviAttention: Audio and Multimedia Departments - FDK AAC LL
77603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviAm Wolfsmantel 33
78603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi91058 Erlangen, Germany
79603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
80603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviwww.iis.fraunhofer.de/amm
81603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviamm-info@iis.fraunhofer.de
82603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi----------------------------------------------------------------------------------------------------------- */
83603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
84603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/************************  FDK PCM postprocessor module  *********************
85603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
86603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi   Author(s):   Matthias Neusinger
87603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi   Description: Hard limiter for clipping prevention
88603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
89603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi*******************************************************************************/
90603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
91603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#ifndef _LIMITER_H_
92603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#define _LIMITER_H_
93603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
94603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
95603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#include "common_fix.h"
96603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
97603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#define TDL_ATTACK_DEFAULT_MS      (15)              /* default attack  time in ms */
98603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#define TDL_RELEASE_DEFAULT_MS     (50)              /* default release time in ms */
99603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
100603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#define TDL_GAIN_SCALING           (15)              /* scaling of gain value. */
101603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
102603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
103603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#ifdef __cplusplus
104603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviextern "C" {
105603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#endif
106603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
107603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
108603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivitypedef enum {
109603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi  TDLIMIT_OK = 0,
110603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
111603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi  __error_codes_start = -100,
112603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
113603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi  TDLIMIT_INVALID_HANDLE,
114603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi  TDLIMIT_INVALID_PARAMETER,
115603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
116603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi  __error_codes_end
117603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi} TDLIMITER_ERROR;
118603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
119603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivistruct TDLimiter;
120603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivitypedef struct TDLimiter* TDLimiterPtr;
121603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
122603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/******************************************************************************
123603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* createLimiter                                                               *
124603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* maxAttackMs:   maximum and initial attack/lookahead time in milliseconds    *
125603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* releaseMs:     release time in milliseconds (90% time constant)             *
126603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* threshold:     limiting threshold                                           *
127603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* maxChannels:   maximum and initial number of channels                       *
128603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* maxSampleRate: maximum and initial sampling rate in Hz                      *
129603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* returns:       limiter handle                                               *
130603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi******************************************************************************/
131603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviTDLimiterPtr createLimiter(unsigned int  maxAttackMs,
132603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi                           unsigned int  releaseMs,
133603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi                           INT_PCM       threshold,
134603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi                           unsigned int  maxChannels,
135603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi                           unsigned int  maxSampleRate);
136603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
137603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
138603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/******************************************************************************
139603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* resetLimiter                                                                *
140603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* limiter: limiter handle                                                     *
141603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* returns: error code                                                         *
142603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi******************************************************************************/
143603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviTDLIMITER_ERROR resetLimiter(TDLimiterPtr limiter);
144603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
145603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
146603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/******************************************************************************
147603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* destroyLimiter                                                              *
148603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* limiter: limiter handle                                                     *
149603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* returns: error code                                                         *
150603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi******************************************************************************/
151603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviTDLIMITER_ERROR destroyLimiter(TDLimiterPtr limiter);
152603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
153603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/******************************************************************************
154603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* applyLimiter                                                                *
155603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* limiter:    limiter handle                                                  *
156603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* pGain :     pointer to gains to be applied to the signal before limiting,   *
157603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi*             which are downscaled by TDL_GAIN_SCALING bit.                   *
158603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi*             These gains are delayed by gain_delay, and smoothed.            *
159603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi*             Smoothing is done by a butterworth lowpass filter with a cutoff *
160603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi*             frequency which is fixed with respect to the sampling rate.     *
161603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi*             It is a substitute for the smoothing due to windowing and       *
162603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi*             overlap/add, if a gain is applied in frequency domain.          *
163603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* gain_scale: pointer to scaling exponents to be applied to the signal before *
164603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi*             limiting, without delay and without smoothing                   *
165603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* gain_size:  number of elements in pGain, currently restricted to 1          *
166603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* gain_delay: delay [samples] with which the gains in pGain shall be applied  *
167603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi*             gain_delay <= nSamples                                          *
168603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* samples:    input/output buffer containing interleaved samples              *
169603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi*             precision of output will be DFRACT_BITS-TDL_GAIN_SCALING bits   *
170603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* nSamples:   number of samples per channel                                   *
171603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* returns:    error code                                                      *
172603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi******************************************************************************/
173603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviTDLIMITER_ERROR applyLimiter(TDLimiterPtr limiter,
174603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi                 INT_PCM*    samples,
175603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi                 FIXP_DBL*    pGain,
176603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi                 const INT*   gain_scale,
177603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi                 const UINT   gain_size,
178603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi                 const UINT   gain_delay,
179603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi                 const UINT   nSamples);
180603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
181603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/******************************************************************************
182603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* getLimiterDelay                                                             *
183603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* limiter: limiter handle                                                     *
184603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* returns: exact delay caused by the limiter in samples                       *
185603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi******************************************************************************/
186603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Triviunsigned int getLimiterDelay(TDLimiterPtr limiter);
187603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
188603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/******************************************************************************
189603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* setLimiterNChannels                                                         *
190603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* limiter:   limiter handle                                                   *
191603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* nChannels: number of channels ( <= maxChannels specified on create)         *
192603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* returns:   error code                                                       *
193603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi******************************************************************************/
194603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviTDLIMITER_ERROR setLimiterNChannels(TDLimiterPtr limiter, unsigned int nChannels);
195603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
196603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/******************************************************************************
197603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* setLimiterSampleRate                                                        *
198603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* limiter:    limiter handle                                                  *
199603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* sampleRate: sampling rate in Hz ( <= maxSampleRate specified on create)     *
200603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* returns:    error code                                                      *
201603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi******************************************************************************/
202603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviTDLIMITER_ERROR setLimiterSampleRate(TDLimiterPtr limiter, unsigned int sampleRate);
203603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
204603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/******************************************************************************
205603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* setLimiterAttack                                                            *
206603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* limiter:    limiter handle                                                  *
207603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* attackMs:   attack time in ms ( <= maxAttackMs specified on create)         *
208603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* returns:    error code                                                      *
209603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi******************************************************************************/
210603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviTDLIMITER_ERROR setLimiterAttack(TDLimiterPtr limiter, unsigned int attackMs);
211603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
212603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/******************************************************************************
213603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* setLimiterRelease                                                           *
214603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* limiter:    limiter handle                                                  *
215603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* releaseMs:  release time in ms                                              *
216603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* returns:    error code                                                      *
217603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi******************************************************************************/
218603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviTDLIMITER_ERROR setLimiterRelease(TDLimiterPtr limiter, unsigned int releaseMs);
219603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
220603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi/******************************************************************************
221603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* setLimiterThreshold                                                         *
222603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* limiter:    limiter handle                                                  *
223603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* threshold:  limiter threshold                                               *
224603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi* returns:    error code                                                      *
225603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi******************************************************************************/
226603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel TriviTDLIMITER_ERROR setLimiterThreshold(TDLimiterPtr limiter, INT_PCM threshold);
227603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
228603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#ifdef __cplusplus
229603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi}
230603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#endif
231603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
232603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi
233603f48ab99ce76f552f4f6f85d06b8c5b94c698eJean-Michel Trivi#endif  //#ifndef _LIMITER_H_
234