Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30d48192 authored by Andy Hung's avatar Andy Hung Committed by Automerger Merge Worker
Browse files

Merge "Biquad filter integration to LVM : Continuation" am: a4c84f69 am:...

Merge "Biquad filter integration to LVM : Continuation" am: a4c84f69 am: 545844b0 am: 7a6948be

Original change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1528132

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Iecf7b109e4e7880fd0dd9b52b1a8ec08b79355e5
parents 47464f80 7a6948be
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@

#ifdef BIQUAD_OPT
#include <audio_utils/BiquadFilter.h>
#include <system/audio.h>
#endif
#include "LVDBE.h"
#include "LVDBE_Private.h"
@@ -114,7 +115,7 @@ void LVDBE_SetFilters(LVDBE_Instance_t* pInstance, LVDBE_Params_t* pParams) {
    std::array<LVM_FLOAT, android::audio_utils::kBiquadNumCoefs> coefs = {
            LVDBE_HPF_Table[Offset].A0, LVDBE_HPF_Table[Offset].A1, LVDBE_HPF_Table[Offset].A2,
            -(LVDBE_HPF_Table[Offset].B1), -(LVDBE_HPF_Table[Offset].B2)};
    pInstance->pBqInstance
    pInstance->pHPFBiquad
            ->setCoefficients<std::array<LVM_FLOAT, android::audio_utils::kBiquadNumCoefs>>(coefs);
#else
    LoadConst_Float(0,                                      /* Clear the history, value 0 */
@@ -128,12 +129,19 @@ void LVDBE_SetFilters(LVDBE_Instance_t* pInstance, LVDBE_Params_t* pParams) {
    /*
     * Setup the band pass filter
     */
#ifdef BIQUAD_OPT
    coefs = {LVDBE_BPF_Table[Offset].A0, 0.0, -(LVDBE_BPF_Table[Offset].A0),
             -(LVDBE_BPF_Table[Offset].B1), -(LVDBE_BPF_Table[Offset].B2)};
    pInstance->pBPFBiquad
            ->setCoefficients<std::array<LVM_FLOAT, android::audio_utils::kBiquadNumCoefs>>(coefs);
#else
    LoadConst_Float(0,                                      /* Clear the history, value 0 */
                    (LVM_FLOAT*)&pInstance->pData->BPFTaps, /* Destination */
                    sizeof(pInstance->pData->BPFTaps) / sizeof(LVM_FLOAT)); /* Number of words */
    BP_1I_D32F32Cll_TRC_WRA_02_Init(&pInstance->pCoef->BPFInstance, /* Initialise the filter */
                                    &pInstance->pData->BPFTaps,
                                    (BP_FLOAT_Coefs_t*)&LVDBE_BPF_Table[Offset]);
#endif
}

/************************************************************************************/
@@ -290,9 +298,8 @@ LVDBE_ReturnStatus_en LVDBE_Control(LVDBE_Handle_t hInstance, LVDBE_Params_t* pP
    /*
     * Create biquad instance
     */
    pInstance->pBqInstance.reset(
            new android::audio_utils::BiquadFilter<LVM_FLOAT>(pParams->NrChannels));
    pInstance->pBqInstance->clear();
    pInstance->pHPFBiquad.reset(new android::audio_utils::BiquadFilter<LVM_FLOAT>(
            (FCC_1 == pParams->NrChannels) ? FCC_2 : pParams->NrChannels));
#endif

    /*
+13 −7
Original line number Diff line number Diff line
@@ -20,8 +20,11 @@
/*    Includes                                                                          */
/*                                                                                      */
/****************************************************************************************/
#include <stdlib.h>

#ifdef BIQUAD_OPT
#include <system/audio.h>
#endif
#include <stdlib.h>
#include "LVDBE.h"
#include "LVDBE_Private.h"

@@ -89,17 +92,18 @@ LVDBE_ReturnStatus_en LVDBE_Init(LVDBE_Handle_t* phInstance, LVDBE_Capabilities_
    if (pInstance->pData == NULL) {
        return LVDBE_NULLADDRESS;
    }
    pInstance->pCoef = (LVDBE_Coef_FLOAT_t*)calloc(1, sizeof(*(pInstance->pCoef)));
    if (pInstance->pCoef == NULL) {
        return LVDBE_NULLADDRESS;
    }

#ifdef BIQUAD_OPT
    /*
     * Create biquad instance
     */
    pInstance->pBqInstance.reset(
    pInstance->pHPFBiquad.reset(
            new android::audio_utils::BiquadFilter<LVM_FLOAT>(LVM_MAX_CHANNELS));
    pInstance->pBPFBiquad.reset(new android::audio_utils::BiquadFilter<LVM_FLOAT>(FCC_1));
#else
    pInstance->pCoef = (LVDBE_Coef_FLOAT_t*)calloc(1, sizeof(*(pInstance->pCoef)));
    if (pInstance->pCoef == NULL) {
        return LVDBE_NULLADDRESS;
    }
#endif

    /*
@@ -190,10 +194,12 @@ void LVDBE_DeInit(LVDBE_Handle_t* phInstance) {
        free(pInstance->pData);
        pInstance->pData = LVM_NULL;
    }
#ifndef BIQUAD_OPT
    if (pInstance->pCoef != LVM_NULL) {
        free(pInstance->pCoef);
        pInstance->pCoef = LVM_NULL;
    }
#endif
    free(pInstance);
    *phInstance = LVM_NULL;
}
+9 −4
Original line number Diff line number Diff line
@@ -68,21 +68,22 @@ typedef struct {
    /* Process variables */
#ifndef BIQUAD_OPT
    Biquad_2I_Order2_FLOAT_Taps_t HPFTaps; /* High pass filter taps */
#endif
    Biquad_1I_Order2_FLOAT_Taps_t BPFTaps; /* Band pass filter taps */
#endif
    LVMixer3_1St_FLOAT_st BypassVolume;    /* Bypass volume scaler */
    LVMixer3_2St_FLOAT_st BypassMixer;     /* Bypass Mixer for Click Removal */

} LVDBE_Data_FLOAT_t;

#ifndef BIQUAD_OPT
/* Coefs structure */
typedef struct {
    /* Process variables */
#ifndef BIQUAD_OPT
    Biquad_FLOAT_Instance_t HPFInstance; /* High pass filter instance */
#endif
    Biquad_FLOAT_Instance_t BPFInstance; /* Band pass filter instance */
} LVDBE_Coef_FLOAT_t;
#endif

/* Instance structure */
typedef struct {
    /* Public parameters */
@@ -91,11 +92,15 @@ typedef struct {

    /* Data and coefficient pointers */
    LVDBE_Data_FLOAT_t* pData; /* Instance data */
#ifndef BIQUAD_OPT
    LVDBE_Coef_FLOAT_t* pCoef; /* Instance coefficients */
#endif
    void* pScratch;            /* scratch pointer */
#ifdef BIQUAD_OPT
    std::unique_ptr<android::audio_utils::BiquadFilter<LVM_FLOAT>>
            pBqInstance; /* Biquad filter instance */
            pHPFBiquad; /* Biquad filter instance for HPF */
    std::unique_ptr<android::audio_utils::BiquadFilter<LVM_FLOAT>>
            pBPFBiquad; /* Biquad filter instance for BPF */
#endif
} LVDBE_Instance_t;

+5 −1
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ LVDBE_ReturnStatus_en LVDBE_Process(
         */
        if (pInstance->Params.HPFSelect == LVDBE_HPF_ON) {
#ifdef BIQUAD_OPT
            pInstance->pBqInstance->process(pScratch, pScratch, NrFrames);
            pInstance->pHPFBiquad->process(pScratch, pScratch, NrFrames);
#else
            BQ_MC_D32F32C30_TRC_WRA_01(&pInstance->pCoef->HPFInstance, /* Filter instance      */
                                       pScratch,                       /* Source               */
@@ -149,10 +149,14 @@ LVDBE_ReturnStatus_en LVDBE_Process(
        /*
         * Apply the band pass filter
         */
#ifdef BIQUAD_OPT
        pInstance->pBPFBiquad->process(pMono, pMono, NrFrames);
#else
        BP_1I_D32F32C30_TRC_WRA_02(&pInstance->pCoef->BPFInstance, /* Filter instance       */
                                   pMono,                          /* Source                */
                                   pMono,                          /* Destination           */
                                   (LVM_INT16)NrFrames);
#endif

        /*
         * Apply the AGC and mix
+11 −0
Original line number Diff line number Diff line
@@ -276,6 +276,16 @@ void LVM_SetTrebleBoost(LVM_Instance_t* pInstance, LVM_ControlParams_t* pParams)
             */
            Offset = (LVM_INT16)(EffectLevel - 1 +
                                 TrebleBoostSteps * (pParams->SampleRate - TrebleBoostMinRate));
#ifdef BIQUAD_OPT
            /*
             * Create biquad instance
             */
            std::array<LVM_FLOAT, android::audio_utils::kBiquadNumCoefs> coefs = {
                    LVM_TrebleBoostCoefs[Offset].A0, LVM_TrebleBoostCoefs[Offset].A1, 0.0,
                    -(LVM_TrebleBoostCoefs[Offset].B1), 0.0};
            pInstance->pTEBiquad.reset(
                    new android::audio_utils::BiquadFilter<LVM_FLOAT>(pParams->NrChannels, coefs));
#else
            FO_2I_D16F32Css_LShx_TRC_WRA_01_Init(&pInstance->pTE_State->TrebleBoost_State,
                                                 &pInstance->pTE_Taps->TrebleBoost_Taps,
                                                 &LVM_TrebleBoostCoefs[Offset]);
@@ -288,6 +298,7 @@ void LVM_SetTrebleBoost(LVM_Instance_t* pInstance, LVM_ControlParams_t* pParams)
                                                   Cast to void: no dereferencing in function */
                            (LVM_UINT16)(sizeof(pInstance->pTE_Taps->TrebleBoost_Taps) /
                                         sizeof(LVM_FLOAT))); /* Number of words */
#endif
        }
    } else {
        /*
Loading