1/*
2 * Copyright (C) 2004-2010 NXP Software
3 * Copyright (C) 2010 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18/****************************************************************************************/
19/*                                                                                      */
20/*  Header file for the application layer interface of the LVREV module                 */
21/*                                                                                      */
22/*  This files includes all definitions, types, structures and function prototypes      */
23/*  required by the calling layer. All other types, structures and functions are        */
24/*  private.                                                                            */
25/*                                                                                      */
26/****************************************************************************************/
27
28#ifndef __LVREV_H__
29#define __LVREV_H__
30
31#ifdef __cplusplus
32extern "C" {
33#endif /* __cplusplus */
34
35
36/****************************************************************************************/
37/*                                                                                      */
38/*  Includes                                                                            */
39/*                                                                                      */
40/****************************************************************************************/
41#include "LVM_Types.h"
42
43
44/****************************************************************************************/
45/*                                                                                      */
46/*  Definitions                                                                         */
47/*                                                                                      */
48/****************************************************************************************/
49/* General */
50#define LVREV_BLOCKSIZE_MULTIPLE                1       /* Processing block size multiple */
51#define LVREV_MAX_T60                        7000       /* Maximum decay time is 7000ms */
52
53/* Memory table*/
54#define LVREV_NR_MEMORY_REGIONS                 4       /* Number of memory regions */
55
56
57/****************************************************************************************/
58/*                                                                                      */
59/*  Types                                                                               */
60/*                                                                                      */
61/****************************************************************************************/
62/* Instance handle */
63typedef void *LVREV_Handle_t;
64
65
66/* Status return values */
67typedef enum
68{
69    LVREV_SUCCESS            = 0,                       /* Successful return from a routine */
70    LVREV_NULLADDRESS        = 1,                       /* NULL allocation address */
71    LVREV_OUTOFRANGE         = 2,                       /* Out of range control parameter */
72    LVREV_INVALIDNUMSAMPLES  = 3,                       /* Invalid number of samples */
73    LVREV_RETURNSTATUS_DUMMY = LVM_MAXENUM
74} LVREV_ReturnStatus_en;
75
76
77/* Reverb delay lines */
78typedef enum
79{
80    LVREV_DELAYLINES_1     = 1,                         /* One delay line */
81    LVREV_DELAYLINES_2     = 2,                         /* Two delay lines */
82    LVREV_DELAYLINES_4     = 4,                         /* Four delay lines */
83    LVREV_DELAYLINES_DUMMY = LVM_MAXENUM
84} LVREV_NumDelayLines_en;
85
86
87/****************************************************************************************/
88/*                                                                                      */
89/*  Structures                                                                          */
90/*                                                                                      */
91/****************************************************************************************/
92
93/* Memory table containing the region definitions */
94typedef struct
95{
96    LVM_MemoryRegion_st        Region[LVREV_NR_MEMORY_REGIONS];  /* One definition for each region */
97} LVREV_MemoryTable_st;
98
99
100/* Control Parameter structure */
101typedef struct
102{
103    /* General parameters */
104    LVM_Mode_en                 OperatingMode;          /* Operating mode */
105    LVM_Fs_en                   SampleRate;             /* Sample rate */
106    LVM_Format_en               SourceFormat;           /* Source data format */
107
108    /* Parameters for REV */
109    LVM_UINT16                  Level;                  /* Level, 0 to 100 representing percentage of reverb */
110    LVM_UINT16                  LPF;                    /* Low pass filter, in Hz */
111    LVM_UINT16                  HPF;                    /* High pass filter, in Hz */
112    LVM_UINT16                  T60;                    /* Decay time constant, in ms */
113    LVM_UINT16                  Density;                /* Echo density, 0 to 100 for minimum to maximum density */
114    LVM_UINT16                  Damping;                /* Damping */
115    LVM_UINT16                  RoomSize;               /* Simulated room size, 1 to 100 for minimum to maximum size */
116
117} LVREV_ControlParams_st;
118
119
120/* Instance Parameter structure */
121typedef struct
122{
123    /* General */
124    LVM_UINT16                  MaxBlockSize;           /* Maximum processing block size */
125
126    /* Reverb */
127    LVM_Format_en               SourceFormat;           /* Source data formats to support */
128    LVREV_NumDelayLines_en      NumDelays;              /* The number of delay lines, 1, 2 or 4 */
129
130} LVREV_InstanceParams_st;
131
132
133/****************************************************************************************/
134/*                                                                                      */
135/*  Function Prototypes                                                                 */
136/*                                                                                      */
137/****************************************************************************************/
138
139/****************************************************************************************/
140/*                                                                                      */
141/* FUNCTION:                LVREV_GetMemoryTable                                        */
142/*                                                                                      */
143/* DESCRIPTION:                                                                         */
144/*  This function is used to obtain the LVREV module memory requirements to support     */
145/*  memory allocation. It can also be used to return the memory base address provided   */
146/*  during memory allocation to support freeing of memory when the LVREV module is no   */
147/*  longer required. It is called in two ways:                                          */
148/*                                                                                      */
149/*  hInstance = NULL                Returns the memory requirements                     */
150/*  hInstance = Instance handle     Returns the memory requirements and allocated       */
151/*                                  base addresses.                                     */
152/*                                                                                      */
153/*  When this function is called with hInstance = NULL the memory base address pointers */
154/*  will be NULL on return.                                                             */
155/*                                                                                      */
156/*  When the function is called for freeing memory, hInstance = Instance Handle the     */
157/*  memory table returns the allocated memory and base addresses used during            */
158/*  initialisation.                                                                     */
159/*                                                                                      */
160/* PARAMETERS:                                                                          */
161/*  hInstance               Instance Handle                                             */
162/*  pMemoryTable            Pointer to an empty memory table                            */
163/*  pInstanceParams         Pointer to the instance parameters                          */
164/*                                                                                      */
165/* RETURNS:                                                                             */
166/*  LVREV_SUCCESS           Succeeded                                                   */
167/*  LVREV_NULLADDRESS       When pMemoryTable is NULL                                   */
168/*  LVREV_NULLADDRESS       When requesting memory requirements and pInstanceParams     */
169/*                          is NULL                                                     */
170/*                                                                                      */
171/* NOTES:                                                                               */
172/*  1.  This function may be interrupted by the LVREV_Process function                  */
173/*                                                                                      */
174/****************************************************************************************/
175LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t           hInstance,
176                                           LVREV_MemoryTable_st     *pMemoryTable,
177                                           LVREV_InstanceParams_st  *pInstanceParams);
178
179
180/****************************************************************************************/
181/*                                                                                      */
182/* FUNCTION:                LVREV_GetInstanceHandle                                     */
183/*                                                                                      */
184/* DESCRIPTION:                                                                         */
185/*  This function is used to create a LVREV module instance. It returns the created     */
186/*  instance handle through phInstance. All parameters are set to invalid values, the   */
187/*  LVREV_SetControlParameters function must be called with a set of valid control      */
188/*  parameters before the LVREV_Process function can be called.                         */
189/*                                                                                      */
190/*  The memory allocation must be provided by the application by filling in the memory  */
191/*  region base addresses in the memory table before calling this function.             */
192/*                                                                                      */
193/* PARAMETERS:                                                                          */
194/*  phInstance              Pointer to the instance handle                              */
195/*  pMemoryTable            Pointer to the memory definition table                      */
196/*  pInstanceParams         Pointer to the instance parameters                          */
197/*                                                                                      */
198/* RETURNS:                                                                             */
199/*  LVREV_SUCCESS           Succeeded                                                   */
200/*  LVREV_NULLADDRESS       When phInstance or pMemoryTable or pInstanceParams is NULL  */
201/*  LVREV_NULLADDRESS       When one of the memory regions has a NULL pointer           */
202/*                                                                                      */
203/* NOTES:                                                                               */
204/*                                                                                      */
205/****************************************************************************************/
206LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t            *phInstance,
207                                              LVREV_MemoryTable_st      *pMemoryTable,
208                                              LVREV_InstanceParams_st   *pInstanceParams);
209
210
211/****************************************************************************************/
212/*                                                                                      */
213/* FUNCTION:                LVXX_GetControlParameters                                   */
214/*                                                                                      */
215/* DESCRIPTION:                                                                         */
216/*  Request the LVREV module control parameters. The current parameter set is returned  */
217/*  via the parameter pointer.                                                          */
218/*                                                                                      */
219/* PARAMETERS:                                                                          */
220/*  hInstance               Instance handle                                             */
221/*  pControlParams          Pointer to an empty parameter structure                     */
222/*                                                                                      */
223/* RETURNS:                                                                             */
224/*  LVREV_SUCCESS           Succeeded                                                   */
225/*  LVREV_NULLADDRESS       When hInstance or pControlParams is NULL                    */
226/*                                                                                      */
227/* NOTES:                                                                               */
228/*  1.  This function may be interrupted by the LVREV_Process function                  */
229/*                                                                                      */
230/****************************************************************************************/
231LVREV_ReturnStatus_en LVREV_GetControlParameters(LVREV_Handle_t           hInstance,
232                                                 LVREV_ControlParams_st   *pControlParams);
233
234
235/****************************************************************************************/
236/*                                                                                      */
237/* FUNCTION:                LVREV_SetControlParameters                                  */
238/*                                                                                      */
239/* DESCRIPTION:                                                                         */
240/*  Sets or changes the LVREV module parameters.                                        */
241/*                                                                                      */
242/* PARAMETERS:                                                                          */
243/*  hInstance               Instance handle                                             */
244/*  pNewParams              Pointer to a parameter structure                            */
245/*                                                                                      */
246/* RETURNS:                                                                             */
247/*  LVREV_SUCCESS           Succeeded                                                   */
248/*  LVREV_NULLADDRESS       When hInstance or pNewParams is NULL                        */
249/*                                                                                      */
250/* NOTES:                                                                               */
251/*  1.  This function may be interrupted by the LVREV_Process function                  */
252/*                                                                                      */
253/****************************************************************************************/
254LVREV_ReturnStatus_en LVREV_SetControlParameters(LVREV_Handle_t           hInstance,
255                                                 LVREV_ControlParams_st   *pNewParams);
256
257
258/****************************************************************************************/
259/*                                                                                      */
260/* FUNCTION:                LVREV_ClearAudioBuffers                                     */
261/*                                                                                      */
262/* DESCRIPTION:                                                                         */
263/*  This function is used to clear the internal audio buffers of the module.            */
264/*                                                                                      */
265/* PARAMETERS:                                                                          */
266/*  hInstance               Instance handle                                             */
267/*                                                                                      */
268/* RETURNS:                                                                             */
269/*  LVREV_SUCCESS          Initialisation succeeded                                     */
270/*  LVREV_NULLADDRESS      Instance is NULL                                             */
271/*                                                                                      */
272/* NOTES:                                                                               */
273/*  1. This function must not be interrupted by the LVREV_Process function              */
274/*                                                                                      */
275/****************************************************************************************/
276LVREV_ReturnStatus_en LVREV_ClearAudioBuffers(LVREV_Handle_t  hInstance);
277
278
279/****************************************************************************************/
280/*                                                                                      */
281/* FUNCTION:                LVREV_Process                                               */
282/*                                                                                      */
283/* DESCRIPTION:                                                                         */
284/*  Process function for the LVREV module.                                              */
285/*                                                                                      */
286/* PARAMETERS:                                                                          */
287/*  hInstance               Instance handle                                             */
288/*  pInData                 Pointer to the input data                                   */
289/*  pOutData                Pointer to the output data                                  */
290/*  NumSamples              Number of samples in the input buffer                       */
291/*                                                                                      */
292/* RETURNS:                                                                             */
293/*  LVREV_SUCCESS           Succeeded                                                   */
294/*  LVREV_INVALIDNUMSAMPLES NumSamples was larger than the maximum block size           */
295/*                                                                                      */
296/* NOTES:                                                                               */
297/*  1. The input and output buffers must be 32-bit aligned                              */
298/*                                                                                      */
299/****************************************************************************************/
300LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t      hInstance,
301                                    const LVM_INT32     *pInData,
302                                    LVM_INT32           *pOutData,
303                                    const LVM_UINT16          NumSamples);
304
305
306#ifdef __cplusplus
307}
308#endif /* __cplusplus */
309
310#endif      /* __LVREV_H__ */
311
312/* End of file */
313