12c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*
22c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2004-2010 NXP Software
32c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2010 The Android Open Source Project
42c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *
52c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Licensed under the Apache License, Version 2.0 (the "License");
62c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * you may not use this file except in compliance with the License.
72c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * You may obtain a copy of the License at
82c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *
92c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *      http://www.apache.org/licenses/LICENSE-2.0
102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *
112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Unless required by applicable law or agreed to in writing, software
122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * distributed under the License is distributed on an "AS IS" BASIS,
132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * See the License for the specific language governing permissions and
152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * limitations under the License.
162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */
172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Header file for the application layer interface of Concert Sound and Concert        */
212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Sound EX.                                                                           */
222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  This files includes all definitions, types, structures and function                 */
242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  prototypes required by the calling layer. All other types, structures and           */
252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  functions are private.                                                              */
262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Note: 1                                                                             */
302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  =======                                                                             */
312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  The algorithm can execute either with separate input and output buffers or with     */
322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  a common buffer, i.e. the data is processed in-place. If the buffers are the        */
332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  same then the MIPs will be slightly higher and an extra stereo scratch buffer is    */
342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  required.                                                                           */
352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Note: 2                                                                             */
392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  =======                                                                             */
402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Two data formats are support Stereo and Mono-In-Stereo. The data is interleaved as  */
412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  follows:                                                                            */
422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*              Byte Offset         Stereo Input         Mono-In-Stereo Input           */
432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*              ===========         ============         ====================           */
442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                  0               Left Sample #1          Mono Sample #1              */
452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                  2               Right Sample #1         Mono Sample #1              */
462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                  4               Left Sample #2          Mono Sample #2              */
472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                  6               Right Sample #2         Mono Sample #2              */
482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                  .                      .                     .                      */
492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                  .                      .                     .                      */
502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Mono format data is not supported, the calling routine must convert a Mono stream   */
522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  in to Mono-In-Stereo format.                                                        */
532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifndef LVCS_H
572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_H
582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus
602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" {
612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */
622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Includes                                                                            */
672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Types.h"
712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Common.h"
722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Definitions                                                                         */
772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Memory table */
812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_MEMREGION_PERSISTENT_SLOW_DATA    0    /* Offset to the instance memory region */
822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_MEMREGION_PERSISTENT_FAST_DATA    1    /* Offset to the persistent data memory region */
832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_MEMREGION_PERSISTENT_FAST_COEF    2    /* Offset to the persistent coefficient memory region */
842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_MEMREGION_TEMPORARY_FAST          3    /* Offset to temporary memory region */
852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_NR_MEMORY_REGIONS                 4    /* Number of memory regions */
862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Effect Level */
882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_EFFECT_LOW                    16384    /* Effect scaling 50% */
892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_EFFECT_MEDIUM                 24576    /* Effect scaling 75% */
902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_EFFECT_HIGH                   32767    /* Effect Scaling 100% */
912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Callback events */
932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_EVENT_NONE                   0x0000    /* Not a valid event */
942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVCS_EVENT_ALGOFF                 0x0001    /* CS has completed switch off */
952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Types                                                                               */
1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Instance handle */
1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef void *LVCS_Handle_t;
1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Operating modes */
1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum
1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_OFF = 0,
1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_ON  = 15,
1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_MAX = LVM_MAXENUM
1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_Modes_en;
1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Memory Types */
1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum
1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_SCRATCH        = 0,
1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_DATA           = 1,
1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_COEFFICIENT    = 2,
1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_PERSISTENT     = 3,
1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_MEMORYTYPE_MAX = LVM_MAXENUM
1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_MemoryTypes_en;
1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Function return status */
1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum
1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_SUCCESS        = 0,                        /* Successful return from a routine */
1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_ALIGNMENTERROR = 1,                        /* Memory alignment error */
1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_NULLADDRESS    = 2,                        /* NULL allocation address */
1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_TOOMANYSAMPLES = 3,                        /* Maximum block size exceeded */
1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_INVALIDBUFFER  = 4,                        /* Invalid buffer processing request */
1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_STATUSMAX      = LVM_MAXENUM
1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_ReturnStatus_en;
1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*
1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Source data formats
1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */
1422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum
1432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_STEREO       = 0,
1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_MONOINSTEREO = 1,
1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_SOURCEMAX    = LVM_MAXENUM
1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_SourceFormat_en;
1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*
1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Supported output devices
1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */
1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum
1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_HEADPHONES             = 0,
1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_EX_HEADPHONES          = 1,
1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_SPEAKERTYPE_MAX        = LVM_MAXENUM
1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_SpeakerType_en;
1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*
1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Speaker Coefficients Table
1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */
1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void    *pTable1;
1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void    *pTable2;
1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void    *pTable3;
1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void    *pTable4;
1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void    *pTable5;
1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void    *pTable6;
1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void    *pTable7;
1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void    *pTable8;
1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_CSMS_Coef_Tables_t;
1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Structures                                                                          */
1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Memory region definition */
1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_UINT32              Size;                   /* Region size in bytes */
1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_MemoryTypes_en     Type;                   /* Region type */
1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void                    *pBaseAddress;          /* Pointer to the region base address */
1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_MemoryRegion_t;
1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Memory table containing the region definitions */
1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_MemoryRegion_t Region[LVCS_NR_MEMORY_REGIONS]; /* One definition for each region */
1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_MemTab_t;
1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Concert Sound parameter structure */
1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_Modes_en           OperatingMode;          /* Algorithm mode */
2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_SpeakerType_en     SpeakerType;            /* Output device type */
2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVCS_SourceFormat_en    SourceFormat;           /* Source data format */
2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_Mode_en             CompressorMode;         /* Non-Linear Compressor Mode */
2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_Fs_en               SampleRate;             /* Sampling rate */
2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_INT16               EffectLevel;            /* Effect level */
2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_UINT16              ReverbLevel;            /* Reverb level in % */
2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_Params_t;
2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Concert Sound Capability structure */
2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef struct
2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{
2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* General parameters */
2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_UINT16              MaxBlockSize;           /* Maximum block size in sample pairs */
2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    /* Callback parameters */
2182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    LVM_Callback            CallBack;               /* Bundle callback */
2192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent    void                    *pBundleInstance;       /* Bundle instance handle */
2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} LVCS_Capabilities_t;
2222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
2252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Function Prototypes                                                                 */
2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
2292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION:                LVCS_Memory                                                 */
2332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION:                                                                         */
2352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  This function is used for memory allocation and free. It can be called in           */
2362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  two ways:                                                                           */
2372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*      hInstance = NULL                Returns the memory requirements                 */
2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*      hInstance = Instance handle     Returns the memory requirements and             */
2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                      allocated base addresses for the instance       */
2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  When this function is called for memory allocation (hInstance=NULL) it is           */
2432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  passed the default capabilities, of these only the buffer processing setting is     */
2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  used.                                                                               */
2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  When called for memory allocation the memory base address pointers are NULL on      */
2472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  return.                                                                             */
2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  When the function is called for free (hInstance = Instance Handle) the              */
2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  capabilities are ignored and the memory table returns the allocated memory and      */
2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  base addresses used during initialisation.                                          */
2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS:                                                                          */
2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  hInstance               Instance Handle                                             */
2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  pMemoryTable            Pointer to an empty memory definition table                 */
2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  pCapabilities           Pointer to the default capabilites                          */
2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS:                                                                             */
2592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  LVCS_Success            Succeeded                                                   */
2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES:                                                                               */
2622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  1.  This function may be interrupted by the LVCS_Process function                   */
2632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
2652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2662c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_Memory(LVCS_Handle_t          hInstance,
2672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                 LVCS_MemTab_t          *pMemoryTable,
2682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                 LVCS_Capabilities_t    *pCapabilities);
2692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
2712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
2722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION:                LVCS_Init                                                   */
2742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION:                                                                         */
2762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Create and initialisation function for the Concert Sound module                     */
2772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  This function can be used to create an algorithm instance by calling with           */
2792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  hInstance set to NULL. In this case the algorithm returns the new instance          */
2802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  handle.                                                                             */
2812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  This function can be used to force a full re-initialisation of the algorithm        */
2832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  by calling with hInstance = Instance Handle. In this case the memory table          */
2842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  should be correct for the instance, this can be ensured by calling the function     */
2852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  LVCS_Memory before calling this function.                                           */
2862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS:                                                                          */
2882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  hInstance               Instance handle                                             */
2892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  pMemoryTable            Pointer to the memory definition table                      */
2902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  pCapabilities           Pointer to the initialisation capabilities                  */
2912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS:                                                                             */
2932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  LVCS_Success            Initialisation succeeded                                    */
2942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  LVCS_AlignmentError     Instance or scratch memory on incorrect alignment           */
2952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  LVCS_NullAddress        Instance or scratch memory has a NULL pointer               */
2962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
2972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES:                                                                               */
2982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  1.  The instance handle is the pointer to the base address of the first memory      */
2992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*      region.                                                                         */
3002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  2.  This function must not be interrupted by the LVCS_Process function              */
3012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
3032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3042c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_Init(LVCS_Handle_t            *phInstance,
3052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                               LVCS_MemTab_t            *pMemoryTable,
3062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                               LVCS_Capabilities_t      *pCapabilities);
3072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
3102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION:                 LVCS_GetParameters                                         */
3122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION:                                                                         */
3142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Request the Concert Sound parameters. The current parameter set is returned         */
3152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  via the parameter pointer.                                                          */
3162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS:                                                                          */
3182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  hInstance                Instance handle                                            */
3192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  pParams                  Pointer to an empty parameter structure                    */
3202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS:                                                                             */
3222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  LVCS_Success             Always succeeds                                            */
3232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES:                                                                               */
3252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  1.  This function may be interrupted by the LVCS_Process function                   */
3262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
3282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3292c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_GetParameters(LVCS_Handle_t   hInstance,
3302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                        LVCS_Params_t   *pParams);
3312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
3342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION:                LVCS_Control                                                */
3362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION:                                                                         */
3382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Sets or changes the Concert Sound parameters.                                       */
3392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS:                                                                          */
3412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  hInstance               Instance handle                                             */
3422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  pParams                 Pointer to a parameter structure                            */
3432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS:                                                                             */
3452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  LVCS_Success            Succeeded                                                   */
3462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES:                                                                               */
3482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  1.  This function must not be interrupted by the LVCS_Process function              */
3492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
3512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3522c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_Control(LVCS_Handle_t     hInstance,
3532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                  LVCS_Params_t     *pParams);
3542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
3572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION:                LVCS_Process                                                */
3592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION:                                                                         */
3612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  Process function for the Concert Sound module. The implementation supports two      */
3622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  variants of the algorithm, one for headphones and one for mobile speakers.          */
3632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS:                                                                          */
3652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  hInstance               Instance handle                                             */
3662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  pInData                 Pointer to the input data                                   */
3672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  pOutData                Pointer to the output data                                  */
3682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  NumSamples              Number of samples in the input buffer                       */
3692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS:                                                                             */
3712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  LVCS_Success            Succeeded                                                   */
3722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*  LVCS_TooManySamples     NumSamples was larger than the maximum block size           */
3732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES:                                                                               */
3752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/*                                                                                      */
3762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/
3772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3782c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_Process(LVCS_Handle_t             hInstance,
3792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                  const LVM_INT16           *pInData,
3802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                  LVM_INT16                 *pOutData,
3812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent                                  LVM_UINT16                NumSamples);
3822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef __cplusplus
3852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}
3862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* __cplusplus */
3872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent
3882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif  /* LVCS_H */
389