diff options
Diffstat (limited to 'media/libeffects/lvm/lib/Bass/src')
-rwxr-xr-x | media/libeffects/lvm/lib/Bass/src/LVDBE_Control.c | 31 | ||||
-rwxr-xr-x | media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c | 41 | ||||
-rwxr-xr-x | media/libeffects/lvm/lib/Bass/src/LVDBE_Private.h | 12 | ||||
-rwxr-xr-x | media/libeffects/lvm/lib/Bass/src/LVDBE_Process.c | 98 |
4 files changed, 111 insertions, 71 deletions
diff --git a/media/libeffects/lvm/lib/Bass/src/LVDBE_Control.c b/media/libeffects/lvm/lib/Bass/src/LVDBE_Control.c index 8cf84b7..4a9dc72 100755 --- a/media/libeffects/lvm/lib/Bass/src/LVDBE_Control.c +++ b/media/libeffects/lvm/lib/Bass/src/LVDBE_Control.c @@ -17,9 +17,9 @@ /**************************************************************************************** - $Author: nxp007753 $ - $Revision: 1315 $ - $Date: 2010-07-23 11:52:08 +0200 (Fri, 23 Jul 2010) $ + $Author: beq06068 $ + $Revision: 1401 $ + $Date: 2010-08-03 09:52:22 +0200 (Tue, 03 Aug 2010) $ *****************************************************************************************/ @@ -128,7 +128,7 @@ void LVDBE_SetFilters(LVDBE_Instance_t *pInstance, (void *)&pInstance->pData->HPFTaps, /* Destination Cast to void: \ no dereferencing in function*/ sizeof(pInstance->pData->HPFTaps)/sizeof(LVM_INT16)); /* Number of words */ - BQ_2I_D32F32Cll_TRC_WRA_01_Init(&pInstance->pCoef->HPFInstance, /* Initialise the filter */ + BQ_2I_D32F32Cll_TRC_WRA_01_Init(&pInstance->pCoef->HPFInstance, /* Initialise the filter */ &pInstance->pData->HPFTaps, (BQ_C32_Coefs_t *)&LVDBE_HPF_Table[Offset]); @@ -140,7 +140,7 @@ void LVDBE_SetFilters(LVDBE_Instance_t *pInstance, (void *)&pInstance->pData->BPFTaps, /* Destination Cast to void:\ no dereferencing in function*/ sizeof(pInstance->pData->BPFTaps)/sizeof(LVM_INT16)); /* Number of words */ - BP_1I_D32F32Cll_TRC_WRA_02_Init(&pInstance->pCoef->BPFInstance, /* Initialise the filter */ + BP_1I_D32F32Cll_TRC_WRA_02_Init(&pInstance->pCoef->BPFInstance, /* Initialise the filter */ &pInstance->pData->BPFTaps, (BP_C32_Coefs_t *)&LVDBE_BPF_Table[Offset]); @@ -317,6 +317,7 @@ LVDBE_ReturnStatus_en LVDBE_Control(LVDBE_Handle_t hInstance, { LVDBE_Instance_t *pInstance =(LVDBE_Instance_t *)hInstance; + LVMixer3_2St_st *pBypassMixer_Instance = &pInstance->pData->BypassMixer; /* @@ -339,6 +340,14 @@ LVDBE_ReturnStatus_en LVDBE_Control(LVDBE_Handle_t hInstance, { LVDBE_SetAGC(pInstance, /* Instance pointer */ pParams); /* New parameters */ + + LVC_Mixer_SetTimeConstant(&pBypassMixer_Instance->MixerStream[0], + LVDBE_BYPASS_MIXER_TC,pParams->SampleRate,2); + + LVC_Mixer_SetTimeConstant(&pBypassMixer_Instance->MixerStream[1], + LVDBE_BYPASS_MIXER_TC,pParams->SampleRate,2); + + } @@ -356,17 +365,13 @@ LVDBE_ReturnStatus_en LVDBE_Control(LVDBE_Handle_t hInstance, if (pInstance->Params.OperatingMode==LVDBE_ON && pParams->OperatingMode==LVDBE_OFF) { - LVDBE_Params_t Params = *pParams; /* make local copy of params */ - Params.EffectLevel = 0; /* zero effect level before switching off module*/ - pInstance->bTransitionOnToOff = LVM_TRUE; /* Set the CallBack */ - LVDBE_SetAGC(pInstance, /* Instance pointer */ - &Params); /* New parameters */ + LVC_Mixer_SetTarget(&pInstance->pData->BypassMixer.MixerStream[0],0); + LVC_Mixer_SetTarget(&pInstance->pData->BypassMixer.MixerStream[1],0x00007FFF); } if (pInstance->Params.OperatingMode==LVDBE_OFF && pParams->OperatingMode==LVDBE_ON) { - pInstance->bTransitionOnToOff = LVM_FALSE; /* Set the CallBack */ - LVDBE_SetAGC(pInstance, /* Instance pointer */ - pParams); /* New parameters */ + LVC_Mixer_SetTarget(&pInstance->pData->BypassMixer.MixerStream[0],0x00007FFF); + LVC_Mixer_SetTarget(&pInstance->pData->BypassMixer.MixerStream[1],0); } /* diff --git a/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c b/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c index 75869c7..95c421d 100755 --- a/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c +++ b/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c @@ -17,9 +17,9 @@ /**************************************************************************************** - $Author: nxp007753 $ - $Revision: 1081 $ - $Date: 2010-07-05 11:48:44 +0200 (Mon, 05 Jul 2010) $ + $Author: beq06068 $ + $Revision: 1399 $ + $Date: 2010-08-03 08:16:00 +0200 (Tue, 03 Aug 2010) $ *****************************************************************************************/ @@ -160,6 +160,7 @@ LVDBE_ReturnStatus_en LVDBE_Init(LVDBE_Handle_t *phInstance, LVDBE_Instance_t *pInstance; LVMixer3_1St_st *pMixer_Instance; + LVMixer3_2St_st *pBypassMixer_Instance; LVM_INT16 i; LVM_INT32 MixGain; @@ -227,7 +228,7 @@ LVDBE_ReturnStatus_en LVDBE_Init(LVDBE_Handle_t *phInstance, /* * Initialise the filters */ - LVDBE_SetFilters(pInstance, /* Set the filter taps and coefficients */ + LVDBE_SetFilters(pInstance, /* Set the filter taps and coefficients */ &pInstance->Params); @@ -236,7 +237,8 @@ LVDBE_ReturnStatus_en LVDBE_Init(LVDBE_Handle_t *phInstance, */ LVDBE_SetAGC(pInstance, /* Set the AGC gain */ &pInstance->Params); - pInstance->pData->AGCInstance.AGC_Gain = pInstance->pData->AGCInstance.AGC_MaxGain; /* Default to the bass boost setting */ + pInstance->pData->AGCInstance.AGC_Gain = pInstance->pData->AGCInstance.AGC_MaxGain; + /* Default to the bass boost setting */ /* @@ -245,7 +247,8 @@ LVDBE_ReturnStatus_en LVDBE_Init(LVDBE_Handle_t *phInstance, LVDBE_SetVolume(pInstance, /* Set the Volume */ &pInstance->Params); - pInstance->pData->AGCInstance.Volume = pInstance->pData->AGCInstance.Target; /* Initialise as the target */ + pInstance->pData->AGCInstance.Volume = pInstance->pData->AGCInstance.Target; + /* Initialise as the target */ pMixer_Instance = &pInstance->pData->BypassVolume; MixGain = LVC_Mixer_GetTarget(&pMixer_Instance->MixerStream[0]); @@ -258,9 +261,31 @@ LVDBE_ReturnStatus_en LVDBE_Init(LVDBE_Handle_t *phInstance, pMixer_Instance->MixerStream[0].CallbackSet = 0; /* - * Initialise the clicks minimisation variable + * Initialise the clicks minimisation BypassMixer */ - pInstance->bTransitionOnToOff = LVM_FALSE; + + pBypassMixer_Instance = &pInstance->pData->BypassMixer; + + /* + * Setup the mixer gain for the processed path + */ + pBypassMixer_Instance->MixerStream[0].CallbackParam = 0; + pBypassMixer_Instance->MixerStream[0].pCallbackHandle = LVM_NULL; + pBypassMixer_Instance->MixerStream[0].pCallBack = LVM_NULL; + pBypassMixer_Instance->MixerStream[0].CallbackSet=0; + LVC_Mixer_Init(&pBypassMixer_Instance->MixerStream[0],0,0); + LVC_Mixer_SetTimeConstant(&pBypassMixer_Instance->MixerStream[0], + LVDBE_BYPASS_MIXER_TC,pInstance->Params.SampleRate,2); + /* + * Setup the mixer gain for the unprocessed path + */ + pBypassMixer_Instance->MixerStream[1].CallbackParam = 0; + pBypassMixer_Instance->MixerStream[1].pCallbackHandle = LVM_NULL; + pBypassMixer_Instance->MixerStream[1].pCallBack = LVM_NULL; + pBypassMixer_Instance->MixerStream[1].CallbackSet=0; + LVC_Mixer_Init(&pBypassMixer_Instance->MixerStream[1],0x00007FFF,0x00007FFF); + LVC_Mixer_SetTimeConstant(&pBypassMixer_Instance->MixerStream[1], + LVDBE_BYPASS_MIXER_TC,pInstance->Params.SampleRate,2); return(LVDBE_SUCCESS); } diff --git a/media/libeffects/lvm/lib/Bass/src/LVDBE_Private.h b/media/libeffects/lvm/lib/Bass/src/LVDBE_Private.h index 3e09cf4..df32873 100755 --- a/media/libeffects/lvm/lib/Bass/src/LVDBE_Private.h +++ b/media/libeffects/lvm/lib/Bass/src/LVDBE_Private.h @@ -17,9 +17,9 @@ /**************************************************************************************** - $Author: nxp007753 $ - $Revision: 1081 $ - $Date: 2010-07-05 11:48:44 +0200 (Mon, 05 Jul 2010) $ + $Author: beq06068 $ + $Revision: 1399 $ + $Date: 2010-08-03 08:16:00 +0200 (Tue, 03 Aug 2010) $ *****************************************************************************************/ @@ -75,6 +75,8 @@ extern "C" { #define LVDBE_SCRATCHBUFFERS_INPLACE 4 /* Number of buffers required for inplace processing */ #define LVDBE_MIXER_TC 5 /* Mixer time */ +#define LVDBE_BYPASS_MIXER_TC 100 /* Bypass mixer time */ + /****************************************************************************************/ /* */ @@ -92,6 +94,7 @@ typedef struct Biquad_2I_Order2_Taps_t HPFTaps; /* High pass filter taps */ Biquad_1I_Order2_Taps_t BPFTaps; /* Band pass filter taps */ LVMixer3_1St_st BypassVolume; /* Bypass volume scaler */ + LVMixer3_2St_st BypassMixer; /* Bypass Mixer for Click Removal */ } LVDBE_Data_t; @@ -115,9 +118,6 @@ typedef struct /* Data and coefficient pointers */ LVDBE_Data_t *pData; /* Instance data */ LVDBE_Coef_t *pCoef; /* Instance coefficients */ - - LVM_INT32 bTransitionOnToOff; - } LVDBE_Instance_t; diff --git a/media/libeffects/lvm/lib/Bass/src/LVDBE_Process.c b/media/libeffects/lvm/lib/Bass/src/LVDBE_Process.c index 35eec07..04032c0 100755 --- a/media/libeffects/lvm/lib/Bass/src/LVDBE_Process.c +++ b/media/libeffects/lvm/lib/Bass/src/LVDBE_Process.c @@ -17,9 +17,9 @@ /**************************************************************************************** - $Author: nxp007753 $ - $Revision: 1081 $ - $Date: 2010-07-05 11:48:44 +0200 (Mon, 05 Jul 2010) $ + $Author: beq06068 $ + $Revision: 1400 $ + $Date: 2010-08-03 09:22:37 +0200 (Tue, 03 Aug 2010) $ *****************************************************************************************/ @@ -89,10 +89,16 @@ LVDBE_ReturnStatus_en LVDBE_Process(LVDBE_Handle_t hInstance, LVDBE_Instance_t *pInstance =(LVDBE_Instance_t *)hInstance; LVM_INT32 *pScratch = (LVM_INT32 *)pInstance->MemoryTable.Region[LVDBE_MEMREGION_SCRATCH].pBaseAddress; - LVM_INT32 *pMono = (LVM_INT32 *)pOutData; + LVM_INT32 *pMono; LVM_INT16 *pInput = (LVM_INT16 *)pInData; + /* Scratch for Volume Control starts at offset of 2*NumSamples short values from pScratch */ + LVM_INT16 *pScratchVol = (LVM_INT16 *)(&pScratch[NumSamples]); + + /* Scratch for Mono path starts at offset of 2*NumSamples 32-bit values from pScratch */ + pMono = &pScratch[2*NumSamples]; + /* * Check the number of samples is not too large */ @@ -104,18 +110,20 @@ LVDBE_ReturnStatus_en LVDBE_Process(LVDBE_Handle_t hInstance, /* * Check if the algorithm is enabled */ - if ((pInstance->Params.OperatingMode != LVDBE_OFF) || - (pInstance->bTransitionOnToOff == LVM_TRUE)) + /* DBE path is processed when DBE is ON or during On/Off transitions */ + if ((pInstance->Params.OperatingMode == LVDBE_ON)|| + (LVC_Mixer_GetCurrent(&pInstance->pData->BypassMixer.MixerStream[0]) + !=LVC_Mixer_GetTarget(&pInstance->pData->BypassMixer.MixerStream[0]))) { /* * Convert 16-bit samples to 32-bit and scale * (For a 16-bit implementation apply headroom loss here) */ - Int16LShiftToInt32_16x32(pInput, /* Source 16-bit data */ - pScratch, /* Destination 32-bit data */ - (LVM_INT16)(2*NumSamples), /* Left and right */ - LVDBE_SCALESHIFT); /* Shift scale */ + Int16LShiftToInt32_16x32(pInput, /* Source 16-bit data */ + pScratch, /* Dest. 32-bit data */ + (LVM_INT16)(2*NumSamples), /* Left and right */ + LVDBE_SCALESHIFT); /* Shift scale */ /* @@ -123,61 +131,54 @@ LVDBE_ReturnStatus_en LVDBE_Process(LVDBE_Handle_t hInstance, */ if (pInstance->Params.HPFSelect == LVDBE_HPF_ON) { - BQ_2I_D32F32C30_TRC_WRA_01(&pInstance->pCoef->HPFInstance, /* Filter instance */ - (LVM_INT32 *)pScratch, /* Source */ - (LVM_INT32 *)pScratch, /* Destination */ - (LVM_INT16)NumSamples); /* Number of samples */ + BQ_2I_D32F32C30_TRC_WRA_01(&pInstance->pCoef->HPFInstance,/* Filter instance */ + (LVM_INT32 *)pScratch, /* Source */ + (LVM_INT32 *)pScratch, /* Destination */ + (LVM_INT16)NumSamples); /* Number of samples */ } /* * Create the mono stream */ - From2iToMono_32(pScratch, /* Stereo source */ - pMono, /* Mono destination */ - (LVM_INT16)NumSamples); /* Number of samples */ + From2iToMono_32(pScratch, /* Stereo source */ + pMono, /* Mono destination */ + (LVM_INT16)NumSamples); /* Number of samples */ /* * Apply the band pass filter */ - BP_1I_D32F32C30_TRC_WRA_02(&pInstance->pCoef->BPFInstance, /* Filter instance */ - (LVM_INT32 *)pMono, /* Source */ - (LVM_INT32 *)pMono, /* Destination */ - (LVM_INT16)NumSamples); /* Number of samples */ + BP_1I_D32F32C30_TRC_WRA_02(&pInstance->pCoef->BPFInstance, /* Filter instance */ + (LVM_INT32 *)pMono, /* Source */ + (LVM_INT32 *)pMono, /* Destination */ + (LVM_INT16)NumSamples); /* Number of samples */ /* * Apply the AGC and mix */ - AGC_MIX_VOL_2St1Mon_D32_WRA(&pInstance->pData->AGCInstance, /* Instance pointer */ - pScratch, /* Stereo source */ - pMono, /* Mono band pass source */ - pScratch, /* Stereo destination */ - NumSamples); /* Number of samples */ - - if(pInstance->bTransitionOnToOff == LVM_TRUE) - { - if ((pInstance->pData->AGCInstance.AGC_Gain == pInstance->pData->AGCInstance.AGC_Target)&& - (pInstance->pData->AGCInstance.AGC_Gain == 0)) - { - pInstance->bTransitionOnToOff = LVM_FALSE; - } - } - - + AGC_MIX_VOL_2St1Mon_D32_WRA(&pInstance->pData->AGCInstance, /* Instance pointer */ + pScratch, /* Stereo source */ + pMono, /* Mono band pass source */ + pScratch, /* Stereo destination */ + NumSamples); /* Number of samples */ /* * Convert 32-bit samples to 16-bit and saturate * (Not required for 16-bit implemenations) */ - Int32RShiftToInt16_Sat_32x16(pScratch, /* Source 32-bit data */ - pOutData, /* Destination 16-bit data */ - (LVM_INT16)(2*NumSamples), /* Left and right */ - LVDBE_SCALESHIFT); /* Shift scale */ + Int32RShiftToInt16_Sat_32x16(pScratch, /* Source 32-bit data */ + (LVM_INT16 *)pScratch, /* Dest. 16-bit data */ + (LVM_INT16)(2*NumSamples), /* Left and right */ + LVDBE_SCALESHIFT); /* Shift scale */ } - else + + /* Bypass Volume path is processed when DBE is OFF or during On/Off transitions */ + if ((pInstance->Params.OperatingMode == LVDBE_OFF)|| + (LVC_Mixer_GetCurrent(&pInstance->pData->BypassMixer.MixerStream[1]) + !=LVC_Mixer_GetTarget(&pInstance->pData->BypassMixer.MixerStream[1]))) { /* @@ -186,11 +187,20 @@ LVDBE_ReturnStatus_en LVDBE_Process(LVDBE_Handle_t hInstance, */ LVC_MixSoft_1St_D16C31_SAT(&pInstance->pData->BypassVolume, pInData, - pOutData, - (LVM_INT16)(2*NumSamples)); /* Left and right */ + pScratchVol, + (LVM_INT16)(2*NumSamples)); /* Left and right */ } + /* + * Mix DBE processed path and bypass volume path + */ + LVC_MixSoft_2St_D16C31_SAT(&pInstance->pData->BypassMixer, + (LVM_INT16 *) pScratch, + pScratchVol, + pOutData, + (LVM_INT16)(2*NumSamples)); + return(LVDBE_SUCCESS); } |