Loading media/libeffects/lvm/lib/Reverb/src/LVREV_ApplyNewSettings.cpp +1 −5 Original line number Diff line number Diff line Loading @@ -148,10 +148,6 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings(LVREV_Instance_st* pPrivate) { LVM_INT16 i; LVM_FLOAT ScaleTable[] = {LVREV_T_3_Power_minus0_on_4, LVREV_T_3_Power_minus1_on_4, LVREV_T_3_Power_minus2_on_4, LVREV_T_3_Power_minus3_on_4}; LVM_INT16 MaxT_Delay[] = {LVREV_MAX_T0_DELAY, LVREV_MAX_T1_DELAY, LVREV_MAX_T2_DELAY, LVREV_MAX_T3_DELAY}; LVM_INT16 MaxAP_Delay[] = {LVREV_MAX_AP0_DELAY, LVREV_MAX_AP1_DELAY, LVREV_MAX_AP2_DELAY, LVREV_MAX_AP3_DELAY}; /* * For each delay line Loading @@ -171,7 +167,7 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings(LVREV_Instance_st* pPrivate) { * Set the fixed delay */ Temp = (MaxT_Delay[i] - MaxAP_Delay[i]) * Fs / 192000; Temp = (LVREV_MAX_T_DELAY[i] - LVREV_MAX_AP_DELAY[i]) * Fs / 192000; pPrivate->Delay_AP[i] = pPrivate->T[i] - Temp; /* Loading media/libeffects/lvm/lib/Reverb/src/LVREV_ClearAudioBuffers.cpp +4 −36 Original line number Diff line number Diff line Loading @@ -63,45 +63,13 @@ LVREV_ReturnStatus_en LVREV_ClearAudioBuffers(LVREV_Handle_t hInstance) { LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->HPTaps, 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->LPTaps, 2); #endif if ((LVM_UINT16)pLVREV_Private->InstanceParams.NumDelays == LVREV_DELAYLINES_4) { for (size_t i = 0; i < pLVREV_Private->InstanceParams.NumDelays; i++) { #ifdef BIQUAD_OPT for (int i = 0; i < LVREV_DELAYLINES_4; i++) { pLVREV_Private->revLPFBiquad[i]->clear(); } #else LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[3], 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[2], 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[1], 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[0], 2); #endif LoadConst_Float(0, pLVREV_Private->pDelay_T[3], LVREV_MAX_T3_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[2], LVREV_MAX_T2_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[1], LVREV_MAX_T1_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY); } if ((LVM_UINT16)pLVREV_Private->InstanceParams.NumDelays >= LVREV_DELAYLINES_2) { #ifdef BIQUAD_OPT for (int i = 0; i < LVREV_DELAYLINES_2; i++) { pLVREV_Private->revLPFBiquad[i]->clear(); } #else LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[1], 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[0], 2); #endif LoadConst_Float(0, pLVREV_Private->pDelay_T[1], LVREV_MAX_T1_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY); } if ((LVM_UINT16)pLVREV_Private->InstanceParams.NumDelays >= LVREV_DELAYLINES_1) { #ifdef BIQUAD_OPT pLVREV_Private->revLPFBiquad[0]->clear(); #else LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[0], 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[i], 2); #endif LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[i], LVREV_MAX_T_DELAY[i]); } return LVREV_SUCCESS; } Loading media/libeffects/lvm/lib/Reverb/src/LVREV_GetInstanceHandle.cpp +17 −64 Original line number Diff line number Diff line Loading @@ -120,11 +120,11 @@ LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t* phInstance, pLVREV_Private->MemoryTable = *pMemoryTable; if (pInstanceParams->NumDelays == LVREV_DELAYLINES_4) { MaxBlockSize = LVREV_MAX_AP3_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[3]; } else if (pInstanceParams->NumDelays == LVREV_DELAYLINES_2) { MaxBlockSize = LVREV_MAX_AP1_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[1]; } else { MaxBlockSize = LVREV_MAX_AP0_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[0]; } if (MaxBlockSize > pInstanceParams->MaxBlockSize) { Loading @@ -139,61 +139,18 @@ LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t* phInstance, pLVREV_Private->pFastData = (LVREV_FastData_st*)InstAlloc_AddMember(&FastData, sizeof(LVREV_FastData_st)); #endif if (pInstanceParams->NumDelays == LVREV_DELAYLINES_4) { pLVREV_Private->pDelay_T[3] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T3_DELAY * sizeof(LVM_FLOAT)); pLVREV_Private->pDelay_T[2] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T2_DELAY * sizeof(LVM_FLOAT)); pLVREV_Private->pDelay_T[1] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_FLOAT)); pLVREV_Private->pDelay_T[0] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); for (i = 0; i < 4; i++) { /* Scratch for each delay line output */ pLVREV_Private->pScratchDelayLine[i] = (LVM_FLOAT*)InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } LoadConst_Float(0, pLVREV_Private->pDelay_T[3], LVREV_MAX_T3_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[2], LVREV_MAX_T2_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[1], LVREV_MAX_T1_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY); } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_2) { pLVREV_Private->pDelay_T[1] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_FLOAT)); pLVREV_Private->pDelay_T[0] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); for (i = 0; i < 2; i++) { for (size_t i = 0; i < pInstanceParams->NumDelays; i++) { pLVREV_Private->pDelay_T[i] = (LVM_FLOAT*)InstAlloc_AddMember( &FastData, LVREV_MAX_T_DELAY[i] * sizeof(LVM_FLOAT)); /* Scratch for each delay line output */ pLVREV_Private->pScratchDelayLine[i] = (LVM_FLOAT*)InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } LoadConst_Float(0, pLVREV_Private->pDelay_T[1], (LVM_INT16)LVREV_MAX_T1_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[0], (LVM_INT16)LVREV_MAX_T0_DELAY); } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_1) { pLVREV_Private->pDelay_T[0] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); for (i = 0; i < 1; i++) { /* Scratch for each delay line output */ pLVREV_Private->pScratchDelayLine[i] = (LVM_FLOAT*)InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } LoadConst_Float(0, pLVREV_Private->pDelay_T[0], (LVM_INT16)LVREV_MAX_T0_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[i], LVREV_MAX_T_DELAY[i]); } /* All-pass delay buffer addresses and sizes */ pLVREV_Private->T[0] = LVREV_MAX_T0_DELAY; pLVREV_Private->T[1] = LVREV_MAX_T1_DELAY; pLVREV_Private->T[2] = LVREV_MAX_T2_DELAY; pLVREV_Private->T[3] = LVREV_MAX_T3_DELAY; for (size_t i = 0; i < LVREV_DELAYLINES_4; i++) { pLVREV_Private->T[i] = LVREV_MAX_T_DELAY[i]; } pLVREV_Private->AB_Selection = 1; /* Select smoothing A to B */ #ifndef BIQUAD_OPT Loading Loading @@ -303,14 +260,10 @@ LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t* phInstance, pLVREV_Private->FeedbackMixer[i].Target = 0; } /* Delay tap index */ pLVREV_Private->A_DelaySize[0] = LVREV_MAX_AP0_DELAY; pLVREV_Private->B_DelaySize[0] = LVREV_MAX_AP0_DELAY; pLVREV_Private->A_DelaySize[1] = LVREV_MAX_AP1_DELAY; pLVREV_Private->B_DelaySize[1] = LVREV_MAX_AP1_DELAY; pLVREV_Private->A_DelaySize[2] = LVREV_MAX_AP2_DELAY; pLVREV_Private->B_DelaySize[2] = LVREV_MAX_AP2_DELAY; pLVREV_Private->A_DelaySize[3] = LVREV_MAX_AP3_DELAY; pLVREV_Private->B_DelaySize[3] = LVREV_MAX_AP3_DELAY; for (size_t i = 0; i < LVREV_DELAYLINES_4; i++) { pLVREV_Private->A_DelaySize[i] = LVREV_MAX_AP_DELAY[i]; pLVREV_Private->B_DelaySize[i] = LVREV_MAX_AP_DELAY[i]; } #ifdef BIQUAD_OPT pLVREV_Private->pRevHPFBiquad.reset( Loading media/libeffects/lvm/lib/Reverb/src/LVREV_GetMemoryTable.cpp +8 −37 Original line number Diff line number Diff line Loading @@ -63,7 +63,6 @@ LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance, INST_ALLOC FastData; INST_ALLOC FastCoef; INST_ALLOC Temporary; LVM_INT16 i; LVM_UINT16 MaxBlockSize; /* Loading Loading @@ -117,11 +116,11 @@ LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance, * Select the maximum internal block size */ if (pInstanceParams->NumDelays == LVREV_DELAYLINES_4) { MaxBlockSize = LVREV_MAX_AP3_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[3]; } else if (pInstanceParams->NumDelays == LVREV_DELAYLINES_2) { MaxBlockSize = LVREV_MAX_AP1_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[1]; } else { MaxBlockSize = LVREV_MAX_AP0_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[0]; } if (MaxBlockSize > pInstanceParams->MaxBlockSize) { Loading @@ -142,20 +141,8 @@ LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance, #ifndef BIQUAD_OPT InstAlloc_AddMember(&FastData, sizeof(LVREV_FastData_st)); #endif if (pInstanceParams->NumDelays == LVREV_DELAYLINES_4) { InstAlloc_AddMember(&FastData, LVREV_MAX_T3_DELAY * sizeof(LVM_FLOAT)); InstAlloc_AddMember(&FastData, LVREV_MAX_T2_DELAY * sizeof(LVM_FLOAT)); InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_FLOAT)); InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_2) { InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_FLOAT)); InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_1) { InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); for (size_t i = 0; i < pInstanceParams->NumDelays; i++) { InstAlloc_AddMember(&FastData, LVREV_MAX_T_DELAY[i] * sizeof(LVM_FLOAT)); } pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Size = InstAlloc_GetTotal(&FastData); Loading @@ -179,26 +166,10 @@ LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance, InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); /* Mono->stereo input saved for end mix */ InstAlloc_AddMember(&Temporary, 2 * sizeof(LVM_FLOAT) * MaxBlockSize); if (pInstanceParams->NumDelays == LVREV_DELAYLINES_4) { for (i = 0; i < 4; i++) { for (size_t i = 0; i < pInstanceParams->NumDelays; i++) { /* A Scratch buffer for each delay line */ InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_2) { for (i = 0; i < 2; i++) { /* A Scratch buffer for each delay line */ InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_1) { for (i = 0; i < 1; i++) { /* A Scratch buffer for each delay line */ InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } } pMemoryTable->Region[LVM_TEMPORARY_FAST].Size = InstAlloc_GetTotal(&Temporary); pMemoryTable->Region[LVM_TEMPORARY_FAST].Type = LVM_TEMPORARY_FAST; Loading media/libeffects/lvm/lib/Reverb/src/LVREV_Private.h +15 −14 Original line number Diff line number Diff line Loading @@ -110,14 +110,15 @@ typedef struct { Biquad_1I_Order1_FLOAT_Taps_t HPTaps; /* High pass filter taps */ Biquad_1I_Order1_FLOAT_Taps_t LPTaps; /* Low pass filter taps */ Biquad_1I_Order1_FLOAT_Taps_t RevLPTaps[4]; /* Reverb low pass filters taps */ Biquad_1I_Order1_FLOAT_Taps_t RevLPTaps[LVREV_DELAYLINES_4]; /* Reverb low pass filters taps */ } LVREV_FastData_st; /* Fast coefficient structure */ typedef struct { Biquad_FLOAT_Instance_t HPCoefs; /* High pass filter coefficients */ Biquad_FLOAT_Instance_t LPCoefs; /* Low pass filter coefficients */ Biquad_FLOAT_Instance_t RevLPCoefs[4]; /* Reverb low pass filters coefficients */ Biquad_FLOAT_Instance_t RevLPCoefs[LVREV_DELAYLINES_4]; /* Reverb low pass filters coefficients */ } LVREV_FastCoef_st; #endif Loading Loading @@ -150,28 +151,28 @@ typedef struct { LVREV_FastData_st* pFastData; /* Fast data memory base address */ LVREV_FastCoef_st* pFastCoef; /* Fast coefficient memory base address */ #endif LVM_FLOAT* pScratchDelayLine[4]; /* Delay line scratch memory */ LVM_FLOAT* pScratchDelayLine[LVREV_DELAYLINES_4]; /* Delay line scratch memory */ LVM_FLOAT* pScratch; /* Multi ussge scratch */ LVM_FLOAT* pInputSave; /* Reverb block input save for dry/wet mixing*/ /* Feedback matrix */ Mix_1St_Cll_FLOAT_t FeedbackMixer[4]; /* Mixer for Pop and Click Suppression \ Mix_1St_Cll_FLOAT_t FeedbackMixer[LVREV_DELAYLINES_4]; /* Mixer for Pop and Click Suppression \ caused by feedback Gain */ /* All-Pass Filter */ LVM_INT32 T[4]; /* Maximum delay size of buffer */ LVM_FLOAT* pDelay_T[4]; /* Pointer to delay buffers */ LVM_INT32 Delay_AP[4]; /* Offset to AP delay buffer start */ LVM_INT32 T[LVREV_DELAYLINES_4]; /* Maximum delay size of buffer */ LVM_FLOAT* pDelay_T[LVREV_DELAYLINES_4]; /* Pointer to delay buffers */ LVM_INT32 Delay_AP[LVREV_DELAYLINES_4]; /* Offset to AP delay buffer start */ LVM_INT16 AB_Selection; /* Smooth from tap A to B when 1 \ otherwise B to A */ LVM_INT32 A_DelaySize[4]; /* A delay length in samples */ LVM_INT32 B_DelaySize[4]; /* B delay length in samples */ LVM_FLOAT* pOffsetA[4]; /* Offset for the A delay tap */ LVM_FLOAT* pOffsetB[4]; /* Offset for the B delay tap */ Mix_2St_Cll_FLOAT_t Mixer_APTaps[4]; /* Smoothed AP delay mixer */ Mix_1St_Cll_FLOAT_t Mixer_SGFeedback[4]; /* Smoothed SAfeedback gain */ Mix_1St_Cll_FLOAT_t Mixer_SGFeedforward[4]; /* Smoothed AP feedforward gain */ LVM_INT32 A_DelaySize[LVREV_DELAYLINES_4]; /* A delay length in samples */ LVM_INT32 B_DelaySize[LVREV_DELAYLINES_4]; /* B delay length in samples */ LVM_FLOAT* pOffsetA[LVREV_DELAYLINES_4]; /* Offset for the A delay tap */ LVM_FLOAT* pOffsetB[LVREV_DELAYLINES_4]; /* Offset for the B delay tap */ Mix_2St_Cll_FLOAT_t Mixer_APTaps[LVREV_DELAYLINES_4]; /* Smoothed AP delay mixer */ Mix_1St_Cll_FLOAT_t Mixer_SGFeedback[LVREV_DELAYLINES_4]; /* Smoothed SAfeedback gain */ Mix_1St_Cll_FLOAT_t Mixer_SGFeedforward[LVREV_DELAYLINES_4]; /* Smoothed AP feedforward gain */ /* Output gain */ Mix_2St_Cll_FLOAT_t BypassMixer; /* Dry/wet mixer */ Loading Loading
media/libeffects/lvm/lib/Reverb/src/LVREV_ApplyNewSettings.cpp +1 −5 Original line number Diff line number Diff line Loading @@ -148,10 +148,6 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings(LVREV_Instance_st* pPrivate) { LVM_INT16 i; LVM_FLOAT ScaleTable[] = {LVREV_T_3_Power_minus0_on_4, LVREV_T_3_Power_minus1_on_4, LVREV_T_3_Power_minus2_on_4, LVREV_T_3_Power_minus3_on_4}; LVM_INT16 MaxT_Delay[] = {LVREV_MAX_T0_DELAY, LVREV_MAX_T1_DELAY, LVREV_MAX_T2_DELAY, LVREV_MAX_T3_DELAY}; LVM_INT16 MaxAP_Delay[] = {LVREV_MAX_AP0_DELAY, LVREV_MAX_AP1_DELAY, LVREV_MAX_AP2_DELAY, LVREV_MAX_AP3_DELAY}; /* * For each delay line Loading @@ -171,7 +167,7 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings(LVREV_Instance_st* pPrivate) { * Set the fixed delay */ Temp = (MaxT_Delay[i] - MaxAP_Delay[i]) * Fs / 192000; Temp = (LVREV_MAX_T_DELAY[i] - LVREV_MAX_AP_DELAY[i]) * Fs / 192000; pPrivate->Delay_AP[i] = pPrivate->T[i] - Temp; /* Loading
media/libeffects/lvm/lib/Reverb/src/LVREV_ClearAudioBuffers.cpp +4 −36 Original line number Diff line number Diff line Loading @@ -63,45 +63,13 @@ LVREV_ReturnStatus_en LVREV_ClearAudioBuffers(LVREV_Handle_t hInstance) { LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->HPTaps, 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->LPTaps, 2); #endif if ((LVM_UINT16)pLVREV_Private->InstanceParams.NumDelays == LVREV_DELAYLINES_4) { for (size_t i = 0; i < pLVREV_Private->InstanceParams.NumDelays; i++) { #ifdef BIQUAD_OPT for (int i = 0; i < LVREV_DELAYLINES_4; i++) { pLVREV_Private->revLPFBiquad[i]->clear(); } #else LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[3], 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[2], 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[1], 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[0], 2); #endif LoadConst_Float(0, pLVREV_Private->pDelay_T[3], LVREV_MAX_T3_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[2], LVREV_MAX_T2_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[1], LVREV_MAX_T1_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY); } if ((LVM_UINT16)pLVREV_Private->InstanceParams.NumDelays >= LVREV_DELAYLINES_2) { #ifdef BIQUAD_OPT for (int i = 0; i < LVREV_DELAYLINES_2; i++) { pLVREV_Private->revLPFBiquad[i]->clear(); } #else LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[1], 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[0], 2); #endif LoadConst_Float(0, pLVREV_Private->pDelay_T[1], LVREV_MAX_T1_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY); } if ((LVM_UINT16)pLVREV_Private->InstanceParams.NumDelays >= LVREV_DELAYLINES_1) { #ifdef BIQUAD_OPT pLVREV_Private->revLPFBiquad[0]->clear(); #else LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[0], 2); LoadConst_Float(0, (LVM_FLOAT*)&pLVREV_Private->pFastData->RevLPTaps[i], 2); #endif LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[i], LVREV_MAX_T_DELAY[i]); } return LVREV_SUCCESS; } Loading
media/libeffects/lvm/lib/Reverb/src/LVREV_GetInstanceHandle.cpp +17 −64 Original line number Diff line number Diff line Loading @@ -120,11 +120,11 @@ LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t* phInstance, pLVREV_Private->MemoryTable = *pMemoryTable; if (pInstanceParams->NumDelays == LVREV_DELAYLINES_4) { MaxBlockSize = LVREV_MAX_AP3_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[3]; } else if (pInstanceParams->NumDelays == LVREV_DELAYLINES_2) { MaxBlockSize = LVREV_MAX_AP1_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[1]; } else { MaxBlockSize = LVREV_MAX_AP0_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[0]; } if (MaxBlockSize > pInstanceParams->MaxBlockSize) { Loading @@ -139,61 +139,18 @@ LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t* phInstance, pLVREV_Private->pFastData = (LVREV_FastData_st*)InstAlloc_AddMember(&FastData, sizeof(LVREV_FastData_st)); #endif if (pInstanceParams->NumDelays == LVREV_DELAYLINES_4) { pLVREV_Private->pDelay_T[3] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T3_DELAY * sizeof(LVM_FLOAT)); pLVREV_Private->pDelay_T[2] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T2_DELAY * sizeof(LVM_FLOAT)); pLVREV_Private->pDelay_T[1] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_FLOAT)); pLVREV_Private->pDelay_T[0] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); for (i = 0; i < 4; i++) { /* Scratch for each delay line output */ pLVREV_Private->pScratchDelayLine[i] = (LVM_FLOAT*)InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } LoadConst_Float(0, pLVREV_Private->pDelay_T[3], LVREV_MAX_T3_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[2], LVREV_MAX_T2_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[1], LVREV_MAX_T1_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY); } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_2) { pLVREV_Private->pDelay_T[1] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_FLOAT)); pLVREV_Private->pDelay_T[0] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); for (i = 0; i < 2; i++) { for (size_t i = 0; i < pInstanceParams->NumDelays; i++) { pLVREV_Private->pDelay_T[i] = (LVM_FLOAT*)InstAlloc_AddMember( &FastData, LVREV_MAX_T_DELAY[i] * sizeof(LVM_FLOAT)); /* Scratch for each delay line output */ pLVREV_Private->pScratchDelayLine[i] = (LVM_FLOAT*)InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } LoadConst_Float(0, pLVREV_Private->pDelay_T[1], (LVM_INT16)LVREV_MAX_T1_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[0], (LVM_INT16)LVREV_MAX_T0_DELAY); } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_1) { pLVREV_Private->pDelay_T[0] = (LVM_FLOAT*)InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); for (i = 0; i < 1; i++) { /* Scratch for each delay line output */ pLVREV_Private->pScratchDelayLine[i] = (LVM_FLOAT*)InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } LoadConst_Float(0, pLVREV_Private->pDelay_T[0], (LVM_INT16)LVREV_MAX_T0_DELAY); LoadConst_Float(0, pLVREV_Private->pDelay_T[i], LVREV_MAX_T_DELAY[i]); } /* All-pass delay buffer addresses and sizes */ pLVREV_Private->T[0] = LVREV_MAX_T0_DELAY; pLVREV_Private->T[1] = LVREV_MAX_T1_DELAY; pLVREV_Private->T[2] = LVREV_MAX_T2_DELAY; pLVREV_Private->T[3] = LVREV_MAX_T3_DELAY; for (size_t i = 0; i < LVREV_DELAYLINES_4; i++) { pLVREV_Private->T[i] = LVREV_MAX_T_DELAY[i]; } pLVREV_Private->AB_Selection = 1; /* Select smoothing A to B */ #ifndef BIQUAD_OPT Loading Loading @@ -303,14 +260,10 @@ LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t* phInstance, pLVREV_Private->FeedbackMixer[i].Target = 0; } /* Delay tap index */ pLVREV_Private->A_DelaySize[0] = LVREV_MAX_AP0_DELAY; pLVREV_Private->B_DelaySize[0] = LVREV_MAX_AP0_DELAY; pLVREV_Private->A_DelaySize[1] = LVREV_MAX_AP1_DELAY; pLVREV_Private->B_DelaySize[1] = LVREV_MAX_AP1_DELAY; pLVREV_Private->A_DelaySize[2] = LVREV_MAX_AP2_DELAY; pLVREV_Private->B_DelaySize[2] = LVREV_MAX_AP2_DELAY; pLVREV_Private->A_DelaySize[3] = LVREV_MAX_AP3_DELAY; pLVREV_Private->B_DelaySize[3] = LVREV_MAX_AP3_DELAY; for (size_t i = 0; i < LVREV_DELAYLINES_4; i++) { pLVREV_Private->A_DelaySize[i] = LVREV_MAX_AP_DELAY[i]; pLVREV_Private->B_DelaySize[i] = LVREV_MAX_AP_DELAY[i]; } #ifdef BIQUAD_OPT pLVREV_Private->pRevHPFBiquad.reset( Loading
media/libeffects/lvm/lib/Reverb/src/LVREV_GetMemoryTable.cpp +8 −37 Original line number Diff line number Diff line Loading @@ -63,7 +63,6 @@ LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance, INST_ALLOC FastData; INST_ALLOC FastCoef; INST_ALLOC Temporary; LVM_INT16 i; LVM_UINT16 MaxBlockSize; /* Loading Loading @@ -117,11 +116,11 @@ LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance, * Select the maximum internal block size */ if (pInstanceParams->NumDelays == LVREV_DELAYLINES_4) { MaxBlockSize = LVREV_MAX_AP3_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[3]; } else if (pInstanceParams->NumDelays == LVREV_DELAYLINES_2) { MaxBlockSize = LVREV_MAX_AP1_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[1]; } else { MaxBlockSize = LVREV_MAX_AP0_DELAY; MaxBlockSize = LVREV_MAX_AP_DELAY[0]; } if (MaxBlockSize > pInstanceParams->MaxBlockSize) { Loading @@ -142,20 +141,8 @@ LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance, #ifndef BIQUAD_OPT InstAlloc_AddMember(&FastData, sizeof(LVREV_FastData_st)); #endif if (pInstanceParams->NumDelays == LVREV_DELAYLINES_4) { InstAlloc_AddMember(&FastData, LVREV_MAX_T3_DELAY * sizeof(LVM_FLOAT)); InstAlloc_AddMember(&FastData, LVREV_MAX_T2_DELAY * sizeof(LVM_FLOAT)); InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_FLOAT)); InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_2) { InstAlloc_AddMember(&FastData, LVREV_MAX_T1_DELAY * sizeof(LVM_FLOAT)); InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_1) { InstAlloc_AddMember(&FastData, LVREV_MAX_T0_DELAY * sizeof(LVM_FLOAT)); for (size_t i = 0; i < pInstanceParams->NumDelays; i++) { InstAlloc_AddMember(&FastData, LVREV_MAX_T_DELAY[i] * sizeof(LVM_FLOAT)); } pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].Size = InstAlloc_GetTotal(&FastData); Loading @@ -179,26 +166,10 @@ LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance, InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); /* Mono->stereo input saved for end mix */ InstAlloc_AddMember(&Temporary, 2 * sizeof(LVM_FLOAT) * MaxBlockSize); if (pInstanceParams->NumDelays == LVREV_DELAYLINES_4) { for (i = 0; i < 4; i++) { for (size_t i = 0; i < pInstanceParams->NumDelays; i++) { /* A Scratch buffer for each delay line */ InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_2) { for (i = 0; i < 2; i++) { /* A Scratch buffer for each delay line */ InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } } if (pInstanceParams->NumDelays == LVREV_DELAYLINES_1) { for (i = 0; i < 1; i++) { /* A Scratch buffer for each delay line */ InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize); } } pMemoryTable->Region[LVM_TEMPORARY_FAST].Size = InstAlloc_GetTotal(&Temporary); pMemoryTable->Region[LVM_TEMPORARY_FAST].Type = LVM_TEMPORARY_FAST; Loading
media/libeffects/lvm/lib/Reverb/src/LVREV_Private.h +15 −14 Original line number Diff line number Diff line Loading @@ -110,14 +110,15 @@ typedef struct { Biquad_1I_Order1_FLOAT_Taps_t HPTaps; /* High pass filter taps */ Biquad_1I_Order1_FLOAT_Taps_t LPTaps; /* Low pass filter taps */ Biquad_1I_Order1_FLOAT_Taps_t RevLPTaps[4]; /* Reverb low pass filters taps */ Biquad_1I_Order1_FLOAT_Taps_t RevLPTaps[LVREV_DELAYLINES_4]; /* Reverb low pass filters taps */ } LVREV_FastData_st; /* Fast coefficient structure */ typedef struct { Biquad_FLOAT_Instance_t HPCoefs; /* High pass filter coefficients */ Biquad_FLOAT_Instance_t LPCoefs; /* Low pass filter coefficients */ Biquad_FLOAT_Instance_t RevLPCoefs[4]; /* Reverb low pass filters coefficients */ Biquad_FLOAT_Instance_t RevLPCoefs[LVREV_DELAYLINES_4]; /* Reverb low pass filters coefficients */ } LVREV_FastCoef_st; #endif Loading Loading @@ -150,28 +151,28 @@ typedef struct { LVREV_FastData_st* pFastData; /* Fast data memory base address */ LVREV_FastCoef_st* pFastCoef; /* Fast coefficient memory base address */ #endif LVM_FLOAT* pScratchDelayLine[4]; /* Delay line scratch memory */ LVM_FLOAT* pScratchDelayLine[LVREV_DELAYLINES_4]; /* Delay line scratch memory */ LVM_FLOAT* pScratch; /* Multi ussge scratch */ LVM_FLOAT* pInputSave; /* Reverb block input save for dry/wet mixing*/ /* Feedback matrix */ Mix_1St_Cll_FLOAT_t FeedbackMixer[4]; /* Mixer for Pop and Click Suppression \ Mix_1St_Cll_FLOAT_t FeedbackMixer[LVREV_DELAYLINES_4]; /* Mixer for Pop and Click Suppression \ caused by feedback Gain */ /* All-Pass Filter */ LVM_INT32 T[4]; /* Maximum delay size of buffer */ LVM_FLOAT* pDelay_T[4]; /* Pointer to delay buffers */ LVM_INT32 Delay_AP[4]; /* Offset to AP delay buffer start */ LVM_INT32 T[LVREV_DELAYLINES_4]; /* Maximum delay size of buffer */ LVM_FLOAT* pDelay_T[LVREV_DELAYLINES_4]; /* Pointer to delay buffers */ LVM_INT32 Delay_AP[LVREV_DELAYLINES_4]; /* Offset to AP delay buffer start */ LVM_INT16 AB_Selection; /* Smooth from tap A to B when 1 \ otherwise B to A */ LVM_INT32 A_DelaySize[4]; /* A delay length in samples */ LVM_INT32 B_DelaySize[4]; /* B delay length in samples */ LVM_FLOAT* pOffsetA[4]; /* Offset for the A delay tap */ LVM_FLOAT* pOffsetB[4]; /* Offset for the B delay tap */ Mix_2St_Cll_FLOAT_t Mixer_APTaps[4]; /* Smoothed AP delay mixer */ Mix_1St_Cll_FLOAT_t Mixer_SGFeedback[4]; /* Smoothed SAfeedback gain */ Mix_1St_Cll_FLOAT_t Mixer_SGFeedforward[4]; /* Smoothed AP feedforward gain */ LVM_INT32 A_DelaySize[LVREV_DELAYLINES_4]; /* A delay length in samples */ LVM_INT32 B_DelaySize[LVREV_DELAYLINES_4]; /* B delay length in samples */ LVM_FLOAT* pOffsetA[LVREV_DELAYLINES_4]; /* Offset for the A delay tap */ LVM_FLOAT* pOffsetB[LVREV_DELAYLINES_4]; /* Offset for the B delay tap */ Mix_2St_Cll_FLOAT_t Mixer_APTaps[LVREV_DELAYLINES_4]; /* Smoothed AP delay mixer */ Mix_1St_Cll_FLOAT_t Mixer_SGFeedback[LVREV_DELAYLINES_4]; /* Smoothed SAfeedback gain */ Mix_1St_Cll_FLOAT_t Mixer_SGFeedforward[LVREV_DELAYLINES_4]; /* Smoothed AP feedforward gain */ /* Output gain */ Mix_2St_Cll_FLOAT_t BypassMixer; /* Dry/wet mixer */ Loading