xref: /aosp_15_r20/external/aac/libSACenc/include/sacenc_lib.h (revision e54365361535b070c2db7374cec45c159c7d0e7a)
1*e5436536SAndroid Build Coastguard Worker /* -----------------------------------------------------------------------------
2*e5436536SAndroid Build Coastguard Worker Software License for The Fraunhofer FDK AAC Codec Library for Android
3*e5436536SAndroid Build Coastguard Worker 
4*e5436536SAndroid Build Coastguard Worker © Copyright  1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten
5*e5436536SAndroid Build Coastguard Worker Forschung e.V. All rights reserved.
6*e5436536SAndroid Build Coastguard Worker 
7*e5436536SAndroid Build Coastguard Worker  1.    INTRODUCTION
8*e5436536SAndroid Build Coastguard Worker The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software
9*e5436536SAndroid Build Coastguard Worker that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding
10*e5436536SAndroid Build Coastguard Worker scheme for digital audio. This FDK AAC Codec software is intended to be used on
11*e5436536SAndroid Build Coastguard Worker a wide variety of Android devices.
12*e5436536SAndroid Build Coastguard Worker 
13*e5436536SAndroid Build Coastguard Worker AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient
14*e5436536SAndroid Build Coastguard Worker general perceptual audio codecs. AAC-ELD is considered the best-performing
15*e5436536SAndroid Build Coastguard Worker full-bandwidth communications codec by independent studies and is widely
16*e5436536SAndroid Build Coastguard Worker deployed. AAC has been standardized by ISO and IEC as part of the MPEG
17*e5436536SAndroid Build Coastguard Worker specifications.
18*e5436536SAndroid Build Coastguard Worker 
19*e5436536SAndroid Build Coastguard Worker Patent licenses for necessary patent claims for the FDK AAC Codec (including
20*e5436536SAndroid Build Coastguard Worker those of Fraunhofer) may be obtained through Via Licensing
21*e5436536SAndroid Build Coastguard Worker (www.vialicensing.com) or through the respective patent owners individually for
22*e5436536SAndroid Build Coastguard Worker the purpose of encoding or decoding bit streams in products that are compliant
23*e5436536SAndroid Build Coastguard Worker with the ISO/IEC MPEG audio standards. Please note that most manufacturers of
24*e5436536SAndroid Build Coastguard Worker Android devices already license these patent claims through Via Licensing or
25*e5436536SAndroid Build Coastguard Worker directly from the patent owners, and therefore FDK AAC Codec software may
26*e5436536SAndroid Build Coastguard Worker already be covered under those patent licenses when it is used for those
27*e5436536SAndroid Build Coastguard Worker licensed purposes only.
28*e5436536SAndroid Build Coastguard Worker 
29*e5436536SAndroid Build Coastguard Worker Commercially-licensed AAC software libraries, including floating-point versions
30*e5436536SAndroid Build Coastguard Worker with enhanced sound quality, are also available from Fraunhofer. Users are
31*e5436536SAndroid Build Coastguard Worker encouraged to check the Fraunhofer website for additional applications
32*e5436536SAndroid Build Coastguard Worker information and documentation.
33*e5436536SAndroid Build Coastguard Worker 
34*e5436536SAndroid Build Coastguard Worker 2.    COPYRIGHT LICENSE
35*e5436536SAndroid Build Coastguard Worker 
36*e5436536SAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without modification,
37*e5436536SAndroid Build Coastguard Worker are permitted without payment of copyright license fees provided that you
38*e5436536SAndroid Build Coastguard Worker satisfy the following conditions:
39*e5436536SAndroid Build Coastguard Worker 
40*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in redistributions of
41*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec or your modifications thereto in source code form.
42*e5436536SAndroid Build Coastguard Worker 
43*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in the documentation
44*e5436536SAndroid Build Coastguard Worker and/or other materials provided with redistributions of the FDK AAC Codec or
45*e5436536SAndroid Build Coastguard Worker your modifications thereto in binary form. You must make available free of
46*e5436536SAndroid Build Coastguard Worker charge copies of the complete source code of the FDK AAC Codec and your
47*e5436536SAndroid Build Coastguard Worker modifications thereto to recipients of copies in binary form.
48*e5436536SAndroid Build Coastguard Worker 
49*e5436536SAndroid Build Coastguard Worker The name of Fraunhofer may not be used to endorse or promote products derived
50*e5436536SAndroid Build Coastguard Worker from this library without prior written permission.
51*e5436536SAndroid Build Coastguard Worker 
52*e5436536SAndroid Build Coastguard Worker You may not charge copyright license fees for anyone to use, copy or distribute
53*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec software or your modifications thereto.
54*e5436536SAndroid Build Coastguard Worker 
55*e5436536SAndroid Build Coastguard Worker Your modified versions of the FDK AAC Codec must carry prominent notices stating
56*e5436536SAndroid Build Coastguard Worker that you changed the software and the date of any change. For modified versions
57*e5436536SAndroid Build Coastguard Worker of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android"
58*e5436536SAndroid Build Coastguard Worker must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK
59*e5436536SAndroid Build Coastguard Worker AAC Codec Library for Android."
60*e5436536SAndroid Build Coastguard Worker 
61*e5436536SAndroid Build Coastguard Worker 3.    NO PATENT LICENSE
62*e5436536SAndroid Build Coastguard Worker 
63*e5436536SAndroid Build Coastguard Worker NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without
64*e5436536SAndroid Build Coastguard Worker limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE.
65*e5436536SAndroid Build Coastguard Worker Fraunhofer provides no warranty of patent non-infringement with respect to this
66*e5436536SAndroid Build Coastguard Worker software.
67*e5436536SAndroid Build Coastguard Worker 
68*e5436536SAndroid Build Coastguard Worker You may use this FDK AAC Codec software or modifications thereto only for
69*e5436536SAndroid Build Coastguard Worker purposes that are authorized by appropriate patent licenses.
70*e5436536SAndroid Build Coastguard Worker 
71*e5436536SAndroid Build Coastguard Worker 4.    DISCLAIMER
72*e5436536SAndroid Build Coastguard Worker 
73*e5436536SAndroid Build Coastguard Worker This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright
74*e5436536SAndroid Build Coastguard Worker holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
75*e5436536SAndroid Build Coastguard Worker including but not limited to the implied warranties of merchantability and
76*e5436536SAndroid Build Coastguard Worker fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
77*e5436536SAndroid Build Coastguard Worker CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary,
78*e5436536SAndroid Build Coastguard Worker or consequential damages, including but not limited to procurement of substitute
79*e5436536SAndroid Build Coastguard Worker goods or services; loss of use, data, or profits, or business interruption,
80*e5436536SAndroid Build Coastguard Worker however caused and on any theory of liability, whether in contract, strict
81*e5436536SAndroid Build Coastguard Worker liability, or tort (including negligence), arising in any way out of the use of
82*e5436536SAndroid Build Coastguard Worker this software, even if advised of the possibility of such damage.
83*e5436536SAndroid Build Coastguard Worker 
84*e5436536SAndroid Build Coastguard Worker 5.    CONTACT INFORMATION
85*e5436536SAndroid Build Coastguard Worker 
86*e5436536SAndroid Build Coastguard Worker Fraunhofer Institute for Integrated Circuits IIS
87*e5436536SAndroid Build Coastguard Worker Attention: Audio and Multimedia Departments - FDK AAC LL
88*e5436536SAndroid Build Coastguard Worker Am Wolfsmantel 33
89*e5436536SAndroid Build Coastguard Worker 91058 Erlangen, Germany
90*e5436536SAndroid Build Coastguard Worker 
91*e5436536SAndroid Build Coastguard Worker www.iis.fraunhofer.de/amm
92*e5436536SAndroid Build Coastguard Worker [email protected]
93*e5436536SAndroid Build Coastguard Worker ----------------------------------------------------------------------------- */
94*e5436536SAndroid Build Coastguard Worker 
95*e5436536SAndroid Build Coastguard Worker /*********************** MPEG surround encoder library *************************
96*e5436536SAndroid Build Coastguard Worker 
97*e5436536SAndroid Build Coastguard Worker    Author(s):   Max Neuendorf
98*e5436536SAndroid Build Coastguard Worker 
99*e5436536SAndroid Build Coastguard Worker    Description: Encoder Library Interface
100*e5436536SAndroid Build Coastguard Worker                 Encoder API
101*e5436536SAndroid Build Coastguard Worker 
102*e5436536SAndroid Build Coastguard Worker *******************************************************************************/
103*e5436536SAndroid Build Coastguard Worker 
104*e5436536SAndroid Build Coastguard Worker /**************************************************************************/ /**
105*e5436536SAndroid Build Coastguard Worker    \file
106*e5436536SAndroid Build Coastguard Worker  ******************************************************************************/
107*e5436536SAndroid Build Coastguard Worker 
108*e5436536SAndroid Build Coastguard Worker #ifndef SACENC_LIB_H
109*e5436536SAndroid Build Coastguard Worker #define SACENC_LIB_H
110*e5436536SAndroid Build Coastguard Worker 
111*e5436536SAndroid Build Coastguard Worker /* Includes ******************************************************************/
112*e5436536SAndroid Build Coastguard Worker #include "machine_type.h"
113*e5436536SAndroid Build Coastguard Worker #include "FDK_audio.h"
114*e5436536SAndroid Build Coastguard Worker 
115*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus
116*e5436536SAndroid Build Coastguard Worker extern "C" {
117*e5436536SAndroid Build Coastguard Worker #endif
118*e5436536SAndroid Build Coastguard Worker /* Defines *******************************************************************/
119*e5436536SAndroid Build Coastguard Worker 
120*e5436536SAndroid Build Coastguard Worker /* Data Types ****************************************************************/
121*e5436536SAndroid Build Coastguard Worker 
122*e5436536SAndroid Build Coastguard Worker /**
123*e5436536SAndroid Build Coastguard Worker  *  Space encoder error codes.
124*e5436536SAndroid Build Coastguard Worker  */
125*e5436536SAndroid Build Coastguard Worker typedef enum {
126*e5436536SAndroid Build Coastguard Worker   SACENC_OK = 0x00000000, /*!< No error happened. All fine. */
127*e5436536SAndroid Build Coastguard Worker   SACENC_INVALID_HANDLE =
128*e5436536SAndroid Build Coastguard Worker       0x00000080, /*!< Handle passed to function call was invalid. */
129*e5436536SAndroid Build Coastguard Worker   SACENC_MEMORY_ERROR = 0x00000800, /*!< Memory allocation failed. */
130*e5436536SAndroid Build Coastguard Worker   SACENC_INIT_ERROR = 0x00008000,   /*!< General initialization error. */
131*e5436536SAndroid Build Coastguard Worker   SACENC_ENCODE_ERROR =
132*e5436536SAndroid Build Coastguard Worker       0x00080000, /*!< The encoding process was interrupted by an unexpected
133*e5436536SAndroid Build Coastguard Worker                      error. */
134*e5436536SAndroid Build Coastguard Worker   SACENC_PARAM_ERROR = 0x00800000,           /*!< Invalid runtime parameter. */
135*e5436536SAndroid Build Coastguard Worker   SACENC_UNSUPPORTED_PARAMETER = 0x00800001, /*!< Parameter not available. */
136*e5436536SAndroid Build Coastguard Worker   SACENC_INVALID_CONFIG = 0x00800002,        /*!< Configuration not provided. */
137*e5436536SAndroid Build Coastguard Worker   SACENC_UNKNOWN_ERROR = 0x08000000          /*!< Unknown error. */
138*e5436536SAndroid Build Coastguard Worker 
139*e5436536SAndroid Build Coastguard Worker } FDK_SACENC_ERROR;
140*e5436536SAndroid Build Coastguard Worker 
141*e5436536SAndroid Build Coastguard Worker typedef enum {
142*e5436536SAndroid Build Coastguard Worker   SACENC_INVALID_MODE = 0,
143*e5436536SAndroid Build Coastguard Worker   SACENC_212 = 8,
144*e5436536SAndroid Build Coastguard Worker   SACENC_ESCAPE = 15
145*e5436536SAndroid Build Coastguard Worker 
146*e5436536SAndroid Build Coastguard Worker } MP4SPACEENC_MODE;
147*e5436536SAndroid Build Coastguard Worker 
148*e5436536SAndroid Build Coastguard Worker typedef enum {
149*e5436536SAndroid Build Coastguard Worker   SACENC_BANDS_INVALID = 0,
150*e5436536SAndroid Build Coastguard Worker   SACENC_BANDS_4 = 4,
151*e5436536SAndroid Build Coastguard Worker   SACENC_BANDS_5 = 5,
152*e5436536SAndroid Build Coastguard Worker   SACENC_BANDS_7 = 7,
153*e5436536SAndroid Build Coastguard Worker   SACENC_BANDS_9 = 9,
154*e5436536SAndroid Build Coastguard Worker   SACENC_BANDS_12 = 12,
155*e5436536SAndroid Build Coastguard Worker   SACENC_BANDS_15 = 15,
156*e5436536SAndroid Build Coastguard Worker   SACENC_BANDS_23 = 23
157*e5436536SAndroid Build Coastguard Worker 
158*e5436536SAndroid Build Coastguard Worker } MP4SPACEENC_BANDS_CONFIG;
159*e5436536SAndroid Build Coastguard Worker 
160*e5436536SAndroid Build Coastguard Worker typedef enum {
161*e5436536SAndroid Build Coastguard Worker   SACENC_QUANTMODE_INVALID = -1,
162*e5436536SAndroid Build Coastguard Worker   SACENC_QUANTMODE_FINE = 0,
163*e5436536SAndroid Build Coastguard Worker   SACENC_QUANTMODE_EBQ1 = 1,
164*e5436536SAndroid Build Coastguard Worker   SACENC_QUANTMODE_EBQ2 = 2,
165*e5436536SAndroid Build Coastguard Worker   SACENC_QUANTMODE_RSVD3 = 3
166*e5436536SAndroid Build Coastguard Worker 
167*e5436536SAndroid Build Coastguard Worker } MP4SPACEENC_QUANTMODE;
168*e5436536SAndroid Build Coastguard Worker 
169*e5436536SAndroid Build Coastguard Worker typedef enum {
170*e5436536SAndroid Build Coastguard Worker   SACENC_DMXGAIN_INVALID = -1,
171*e5436536SAndroid Build Coastguard Worker   SACENC_DMXGAIN_0_dB = 0,
172*e5436536SAndroid Build Coastguard Worker   SACENC_DMXGAIN_1_5_dB = 1,
173*e5436536SAndroid Build Coastguard Worker   SACENC_DMXGAIN_3_dB = 2,
174*e5436536SAndroid Build Coastguard Worker   SACENC_DMXGAIN_4_5_dB = 3,
175*e5436536SAndroid Build Coastguard Worker   SACENC_DMXGAIN_6_dB = 4,
176*e5436536SAndroid Build Coastguard Worker   SACENC_DMXGAIN_7_5_dB = 5,
177*e5436536SAndroid Build Coastguard Worker   SACENC_DMXGAIN_9_dB = 6,
178*e5436536SAndroid Build Coastguard Worker   SACENC_DMXGAIN_12_dB = 7
179*e5436536SAndroid Build Coastguard Worker 
180*e5436536SAndroid Build Coastguard Worker } MP4SPACEENC_DMX_GAIN;
181*e5436536SAndroid Build Coastguard Worker 
182*e5436536SAndroid Build Coastguard Worker /**
183*e5436536SAndroid Build Coastguard Worker  * \brief  Space Encoder setting parameters.
184*e5436536SAndroid Build Coastguard Worker  *
185*e5436536SAndroid Build Coastguard Worker  * Use FDK_sacenc_setParam() function to configure the internal status of the
186*e5436536SAndroid Build Coastguard Worker  * following parameters.
187*e5436536SAndroid Build Coastguard Worker  */
188*e5436536SAndroid Build Coastguard Worker typedef enum {
189*e5436536SAndroid Build Coastguard Worker   SACENC_LOWDELAY, /*!< Configure lowdelay MPEG Surround.
190*e5436536SAndroid Build Coastguard Worker                         - 0: Disable Lowdelay. (default)
191*e5436536SAndroid Build Coastguard Worker                         - 1: Enable Lowdelay.
192*e5436536SAndroid Build Coastguard Worker                         - 2: Enable Lowdelay including keep frame. */
193*e5436536SAndroid Build Coastguard Worker 
194*e5436536SAndroid Build Coastguard Worker   SACENC_ENC_MODE, /*!< Configure encoder tree mode. See ::MP4SPACEENC_MODE for
195*e5436536SAndroid Build Coastguard Worker                       available values. */
196*e5436536SAndroid Build Coastguard Worker 
197*e5436536SAndroid Build Coastguard Worker   SACENC_SAMPLERATE, /*!< Configure encoder sampling rate. */
198*e5436536SAndroid Build Coastguard Worker 
199*e5436536SAndroid Build Coastguard Worker   SACENC_FRAME_TIME_SLOTS, /*!< Configure number of slots per spatial frame. */
200*e5436536SAndroid Build Coastguard Worker 
201*e5436536SAndroid Build Coastguard Worker   SACENC_PARAM_BANDS, /*!< Configure number of parameter bands. See
202*e5436536SAndroid Build Coastguard Worker                          ::MP4SPACEENC_BANDS_CONFIG for available values. */
203*e5436536SAndroid Build Coastguard Worker 
204*e5436536SAndroid Build Coastguard Worker   SACENC_TIME_DOM_DMX, /*!< Configure time domain downmix.
205*e5436536SAndroid Build Coastguard Worker                             - 0: No time domain downmix. (default)
206*e5436536SAndroid Build Coastguard Worker                             - 1: Static time domain downmix.
207*e5436536SAndroid Build Coastguard Worker                             - 2: Enhanced time domain downmix, stereo to mono
208*e5436536SAndroid Build Coastguard Worker                           only. */
209*e5436536SAndroid Build Coastguard Worker 
210*e5436536SAndroid Build Coastguard Worker   SACENC_DMX_GAIN, /*!< Configure downmix gain. See ::MP4SPACEENC_DMX_GAIN for
211*e5436536SAndroid Build Coastguard Worker                       available values. */
212*e5436536SAndroid Build Coastguard Worker 
213*e5436536SAndroid Build Coastguard Worker   SACENC_COARSE_QUANT, /*!< Use coarse parameter quantization.
214*e5436536SAndroid Build Coastguard Worker                             - 0: No (default)
215*e5436536SAndroid Build Coastguard Worker                             - 1: Yes */
216*e5436536SAndroid Build Coastguard Worker 
217*e5436536SAndroid Build Coastguard Worker   SACENC_QUANT_MODE, /*!< Configure quanitzation mode. See
218*e5436536SAndroid Build Coastguard Worker                         ::MP4SPACEENC_QUANTMODE for available values. */
219*e5436536SAndroid Build Coastguard Worker 
220*e5436536SAndroid Build Coastguard Worker   SACENC_TIME_ALIGNMENT, /*!< Configure time alignment in samples. */
221*e5436536SAndroid Build Coastguard Worker 
222*e5436536SAndroid Build Coastguard Worker   SACENC_INDEPENDENCY_COUNT, /*!< Configure the independency count. (count == 0
223*e5436536SAndroid Build Coastguard Worker                                 means independencyFlag == 1) */
224*e5436536SAndroid Build Coastguard Worker 
225*e5436536SAndroid Build Coastguard Worker   SACENC_INDEPENDENCY_FACTOR, /*!< How often should we set the independency flag
226*e5436536SAndroid Build Coastguard Worker                                */
227*e5436536SAndroid Build Coastguard Worker 
228*e5436536SAndroid Build Coastguard Worker   SACENC_NONE /*!< ------ */
229*e5436536SAndroid Build Coastguard Worker 
230*e5436536SAndroid Build Coastguard Worker } SPACEENC_PARAM;
231*e5436536SAndroid Build Coastguard Worker 
232*e5436536SAndroid Build Coastguard Worker /**
233*e5436536SAndroid Build Coastguard Worker  *  Describes Spatial Specific Config.
234*e5436536SAndroid Build Coastguard Worker  */
235*e5436536SAndroid Build Coastguard Worker typedef struct {
236*e5436536SAndroid Build Coastguard Worker   INT nSscSizeBits; /*!< Number of valid bits in pSsc buffer. */
237*e5436536SAndroid Build Coastguard Worker   UCHAR *pSsc;      /*!< SpatialSpecificConfig buffer in binary format. */
238*e5436536SAndroid Build Coastguard Worker 
239*e5436536SAndroid Build Coastguard Worker } MPEG4SPACEENC_SSCBUF;
240*e5436536SAndroid Build Coastguard Worker 
241*e5436536SAndroid Build Coastguard Worker /**
242*e5436536SAndroid Build Coastguard Worker  *  Provides some info about the encoder configuration.
243*e5436536SAndroid Build Coastguard Worker  */
244*e5436536SAndroid Build Coastguard Worker typedef struct {
245*e5436536SAndroid Build Coastguard Worker   INT nSampleRate;         /*!< Configured sampling rate.*/
246*e5436536SAndroid Build Coastguard Worker   INT nSamplesFrame;       /*!< Frame length in samples. */
247*e5436536SAndroid Build Coastguard Worker   INT nTotalInputChannels; /*!< Number of expected audio input channels. */
248*e5436536SAndroid Build Coastguard Worker   INT nDmxDelay;           /*!< Delay of the downmixed signal. */
249*e5436536SAndroid Build Coastguard Worker   INT nCodecDelay;         /*!< Delay of the whole en-/decoded signal, including
250*e5436536SAndroid Build Coastguard Worker                               core-coder delay. */
251*e5436536SAndroid Build Coastguard Worker   INT nDecoderDelay;       /*!< Delay added by the MP4SPACE decoder. */
252*e5436536SAndroid Build Coastguard Worker   INT nPayloadDelay;       /*!< Delay of the payload. */
253*e5436536SAndroid Build Coastguard Worker   INT nDiscardOutFrames; /*!< Number of dmx frames to discard for alignment with
254*e5436536SAndroid Build Coastguard Worker                             bitstream. */
255*e5436536SAndroid Build Coastguard Worker 
256*e5436536SAndroid Build Coastguard Worker   MPEG4SPACEENC_SSCBUF
257*e5436536SAndroid Build Coastguard Worker   *pSscBuf; /*!< Pointer to Spatial Specific Config structure. */
258*e5436536SAndroid Build Coastguard Worker 
259*e5436536SAndroid Build Coastguard Worker } MP4SPACEENC_INFO;
260*e5436536SAndroid Build Coastguard Worker 
261*e5436536SAndroid Build Coastguard Worker /**
262*e5436536SAndroid Build Coastguard Worker  *  MPEG Surround encoder handle.
263*e5436536SAndroid Build Coastguard Worker  */
264*e5436536SAndroid Build Coastguard Worker typedef struct MP4SPACE_ENCODER *HANDLE_MP4SPACE_ENCODER;
265*e5436536SAndroid Build Coastguard Worker 
266*e5436536SAndroid Build Coastguard Worker /**
267*e5436536SAndroid Build Coastguard Worker  *  Defines the input arguments for a FDK_sacenc_encode() call.
268*e5436536SAndroid Build Coastguard Worker  */
269*e5436536SAndroid Build Coastguard Worker typedef struct {
270*e5436536SAndroid Build Coastguard Worker   INT nInputSamples; /*!< Number of valid input audio samples (multiple of input
271*e5436536SAndroid Build Coastguard Worker                         channels). */
272*e5436536SAndroid Build Coastguard Worker   UINT inputBufferSizePerChannel; /*!< Size of input buffer (input audio
273*e5436536SAndroid Build Coastguard Worker                                      samples) per channel. */
274*e5436536SAndroid Build Coastguard Worker   UINT isInputInterleaved; /*!< Indicates if input audio samples are represented
275*e5436536SAndroid Build Coastguard Worker                               in blocks or interleaved:
276*e5436536SAndroid Build Coastguard Worker                                 - 0 : in blocks.
277*e5436536SAndroid Build Coastguard Worker                                 - 1 : interleaved. */
278*e5436536SAndroid Build Coastguard Worker 
279*e5436536SAndroid Build Coastguard Worker } SACENC_InArgs;
280*e5436536SAndroid Build Coastguard Worker 
281*e5436536SAndroid Build Coastguard Worker /**
282*e5436536SAndroid Build Coastguard Worker  *  Defines the output arguments for a FDK_sacenc_encode() call.
283*e5436536SAndroid Build Coastguard Worker  */
284*e5436536SAndroid Build Coastguard Worker typedef struct {
285*e5436536SAndroid Build Coastguard Worker   INT nOutputBits;    /*!< Number of valid payload bits generated during
286*e5436536SAndroid Build Coastguard Worker                          FDK_sacenc_encode(). */
287*e5436536SAndroid Build Coastguard Worker   INT nOutputSamples; /*!< Number of valid output audio samples generated during
288*e5436536SAndroid Build Coastguard Worker                          FDK_sacenc_encode(). */
289*e5436536SAndroid Build Coastguard Worker   UINT nSamplesConsumed; /*!< Number of input audio samples consumed in
290*e5436536SAndroid Build Coastguard Worker                             FDK_sacenc_encode(). */
291*e5436536SAndroid Build Coastguard Worker 
292*e5436536SAndroid Build Coastguard Worker } SACENC_OutArgs;
293*e5436536SAndroid Build Coastguard Worker 
294*e5436536SAndroid Build Coastguard Worker /* Constants *****************************************************************/
295*e5436536SAndroid Build Coastguard Worker 
296*e5436536SAndroid Build Coastguard Worker /* Function / Class Declarations *********************************************/
297*e5436536SAndroid Build Coastguard Worker 
298*e5436536SAndroid Build Coastguard Worker /**
299*e5436536SAndroid Build Coastguard Worker  * \brief  Opens a new instace of the MPEG Surround encoder.
300*e5436536SAndroid Build Coastguard Worker  *
301*e5436536SAndroid Build Coastguard Worker  * \param phMp4SpaceEnc      Pointer to the encoder handle to be deallocated.
302*e5436536SAndroid Build Coastguard Worker  *
303*e5436536SAndroid Build Coastguard Worker  * \return
304*e5436536SAndroid Build Coastguard Worker  *          - SACENC_OK, on success.
305*e5436536SAndroid Build Coastguard Worker  *          - SACENC_INVALID_HANDLE, SACENC_MEMORY_ERROR, on failure.
306*e5436536SAndroid Build Coastguard Worker  */
307*e5436536SAndroid Build Coastguard Worker FDK_SACENC_ERROR FDK_sacenc_open(HANDLE_MP4SPACE_ENCODER *phMp4SpaceEnc);
308*e5436536SAndroid Build Coastguard Worker 
309*e5436536SAndroid Build Coastguard Worker /**
310*e5436536SAndroid Build Coastguard Worker  * \brief  Finalizes opening process of MPEG Surround encoder.
311*e5436536SAndroid Build Coastguard Worker  *
312*e5436536SAndroid Build Coastguard Worker  * Shows, how many samples are needed as input
313*e5436536SAndroid Build Coastguard Worker  *
314*e5436536SAndroid Build Coastguard Worker  * \param hMp4SpaceEnc       A valid MPEG Surround encoder handle.
315*e5436536SAndroid Build Coastguard Worker  * \param dmxDelay           Downmix delay.
316*e5436536SAndroid Build Coastguard Worker  *
317*e5436536SAndroid Build Coastguard Worker  * \return
318*e5436536SAndroid Build Coastguard Worker  *          - SACENC_OK, on success.
319*e5436536SAndroid Build Coastguard Worker  *          - SACENC_INVALID_HANDLE, SACENC_INIT_ERROR, SACENC_INVALID_CONFIG,
320*e5436536SAndroid Build Coastguard Worker  * on failure.
321*e5436536SAndroid Build Coastguard Worker  */
322*e5436536SAndroid Build Coastguard Worker FDK_SACENC_ERROR FDK_sacenc_init(HANDLE_MP4SPACE_ENCODER hMp4SpaceEnc,
323*e5436536SAndroid Build Coastguard Worker                                  const INT dmxDelay);
324*e5436536SAndroid Build Coastguard Worker 
325*e5436536SAndroid Build Coastguard Worker /**
326*e5436536SAndroid Build Coastguard Worker  * \brief  Close the MPEG Surround encoder instance.
327*e5436536SAndroid Build Coastguard Worker  *
328*e5436536SAndroid Build Coastguard Worker  * Deallocate encoder instance and free whole memory.
329*e5436536SAndroid Build Coastguard Worker  *
330*e5436536SAndroid Build Coastguard Worker  * \param phMp4SpaceEnc      Pointer to the encoder handle to be deallocated.
331*e5436536SAndroid Build Coastguard Worker  *
332*e5436536SAndroid Build Coastguard Worker  * \return
333*e5436536SAndroid Build Coastguard Worker  *          - SACENC_OK, on success.
334*e5436536SAndroid Build Coastguard Worker  *          - SACENC_INVALID_HANDLE, on failure.
335*e5436536SAndroid Build Coastguard Worker  */
336*e5436536SAndroid Build Coastguard Worker FDK_SACENC_ERROR FDK_sacenc_close(HANDLE_MP4SPACE_ENCODER *phMp4SpaceEnc);
337*e5436536SAndroid Build Coastguard Worker 
338*e5436536SAndroid Build Coastguard Worker /**
339*e5436536SAndroid Build Coastguard Worker  * \brief  MPEG surround parameter extraction, framwise.
340*e5436536SAndroid Build Coastguard Worker  *
341*e5436536SAndroid Build Coastguard Worker  * \param hMp4SpaceEnc       A valid MPEG Surround encoder handle.
342*e5436536SAndroid Build Coastguard Worker  *
343*e5436536SAndroid Build Coastguard Worker  * \return
344*e5436536SAndroid Build Coastguard Worker  *          - SACENC_OK, on success.
345*e5436536SAndroid Build Coastguard Worker  *          - SACENC_INVALID_HANDLE, on failure.
346*e5436536SAndroid Build Coastguard Worker  */
347*e5436536SAndroid Build Coastguard Worker FDK_SACENC_ERROR FDK_sacenc_encode(const HANDLE_MP4SPACE_ENCODER hMp4SpaceEnc,
348*e5436536SAndroid Build Coastguard Worker                                    const FDK_bufDescr *inBufDesc,
349*e5436536SAndroid Build Coastguard Worker                                    const FDK_bufDescr *outBufDesc,
350*e5436536SAndroid Build Coastguard Worker                                    const SACENC_InArgs *inargs,
351*e5436536SAndroid Build Coastguard Worker                                    SACENC_OutArgs *outargs);
352*e5436536SAndroid Build Coastguard Worker 
353*e5436536SAndroid Build Coastguard Worker /**
354*e5436536SAndroid Build Coastguard Worker  * \brief  Provides information on produced bitstream.
355*e5436536SAndroid Build Coastguard Worker  *
356*e5436536SAndroid Build Coastguard Worker  * \param hMp4SpaceEnc       A valid MPEG Surround encoder handle.
357*e5436536SAndroid Build Coastguard Worker  * \param pInfo              Pointer to an encoder info struct, filled on
358*e5436536SAndroid Build Coastguard Worker  * return.
359*e5436536SAndroid Build Coastguard Worker  *
360*e5436536SAndroid Build Coastguard Worker  * \return
361*e5436536SAndroid Build Coastguard Worker  *          - SACENC_OK, on success.
362*e5436536SAndroid Build Coastguard Worker  *          - SACENC_INVALID_HANDLE, on failure.
363*e5436536SAndroid Build Coastguard Worker  */
364*e5436536SAndroid Build Coastguard Worker FDK_SACENC_ERROR FDK_sacenc_getInfo(const HANDLE_MP4SPACE_ENCODER hMp4SpaceEnc,
365*e5436536SAndroid Build Coastguard Worker                                     MP4SPACEENC_INFO *const pInfo);
366*e5436536SAndroid Build Coastguard Worker 
367*e5436536SAndroid Build Coastguard Worker /**
368*e5436536SAndroid Build Coastguard Worker  * \brief  Set one single MPEG Surround encoder parameter.
369*e5436536SAndroid Build Coastguard Worker  *
370*e5436536SAndroid Build Coastguard Worker  * This function allows configuration of all encoder parameters specified in
371*e5436536SAndroid Build Coastguard Worker  * ::SPACEENC_PARAM. Each parameter must be set with a separate function call.
372*e5436536SAndroid Build Coastguard Worker  * An internal validation of the configuration value range will be done.
373*e5436536SAndroid Build Coastguard Worker  *
374*e5436536SAndroid Build Coastguard Worker  * \param hMp4SpaceEnc       A valid MPEG Surround encoder handle.
375*e5436536SAndroid Build Coastguard Worker  * \param param              Parameter to be set. See ::SPACEENC_PARAM.
376*e5436536SAndroid Build Coastguard Worker  * \param value              Parameter value. See parameter description in
377*e5436536SAndroid Build Coastguard Worker  * ::SPACEENC_PARAM.
378*e5436536SAndroid Build Coastguard Worker  *
379*e5436536SAndroid Build Coastguard Worker  * \return
380*e5436536SAndroid Build Coastguard Worker  *          - SACENC_OK, on success.
381*e5436536SAndroid Build Coastguard Worker  *          - SACENC_INVALID_HANDLE, SACENC_UNSUPPORTED_PARAMETER,
382*e5436536SAndroid Build Coastguard Worker  * SACENC_INVALID_CONFIG, on failure.
383*e5436536SAndroid Build Coastguard Worker  */
384*e5436536SAndroid Build Coastguard Worker FDK_SACENC_ERROR FDK_sacenc_setParam(HANDLE_MP4SPACE_ENCODER hMp4SpaceEnc,
385*e5436536SAndroid Build Coastguard Worker                                      const SPACEENC_PARAM param,
386*e5436536SAndroid Build Coastguard Worker                                      const UINT value);
387*e5436536SAndroid Build Coastguard Worker 
388*e5436536SAndroid Build Coastguard Worker /**
389*e5436536SAndroid Build Coastguard Worker  * \brief  Get information about MPEG Surround encoder library build.
390*e5436536SAndroid Build Coastguard Worker  *
391*e5436536SAndroid Build Coastguard Worker  * Fill a given LIB_INFO structure with library version information.
392*e5436536SAndroid Build Coastguard Worker  *
393*e5436536SAndroid Build Coastguard Worker  * \param info               Pointer to an allocated LIB_INFO struct.
394*e5436536SAndroid Build Coastguard Worker  *
395*e5436536SAndroid Build Coastguard Worker  * \return
396*e5436536SAndroid Build Coastguard Worker  *          - SACENC_OK, on success.
397*e5436536SAndroid Build Coastguard Worker  *          - SACENC_INVALID_HANDLE, SACENC_INIT_ERROR, on failure.
398*e5436536SAndroid Build Coastguard Worker  */
399*e5436536SAndroid Build Coastguard Worker FDK_SACENC_ERROR FDK_sacenc_getLibInfo(LIB_INFO *info);
400*e5436536SAndroid Build Coastguard Worker 
401*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus
402*e5436536SAndroid Build Coastguard Worker }
403*e5436536SAndroid Build Coastguard Worker #endif
404*e5436536SAndroid Build Coastguard Worker 
405*e5436536SAndroid Build Coastguard Worker #endif /* SACENC_LIB_H */
406