| /* |
| * Copyright (C) 2004-2010 NXP Software |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /****************************************************************************************/ |
| /* */ |
| /* Header file for the application layer interface of Concert Sound and Concert */ |
| /* Sound EX. */ |
| /* */ |
| /* This files includes all definitions, types, structures and function */ |
| /* prototypes required by the calling layer. All other types, structures and */ |
| /* functions are private. */ |
| /* */ |
| /****************************************************************************************/ |
| /* */ |
| /* Note: 1 */ |
| /* ======= */ |
| /* The algorithm can execute either with separate input and output buffers or with */ |
| /* a common buffer, i.e. the data is processed in-place. If the buffers are the */ |
| /* same then the MIPs will be slightly higher and an extra stereo scratch buffer is */ |
| /* required. */ |
| /* */ |
| /****************************************************************************************/ |
| /* */ |
| /* Note: 2 */ |
| /* ======= */ |
| /* Two data formats are support Stereo and Mono-In-Stereo. The data is interleaved as */ |
| /* follows: */ |
| /* Byte Offset Stereo Input Mono-In-Stereo Input */ |
| /* =========== ============ ==================== */ |
| /* 0 Left Sample #1 Mono Sample #1 */ |
| /* 2 Right Sample #1 Mono Sample #1 */ |
| /* 4 Left Sample #2 Mono Sample #2 */ |
| /* 6 Right Sample #2 Mono Sample #2 */ |
| /* . . . */ |
| /* . . . */ |
| /* */ |
| /* Mono format data is not supported, the calling routine must convert a Mono stream */ |
| /* in to Mono-In-Stereo format. */ |
| /* */ |
| /****************************************************************************************/ |
| |
| #ifndef LVCS_H |
| #define LVCS_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif /* __cplusplus */ |
| |
| |
| /****************************************************************************************/ |
| /* */ |
| /* Includes */ |
| /* */ |
| /****************************************************************************************/ |
| |
| #include "LVM_Types.h" |
| #include "LVM_Common.h" |
| |
| |
| /****************************************************************************************/ |
| /* */ |
| /* Definitions */ |
| /* */ |
| /****************************************************************************************/ |
| |
| /* Memory table */ |
| #define LVCS_MEMREGION_PERSISTENT_SLOW_DATA 0 /* Offset to the instance memory region */ |
| #define LVCS_MEMREGION_PERSISTENT_FAST_DATA 1 /* Offset to the persistent data memory region */ |
| #define LVCS_MEMREGION_PERSISTENT_FAST_COEF 2 /* Offset to the persistent coefficient memory region */ |
| #define LVCS_MEMREGION_TEMPORARY_FAST 3 /* Offset to temporary memory region */ |
| #define LVCS_NR_MEMORY_REGIONS 4 /* Number of memory regions */ |
| |
| /* Effect Level */ |
| #define LVCS_EFFECT_LOW 16384 /* Effect scaling 50% */ |
| #define LVCS_EFFECT_MEDIUM 24576 /* Effect scaling 75% */ |
| #define LVCS_EFFECT_HIGH 32767 /* Effect Scaling 100% */ |
| |
| /* Callback events */ |
| #define LVCS_EVENT_NONE 0x0000 /* Not a valid event */ |
| #define LVCS_EVENT_ALGOFF 0x0001 /* CS has completed switch off */ |
| |
| |
| /****************************************************************************************/ |
| /* */ |
| /* Types */ |
| /* */ |
| /****************************************************************************************/ |
| |
| /* Instance handle */ |
| typedef void *LVCS_Handle_t; |
| |
| |
| /* Operating modes */ |
| typedef enum |
| { |
| LVCS_OFF = 0, |
| LVCS_ON = 15, |
| LVCS_MAX = LVM_MAXENUM |
| } LVCS_Modes_en; |
| |
| |
| /* Memory Types */ |
| typedef enum |
| { |
| LVCS_SCRATCH = 0, |
| LVCS_DATA = 1, |
| LVCS_COEFFICIENT = 2, |
| LVCS_PERSISTENT = 3, |
| LVCS_MEMORYTYPE_MAX = LVM_MAXENUM |
| } LVCS_MemoryTypes_en; |
| |
| |
| /* Function return status */ |
| typedef enum |
| { |
| LVCS_SUCCESS = 0, /* Successful return from a routine */ |
| LVCS_ALIGNMENTERROR = 1, /* Memory alignment error */ |
| LVCS_NULLADDRESS = 2, /* NULL allocation address */ |
| LVCS_TOOMANYSAMPLES = 3, /* Maximum block size exceeded */ |
| LVCS_INVALIDBUFFER = 4, /* Invalid buffer processing request */ |
| LVCS_STATUSMAX = LVM_MAXENUM |
| } LVCS_ReturnStatus_en; |
| |
| |
| /* |
| * Source data formats |
| */ |
| typedef enum |
| { |
| LVCS_STEREO = 0, |
| LVCS_MONOINSTEREO = 1, |
| LVCS_SOURCEMAX = LVM_MAXENUM |
| } LVCS_SourceFormat_en; |
| |
| |
| /* |
| * Supported output devices |
| */ |
| typedef enum |
| { |
| LVCS_HEADPHONES = 0, |
| LVCS_EX_HEADPHONES = 1, |
| LVCS_SPEAKERTYPE_MAX = LVM_MAXENUM |
| } LVCS_SpeakerType_en; |
| |
| /* |
| * Speaker Coefficients Table |
| */ |
| typedef struct |
| { |
| void *pTable1; |
| void *pTable2; |
| void *pTable3; |
| void *pTable4; |
| void *pTable5; |
| void *pTable6; |
| void *pTable7; |
| void *pTable8; |
| } LVCS_CSMS_Coef_Tables_t; |
| |
| |
| /****************************************************************************************/ |
| /* */ |
| /* Structures */ |
| /* */ |
| /****************************************************************************************/ |
| |
| /* Memory region definition */ |
| typedef struct |
| { |
| LVM_UINT32 Size; /* Region size in bytes */ |
| LVCS_MemoryTypes_en Type; /* Region type */ |
| void *pBaseAddress; /* Pointer to the region base address */ |
| } LVCS_MemoryRegion_t; |
| |
| |
| /* Memory table containing the region definitions */ |
| typedef struct |
| { |
| LVCS_MemoryRegion_t Region[LVCS_NR_MEMORY_REGIONS]; /* One definition for each region */ |
| } LVCS_MemTab_t; |
| |
| |
| /* Concert Sound parameter structure */ |
| typedef struct |
| { |
| LVCS_Modes_en OperatingMode; /* Algorithm mode */ |
| LVCS_SpeakerType_en SpeakerType; /* Output device type */ |
| LVCS_SourceFormat_en SourceFormat; /* Source data format */ |
| LVM_Mode_en CompressorMode; /* Non-Linear Compressor Mode */ |
| LVM_Fs_en SampleRate; /* Sampling rate */ |
| LVM_INT16 EffectLevel; /* Effect level */ |
| LVM_UINT16 ReverbLevel; /* Reverb level in % */ |
| } LVCS_Params_t; |
| |
| |
| /* Concert Sound Capability structure */ |
| typedef struct |
| { |
| /* General parameters */ |
| LVM_UINT16 MaxBlockSize; /* Maximum block size in sample pairs */ |
| |
| /* Callback parameters */ |
| LVM_Callback CallBack; /* Bundle callback */ |
| void *pBundleInstance; /* Bundle instance handle */ |
| |
| } LVCS_Capabilities_t; |
| |
| |
| /****************************************************************************************/ |
| /* */ |
| /* Function Prototypes */ |
| /* */ |
| /****************************************************************************************/ |
| |
| /****************************************************************************************/ |
| /* */ |
| /* FUNCTION: LVCS_Memory */ |
| /* */ |
| /* DESCRIPTION: */ |
| /* This function is used for memory allocation and free. It can be called in */ |
| /* two ways: */ |
| /* */ |
| /* hInstance = NULL Returns the memory requirements */ |
| /* hInstance = Instance handle Returns the memory requirements and */ |
| /* allocated base addresses for the instance */ |
| /* */ |
| /* When this function is called for memory allocation (hInstance=NULL) it is */ |
| /* passed the default capabilities, of these only the buffer processing setting is */ |
| /* used. */ |
| /* */ |
| /* When called for memory allocation the memory base address pointers are NULL on */ |
| /* return. */ |
| /* */ |
| /* When the function is called for free (hInstance = Instance Handle) the */ |
| /* capabilities are ignored and the memory table returns the allocated memory and */ |
| /* base addresses used during initialisation. */ |
| /* */ |
| /* PARAMETERS: */ |
| /* hInstance Instance Handle */ |
| /* pMemoryTable Pointer to an empty memory definition table */ |
| /* pCapabilities Pointer to the default capabilites */ |
| /* */ |
| /* RETURNS: */ |
| /* LVCS_Success Succeeded */ |
| /* */ |
| /* NOTES: */ |
| /* 1. This function may be interrupted by the LVCS_Process function */ |
| /* */ |
| /****************************************************************************************/ |
| |
| LVCS_ReturnStatus_en LVCS_Memory(LVCS_Handle_t hInstance, |
| LVCS_MemTab_t *pMemoryTable, |
| LVCS_Capabilities_t *pCapabilities); |
| |
| |
| /****************************************************************************************/ |
| /* */ |
| /* FUNCTION: LVCS_Init */ |
| /* */ |
| /* DESCRIPTION: */ |
| /* Create and initialisation function for the Concert Sound module */ |
| /* */ |
| /* This function can be used to create an algorithm instance by calling with */ |
| /* hInstance set to NULL. In this case the algorithm returns the new instance */ |
| /* handle. */ |
| /* */ |
| /* This function can be used to force a full re-initialisation of the algorithm */ |
| /* by calling with hInstance = Instance Handle. In this case the memory table */ |
| /* should be correct for the instance, this can be ensured by calling the function */ |
| /* LVCS_Memory before calling this function. */ |
| /* */ |
| /* PARAMETERS: */ |
| /* hInstance Instance handle */ |
| /* pMemoryTable Pointer to the memory definition table */ |
| /* pCapabilities Pointer to the initialisation capabilities */ |
| /* */ |
| /* RETURNS: */ |
| /* LVCS_Success Initialisation succeeded */ |
| /* LVCS_AlignmentError Instance or scratch memory on incorrect alignment */ |
| /* LVCS_NullAddress Instance or scratch memory has a NULL pointer */ |
| /* */ |
| /* NOTES: */ |
| /* 1. The instance handle is the pointer to the base address of the first memory */ |
| /* region. */ |
| /* 2. This function must not be interrupted by the LVCS_Process function */ |
| /* */ |
| /****************************************************************************************/ |
| |
| LVCS_ReturnStatus_en LVCS_Init(LVCS_Handle_t *phInstance, |
| LVCS_MemTab_t *pMemoryTable, |
| LVCS_Capabilities_t *pCapabilities); |
| |
| |
| /****************************************************************************************/ |
| /* */ |
| /* FUNCTION: LVCS_GetParameters */ |
| /* */ |
| /* DESCRIPTION: */ |
| /* Request the Concert Sound parameters. The current parameter set is returned */ |
| /* via the parameter pointer. */ |
| /* */ |
| /* PARAMETERS: */ |
| /* hInstance Instance handle */ |
| /* pParams Pointer to an empty parameter structure */ |
| /* */ |
| /* RETURNS: */ |
| /* LVCS_Success Always succeeds */ |
| /* */ |
| /* NOTES: */ |
| /* 1. This function may be interrupted by the LVCS_Process function */ |
| /* */ |
| /****************************************************************************************/ |
| |
| LVCS_ReturnStatus_en LVCS_GetParameters(LVCS_Handle_t hInstance, |
| LVCS_Params_t *pParams); |
| |
| |
| /****************************************************************************************/ |
| /* */ |
| /* FUNCTION: LVCS_Control */ |
| /* */ |
| /* DESCRIPTION: */ |
| /* Sets or changes the Concert Sound parameters. */ |
| /* */ |
| /* PARAMETERS: */ |
| /* hInstance Instance handle */ |
| /* pParams Pointer to a parameter structure */ |
| /* */ |
| /* RETURNS: */ |
| /* LVCS_Success Succeeded */ |
| /* */ |
| /* NOTES: */ |
| /* 1. This function must not be interrupted by the LVCS_Process function */ |
| /* */ |
| /****************************************************************************************/ |
| |
| LVCS_ReturnStatus_en LVCS_Control(LVCS_Handle_t hInstance, |
| LVCS_Params_t *pParams); |
| |
| |
| /****************************************************************************************/ |
| /* */ |
| /* FUNCTION: LVCS_Process */ |
| /* */ |
| /* DESCRIPTION: */ |
| /* Process function for the Concert Sound module. The implementation supports two */ |
| /* variants of the algorithm, one for headphones and one for mobile speakers. */ |
| /* */ |
| /* PARAMETERS: */ |
| /* hInstance Instance handle */ |
| /* pInData Pointer to the input data */ |
| /* pOutData Pointer to the output data */ |
| /* NumSamples Number of samples in the input buffer */ |
| /* */ |
| /* RETURNS: */ |
| /* LVCS_Success Succeeded */ |
| /* LVCS_TooManySamples NumSamples was larger than the maximum block size */ |
| /* */ |
| /* NOTES: */ |
| /* */ |
| /****************************************************************************************/ |
| |
| LVCS_ReturnStatus_en LVCS_Process(LVCS_Handle_t hInstance, |
| const LVM_INT16 *pInData, |
| LVM_INT16 *pOutData, |
| LVM_UINT16 NumSamples); |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif /* __cplusplus */ |
| |
| #endif /* LVCS_H */ |