am 2814ad25: Merge "LVM release 1.09 delivery" into gingerbread
Merge commit '2814ad25578d1a52826464477da16217247c04e0' into gingerbread-plus-aosp * commit '2814ad25578d1a52826464477da16217247c04e0': LVM release 1.09 delivery
This commit is contained in:
@@ -64,7 +64,7 @@ extern "C" {
|
||||
#define LVDBE_PERSISTENT_COEF_ALIGN 4 /* 32-bit alignment for coef */
|
||||
#define LVDBE_SCRATCH_ALIGN 4 /* 32-bit alignment for long data */
|
||||
|
||||
#define LVDBE_SCRATCHBUFFERS_INPLACE 4 /* Number of buffers required for inplace processing */
|
||||
#define LVDBE_SCRATCHBUFFERS_INPLACE 6 /* Number of buffers required for inplace processing */
|
||||
|
||||
#define LVDBE_MIXER_TC 5 /* Mixer time */
|
||||
#define LVDBE_BYPASS_MIXER_TC 100 /* Bypass mixer time */
|
||||
|
||||
@@ -496,7 +496,6 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings (LVREV_Instance_st *pPrivate)
|
||||
* Update the bypass mixer time constant
|
||||
*/
|
||||
if((pPrivate->NewParams.SampleRate != pPrivate->CurrentParams.SampleRate) ||
|
||||
(pPrivate->NewParams.SourceFormat != pPrivate->CurrentParams.SourceFormat) ||
|
||||
(pPrivate->bFirstControl == LVM_TRUE))
|
||||
{
|
||||
LVM_UINT16 NumChannels = 1; /* Assume MONO format */
|
||||
@@ -508,11 +507,7 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings (LVREV_Instance_st *pPrivate)
|
||||
pPrivate->FeedbackMixer[2].Alpha=Alpha;
|
||||
pPrivate->FeedbackMixer[3].Alpha=Alpha;
|
||||
|
||||
if (pPrivate->NewParams.SourceFormat != LVM_MONO)
|
||||
{
|
||||
/* Stereo or Mono-in-Stereo format data */
|
||||
NumChannels = 2;
|
||||
}
|
||||
NumChannels = 2; /* Always stereo output */
|
||||
pPrivate->BypassMixer.Alpha1 = (LVM_INT32)LVM_Mixer_TimeConstant(LVREV_BYPASSMIXER_TC, LVM_GetFsFromTable(pPrivate->NewParams.SampleRate), NumChannels);
|
||||
pPrivate->BypassMixer.Alpha2 = pPrivate->BypassMixer.Alpha1;
|
||||
pPrivate->GainMixer.Alpha = pPrivate->BypassMixer.Alpha1;
|
||||
|
||||
@@ -54,7 +54,8 @@ LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t hInstance,
|
||||
LVREV_Instance_st *pLVREV_Private = (LVREV_Instance_st *)hInstance;
|
||||
LVM_INT32 *pInput = (LVM_INT32 *)pInData;
|
||||
LVM_INT32 *pOutput = pOutData;
|
||||
LVM_INT32 SamplesToProcess, RemainingSamples, format;
|
||||
LVM_INT32 SamplesToProcess, RemainingSamples;
|
||||
LVM_INT32 format = 1;
|
||||
|
||||
/*
|
||||
* Check for error conditions
|
||||
@@ -66,7 +67,6 @@ LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t hInstance,
|
||||
return LVREV_NULLADDRESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Apply the new controls settings if required
|
||||
*/
|
||||
@@ -95,9 +95,31 @@ LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t hInstance,
|
||||
return LVREV_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* If OFF copy and reformat the data as necessary
|
||||
*/
|
||||
if (pLVREV_Private->CurrentParams.OperatingMode == LVM_MODE_OFF)
|
||||
{
|
||||
if(pInput != pOutput)
|
||||
{
|
||||
/*
|
||||
* Copy the data to the output buffer, convert to stereo is required
|
||||
*/
|
||||
|
||||
if(pLVREV_Private->CurrentParams.SourceFormat == LVM_MONO){
|
||||
MonoTo2I_32(pInput, pOutput, NumSamples);
|
||||
} else {
|
||||
Copy_16((LVM_INT16 *)pInput,
|
||||
(LVM_INT16 *)pOutput,
|
||||
(LVM_INT16)(NumSamples << 2)); // 32 bit data, stereo
|
||||
}
|
||||
}
|
||||
|
||||
return LVREV_SUCCESS;
|
||||
}
|
||||
|
||||
RemainingSamples = (LVM_INT32)NumSamples;
|
||||
|
||||
format = 1;
|
||||
if (pLVREV_Private->CurrentParams.SourceFormat != LVM_MONO)
|
||||
{
|
||||
format = 2;
|
||||
@@ -106,51 +128,24 @@ LVREV_ReturnStatus_en LVREV_Process(LVREV_Handle_t hInstance,
|
||||
while (RemainingSamples!=0)
|
||||
{
|
||||
/*
|
||||
* If OFF copy and reformat the data as necessary
|
||||
* Process the data
|
||||
*/
|
||||
if (pLVREV_Private->CurrentParams.OperatingMode == LVM_MODE_OFF)
|
||||
|
||||
if(RemainingSamples > pLVREV_Private->MaxBlkLen)
|
||||
{
|
||||
if((pInput != pOutput) || (pLVREV_Private->CurrentParams.SourceFormat == LVM_MONO))
|
||||
{
|
||||
/*
|
||||
* Copy the data to the output buffer
|
||||
*/
|
||||
|
||||
if (pLVREV_Private->CurrentParams.SourceFormat != LVM_MONO)
|
||||
{
|
||||
RemainingSamples = (RemainingSamples << 1); /* Stereo data */
|
||||
}
|
||||
|
||||
Copy_16((LVM_INT16 *)pInput,
|
||||
(LVM_INT16 *)pOutput,
|
||||
(LVM_INT16)(RemainingSamples << 1));
|
||||
}
|
||||
|
||||
SamplesToProcess = pLVREV_Private->MaxBlkLen;
|
||||
RemainingSamples = (LVM_INT16)(RemainingSamples - SamplesToProcess);
|
||||
}
|
||||
else
|
||||
{
|
||||
SamplesToProcess = RemainingSamples;
|
||||
RemainingSamples = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Process the data
|
||||
*/
|
||||
else
|
||||
{
|
||||
ReverbBlock(pInput, pOutput, pLVREV_Private, (LVM_UINT16)SamplesToProcess);
|
||||
|
||||
if(RemainingSamples > pLVREV_Private->MaxBlkLen)
|
||||
{
|
||||
SamplesToProcess = pLVREV_Private->MaxBlkLen;
|
||||
RemainingSamples = (LVM_INT16)(RemainingSamples - SamplesToProcess);
|
||||
}
|
||||
else
|
||||
{
|
||||
SamplesToProcess = RemainingSamples;
|
||||
RemainingSamples = 0;
|
||||
}
|
||||
|
||||
ReverbBlock(pInput, pOutput, pLVREV_Private, (LVM_UINT16)SamplesToProcess);
|
||||
|
||||
pInput = (LVM_INT32 *)(pInput +(SamplesToProcess*format));
|
||||
pOutput = (LVM_INT32 *)(pOutput+(SamplesToProcess*format));
|
||||
}
|
||||
pInput = (LVM_INT32 *)(pInput +(SamplesToProcess*format));
|
||||
pOutput = (LVM_INT32 *)(pOutput+(SamplesToProcess*2)); // Always stereo output
|
||||
}
|
||||
|
||||
return LVREV_SUCCESS;
|
||||
@@ -420,26 +415,13 @@ void ReverbBlock(LVM_INT32 *pInput, LVM_INT32 *pOutput, LVREV_Instance_st *pPriv
|
||||
pPrivate->pScratchDelayLine[1],
|
||||
(LVM_INT16)NumSamples);
|
||||
|
||||
if(pPrivate->CurrentParams.SourceFormat != LVM_MONO)
|
||||
{
|
||||
JoinTo2i_32x32(pPrivate->pScratchDelayLine[0],
|
||||
pPrivate->pScratchDelayLine[1],
|
||||
pTemp,
|
||||
(LVM_INT16)NumSamples);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Add2_Sat_32x32(pPrivate->pScratchDelayLine[1],
|
||||
pPrivate->pScratchDelayLine[0],
|
||||
(LVM_INT16)NumSamples);
|
||||
JoinTo2i_32x32(pPrivate->pScratchDelayLine[0],
|
||||
pPrivate->pScratchDelayLine[1],
|
||||
pTemp,
|
||||
(LVM_INT16)NumSamples);
|
||||
|
||||
|
||||
/*Apply 3-dB gain in-order to compensate for the gain change in stereo mode*/
|
||||
Mult3s_32x16(pPrivate->pScratchDelayLine[0],
|
||||
LVREV_MIN3DB,
|
||||
pTemp,
|
||||
(LVM_INT16)NumSamples);
|
||||
}
|
||||
break;
|
||||
case LVREV_DELAYLINES_2:
|
||||
|
||||
@@ -447,49 +429,25 @@ void ReverbBlock(LVM_INT32 *pInput, LVM_INT32 *pOutput, LVREV_Instance_st *pPriv
|
||||
(LVM_INT16*)pScratch,
|
||||
(LVM_INT16)(NumSamples << 1));
|
||||
|
||||
|
||||
|
||||
if(pPrivate->CurrentParams.SourceFormat != LVM_MONO)
|
||||
{
|
||||
|
||||
Mac3s_Sat_32x16(pPrivate->pScratchDelayLine[0],
|
||||
-0x8000,
|
||||
pScratch,
|
||||
(LVM_INT16)NumSamples);
|
||||
}
|
||||
Mac3s_Sat_32x16(pPrivate->pScratchDelayLine[0],
|
||||
-0x8000,
|
||||
pScratch,
|
||||
(LVM_INT16)NumSamples);
|
||||
|
||||
Add2_Sat_32x32(pPrivate->pScratchDelayLine[1],
|
||||
pPrivate->pScratchDelayLine[0],
|
||||
(LVM_INT16)NumSamples);
|
||||
|
||||
|
||||
if(pPrivate->CurrentParams.SourceFormat != LVM_MONO)
|
||||
{
|
||||
JoinTo2i_32x32(pPrivate->pScratchDelayLine[0],
|
||||
pScratch,
|
||||
pTemp,
|
||||
(LVM_INT16)NumSamples);
|
||||
}
|
||||
else
|
||||
{
|
||||
Copy_16( (LVM_INT16*)pPrivate->pScratchDelayLine[0],
|
||||
(LVM_INT16*)pTemp,
|
||||
(LVM_INT16)(NumSamples << 1));
|
||||
|
||||
}
|
||||
break;
|
||||
case LVREV_DELAYLINES_1:
|
||||
if(pPrivate->CurrentParams.SourceFormat != LVM_MONO)
|
||||
{
|
||||
|
||||
MonoTo2I_32(pPrivate->pScratchDelayLine[0],
|
||||
JoinTo2i_32x32(pPrivate->pScratchDelayLine[0],
|
||||
pScratch,
|
||||
pTemp,
|
||||
(LVM_INT16)NumSamples);
|
||||
}
|
||||
else
|
||||
{
|
||||
pTemp = pPrivate->pScratchDelayLine[0];
|
||||
}
|
||||
break;
|
||||
case LVREV_DELAYLINES_1:
|
||||
MonoTo2I_32(pPrivate->pScratchDelayLine[0],
|
||||
pTemp,
|
||||
(LVM_INT16)NumSamples);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -499,30 +457,15 @@ void ReverbBlock(LVM_INT32 *pInput, LVM_INT32 *pOutput, LVREV_Instance_st *pPriv
|
||||
/*
|
||||
* Dry/wet mixer
|
||||
*/
|
||||
if(pPrivate->CurrentParams.SourceFormat != LVM_MONO)
|
||||
{
|
||||
size = (LVM_INT16)(NumSamples << 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
size = (LVM_INT16)NumSamples;
|
||||
}
|
||||
|
||||
size = (LVM_INT16)(NumSamples << 1);
|
||||
MixSoft_2St_D32C31_SAT(&pPrivate->BypassMixer,
|
||||
pInput,
|
||||
pTemp,
|
||||
pTemp,
|
||||
pOutput,
|
||||
size);
|
||||
|
||||
/* Apply Gain*/
|
||||
if(pPrivate->CurrentParams.SourceFormat != LVM_MONO)
|
||||
{
|
||||
size = (LVM_INT16)(NumSamples << 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
size = (LVM_INT16)NumSamples;
|
||||
}
|
||||
|
||||
Shift_Sat_v32xv32 (LVREV_OUTPUTGAIN_SHIFT,
|
||||
pOutput,
|
||||
@@ -533,6 +476,7 @@ void ReverbBlock(LVM_INT32 *pInput, LVM_INT32 *pOutput, LVREV_Instance_st *pPriv
|
||||
pOutput,
|
||||
pOutput,
|
||||
size);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -431,26 +431,15 @@ int process( LVM_INT16 *pIn,
|
||||
pContext->InFrames32[i] = (LVM_INT32)pIn[i]<<8;
|
||||
}
|
||||
|
||||
// If the input was MONO, convert to STEREO
|
||||
if(pContext->config.inputCfg.channels == CHANNEL_MONO){
|
||||
//LOGV("\tConverting Output from MONO to STEREO");
|
||||
MonoTo2I_32(pContext->InFrames32, pContext->InFrames32, frameCount);
|
||||
}
|
||||
|
||||
//LOGV("\tProcess, frames: %d, InFormat: %d(MONO=%d), OutFormat: %d(STEREO=%d)",
|
||||
//frameCount, pContext->config.inputCfg.channels, CHANNEL_MONO,
|
||||
//pContext->config.outputCfg.channels, CHANNEL_STEREO);
|
||||
|
||||
if (pContext->preset && pContext->curPreset == REVERB_PRESET_NONE) {
|
||||
memset(pContext->OutFrames32, 0, frameCount * sizeof(LVM_INT32) * 2); //always stereo here
|
||||
} else {
|
||||
if(pContext->bEnabled == LVM_FALSE && pContext->SamplesToExitCount > 0) {
|
||||
memset(pContext->InFrames32,
|
||||
0,
|
||||
frameCount * sizeof(LVM_INT32) * 2); //always stereo here
|
||||
memset(pContext->InFrames32,0,frameCount * sizeof(LVM_INT32) * samplesPerFrame);
|
||||
LOGV("\tZeroing %d samples per frame at the end of call", samplesPerFrame);
|
||||
}
|
||||
|
||||
/* Process the samples */
|
||||
/* Process the samples, producing a stereo output */
|
||||
LvmStatus = LVREV_Process(pContext->hInstance, /* Instance handle */
|
||||
pContext->InFrames32, /* Input buffer */
|
||||
pContext->OutFrames32, /* Output buffer */
|
||||
@@ -677,7 +666,7 @@ int Reverb_init(ReverbContext *pContext){
|
||||
|
||||
/* Set the capabilities */
|
||||
InstParams.MaxBlockSize = MAX_CALL_SIZE;
|
||||
InstParams.SourceFormat = LVM_STEREO;
|
||||
InstParams.SourceFormat = LVM_STEREO; // Max format, could be mono during process
|
||||
InstParams.NumDelays = LVREV_DELAYLINES_4;
|
||||
|
||||
/* Allocate memory, forcing alignment */
|
||||
@@ -742,7 +731,12 @@ int Reverb_init(ReverbContext *pContext){
|
||||
/* General parameters */
|
||||
params.OperatingMode = LVM_MODE_ON;
|
||||
params.SampleRate = LVM_FS_44100;
|
||||
params.SourceFormat = LVM_STEREO;
|
||||
|
||||
if(pContext->config.inputCfg.channels == CHANNEL_MONO){
|
||||
params.SourceFormat = LVM_MONO;
|
||||
} else {
|
||||
params.SourceFormat = LVM_STEREO;
|
||||
}
|
||||
|
||||
/* Reverb parameters */
|
||||
params.Level = 0;
|
||||
@@ -1790,8 +1784,9 @@ extern "C" int Reverb_process(effect_interface_t self,
|
||||
if (pContext->bEnabled == LVM_FALSE){
|
||||
if( pContext->SamplesToExitCount > 0){
|
||||
pContext->SamplesToExitCount -= outBuffer->frameCount;
|
||||
LOGV("\tReverb_process() Effect is being stopped %d", pContext->SamplesToExitCount);
|
||||
}else{
|
||||
LOGV("\tReverb_process() ERROR Effect is not enabled %d", pContext->SamplesToExitCount);
|
||||
LOGV("\tReverb_process() Effect is being stopped");
|
||||
return -ENODATA;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user