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