Home | History | Annotate | Download | only in lib
      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
     32 extern "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 */
     63 typedef void *LVREV_Handle_t;
     64 
     65 
     66 /* Status return values */
     67 typedef 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 */
     78 typedef 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 */
     94 typedef 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 */
    101 typedef 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 #ifndef HIGHER_FS
    111     LVM_UINT16                  LPF;                    /* Low pass filter, in Hz */
    112     LVM_UINT16                  HPF;                    /* High pass filter, in Hz */
    113 #else
    114     LVM_UINT32                  LPF;                    /* Low pass filter, in Hz */
    115     LVM_UINT32                  HPF;                    /* High pass filter, in Hz */
    116 #endif
    117 
    118     LVM_UINT16                  T60;                    /* Decay time constant, in ms */
    119     LVM_UINT16                  Density;                /* Echo density, 0 to 100 for minimum to maximum density */
    120     LVM_UINT16                  Damping;                /* Damping */
    121     LVM_UINT16                  RoomSize;               /* Simulated room size, 1 to 100 for minimum to maximum size */
    122 
    123 } LVREV_ControlParams_st;
    124 
    125 
    126 /* Instance Parameter structure */
    127 typedef struct
    128 {
    129     /* General */
    130     LVM_UINT16                  MaxBlockSize;           /* Maximum processing block size */
    131 
    132     /* Reverb */
    133     LVM_Format_en               SourceFormat;           /* Source data formats to support */
    134     LVREV_NumDelayLines_en      NumDelays;              /* The number of delay lines, 1, 2 or 4 */
    135 
    136 } LVREV_InstanceParams_st;
    137 
    138 
    139 /****************************************************************************************/
    140 /*                                                                                      */
    141 /*  Function Prototypes                                                                 */
    142 /*                                                                                      */
    143 /****************************************************************************************/
    144 
    145 /****************************************************************************************/
    146 /*                                                                                      */
    147 /* FUNCTION:                LVREV_GetMemoryTable                                        */
    148 /*                                                                                      */
    149 /* DESCRIPTION:                                                                         */
    150 /*  This function is used to obtain the LVREV module memory requirements to support     */
    151 /*  memory allocation. It can also be used to return the memory base address provided   */
    152 /*  during memory allocation to support freeing of memory when the LVREV module is no   */
    153 /*  longer required. It is called in two ways:                                          */
    154 /*                                                                                      */
    155 /*  hInstance = NULL                Returns the memory requirements                     */
    156 /*  hInstance = Instance handle     Returns the memory requirements and allocated       */
    157 /*                                  base addresses.                                     */
    158 /*                                                                                      */
    159 /*  When this function is called with hInstance = NULL the memory base address pointers */
    160 /*  will be NULL on return.                                                             */
    161 /*                                                                                      */
    162 /*  When the function is called for freeing memory, hInstance = Instance Handle the     */
    163 /*  memory table returns the allocated memory and base addresses used during            */
    164 /*  initialisation.                                                                     */
    165 /*                                                                                      */
    166 /* PARAMETERS:                                                                          */
    167 /*  hInstance               Instance Handle                                             */
    168 /*  pMemoryTable            Pointer to an empty memory table                            */
    169 /*  pInstanceParams         Pointer to the instance parameters                          */
    170 /*                                                                                      */
    171 /* RETURNS:                                                                             */
    172 /*  LVREV_SUCCESS           Succeeded                                                   */
    173 /*  LVREV_NULLADDRESS       When pMemoryTable is NULL                                   */
    174 /*  LVREV_NULLADDRESS       When requesting memory requirements and pInstanceParams     */
    175 /*                          is NULL                                                     */
    176 /*                                                                                      */
    177 /* NOTES:                                                                               */
    178 /*  1.  This function may be interrupted by the LVREV_Process function                  */
    179 /*                                                                                      */
    180 /****************************************************************************************/
    181 LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t           hInstance,
    182                                            LVREV_MemoryTable_st     *pMemoryTable,
    183                                            LVREV_InstanceParams_st  *pInstanceParams);
    184 
    185 
    186 /****************************************************************************************/
    187 /*                                                                                      */
    188 /* FUNCTION:                LVREV_GetInstanceHandle                                     */
    189 /*                                                                                      */
    190 /* DESCRIPTION:                                                                         */
    191 /*  This function is used to create a LVREV module instance. It returns the created     */
    192 /*  instance handle through phInstance. All parameters are set to invalid values, the   */
    193 /*  LVREV_SetControlParameters function must be called with a set of valid control      */
    194 /*  parameters before the LVREV_Process function can be called.                         */
    195 /*                                                                                      */
    196 /*  The memory allocation must be provided by the application by filling in the memory  */
    197 /*  region base addresses in the memory table before calling this function.             */
    198 /*                                                                                      */
    199 /* PARAMETERS:                                                                          */
    200 /*  phInstance              Pointer to the instance handle                              */
    201 /*  pMemoryTable            Pointer to the memory definition table                      */
    202 /*  pInstanceParams         Pointer to the instance parameters                          */
    203 /*                                                                                      */
    204 /* RETURNS:                                                                             */
    205 /*  LVREV_SUCCESS           Succeeded                                                   */
    206 /*  LVREV_NULLADDRESS       When phInstance or pMemoryTable or pInstanceParams is NULL  */
    207 /*  LVREV_NULLADDRESS       When one of the memory regions has a NULL pointer           */
    208 /*                                                                                      */
    209 /* NOTES:                                                                               */
    210 /*                                                                                      */
    211 /****************************************************************************************/
    212 LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t            *phInstance,
    213                                               LVREV_MemoryTable_st      *pMemoryTable,
    214                                               LVREV_InstanceParams_st   *pInstanceParams);
    215 
    216 
    217 /****************************************************************************************/
    218 /*                                                                                      */
    219 /* FUNCTION:                LVXX_GetControlParameters                                   */
    220 /*                                                                                      */
    221 /* DESCRIPTION:                                                                         */
    222 /*  Request the LVREV module control parameters. The current parameter set is returned  */
    223 /*  via the parameter pointer.                                                          */
    224 /*                                                                                      */
    225 /* PARAMETERS:                                                                          */
    226 /*  hInstance               Instance handle                                             */
    227 /*  pControlParams          Pointer to an empty parameter structure                     */
    228 /*                                                                                      */
    229 /* RETURNS:                                                                             */
    230 /*  LVREV_SUCCESS           Succeeded                                                   */
    231 /*  LVREV_NULLADDRESS       When hInstance or pControlParams is NULL                    */
    232 /*                                                                                      */
    233 /* NOTES:                                                                               */
    234 /*  1.  This function may be interrupted by the LVREV_Process function                  */
    235 /*                                                                                      */
    236 /****************************************************************************************/
    237 LVREV_ReturnStatus_en LVREV_GetControlParameters(LVREV_Handle_t           hInstance,
    238                                                  LVREV_ControlParams_st   *pControlParams);
    239 
    240 
    241 /****************************************************************************************/
    242 /*                                                                                      */
    243 /* FUNCTION:                LVREV_SetControlParameters                                  */
    244 /*                                                                                      */
    245 /* DESCRIPTION:                                                                         */
    246 /*  Sets or changes the LVREV module parameters.                                        */
    247 /*                                                                                      */
    248 /* PARAMETERS:                                                                          */
    249 /*  hInstance               Instance handle                                             */
    250 /*  pNewParams              Pointer to a parameter structure                            */
    251 /*                                                                                      */
    252 /* RETURNS:                                                                             */
    253 /*  LVREV_SUCCESS           Succeeded                                                   */
    254 /*  LVREV_NULLADDRESS       When hInstance or pNewParams is NULL                        */
    255 /*                                                                                      */
    256 /* NOTES:                                                                               */
    257 /*  1.  This function may be interrupted by the LVREV_Process function                  */
    258 /*                                                                                      */
    259 /****************************************************************************************/
    260 LVREV_ReturnStatus_en LVREV_SetControlParameters(LVREV_Handle_t           hInstance,
    261                                                  LVREV_ControlParams_st   *pNewParams);
    262 
    263 
    264 /****************************************************************************************/
    265 /*                                                                                      */
    266 /* FUNCTION:                LVREV_ClearAudioBuffers                                     */
    267 /*                                                                                      */
    268 /* DESCRIPTION:                                                                         */
    269 /*  This function is used to clear the internal audio buffers of the module.            */
    270 /*                                                                                      */
    271 /* PARAMETERS:                                                                          */
    272 /*  hInstance               Instance handle                                             */
    273 /*                                                                                      */
    274 /* RETURNS:                                                                             */
    275 /*  LVREV_SUCCESS          Initialisation succeeded                                     */
    276 /*  LVREV_NULLADDRESS      Instance is NULL                                             */
    277 /*                                                                                      */
    278 /* NOTES:                                                                               */
    279 /*  1. This function must not be interrupted by the LVREV_Process function              */
    280 /*                                                                                      */
    281 /****************************************************************************************/
    282 LVREV_ReturnStatus_en LVREV_ClearAudioBuffers(LVREV_Handle_t  hInstance);
    283 
    284 
    285 /****************************************************************************************/
    286 /*                                                                                      */
    287 /* FUNCTION:                LVREV_Process                                               */
    288 /*                                                                                      */
    289 /* DESCRIPTION:                                                                         */
    290 /*  Process function for the LVREV module.                                              */
    291 /*                                                                                      */
    292 /* PARAMETERS:                                                                          */
    293 /*  hInstance               Instance handle                                             */
    294 /*  pInData                 Pointer to the input data                                   */
    295 /*  pOutData                Pointer to the output data                                  */
    296 /*  NumSamples              Number of samples in the input buffer                       */
    297 /*                                                                                      */
    298 /* RETURNS:                                                                             */
    299 /*  LVREV_SUCCESS           Succeeded                                                   */
    300 /*  LVREV_INVALIDNUMSAMPLES NumSamples was larger than the maximum block size           */
    301 /*                                                                                      */
    302 /* NOTES:                                                                               */
    303 /*  1. The input and output buffers must be 32-bit aligned                              */
    304 /*                                                                                      */
    305 /****************************************************************************************/
    306 #ifdef BUILD_FLOAT
    307 LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t      hInstance,
    308                                     const LVM_FLOAT     *pInData,
    309                                     LVM_FLOAT           *pOutData,
    310                                     const LVM_UINT16          NumSamples);
    311 #else
    312 LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t      hInstance,
    313                                     const LVM_INT32     *pInData,
    314                                     LVM_INT32           *pOutData,
    315                                     const LVM_UINT16          NumSamples);
    316 #endif
    317 
    318 #ifdef __cplusplus
    319 }
    320 #endif /* __cplusplus */
    321 
    322 #endif      /* __LVREV_H__ */
    323 
    324 /* End of file */
    325