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

Commit 3dc82a4e authored by Andy Hung's avatar Andy Hung Committed by Automerger Merge Worker
Browse files

Merge "Biquad filter integration to LVM : Reverb changes" am: 032499ab

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: If2114f3e7bef416a51546c4efa685a6d49ede05e
parents 4f234513 032499ab
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -204,10 +204,12 @@ cc_library_static {
        "Reverb/lib",
        "Common/lib",
    ],

    static_libs: [
        "libaudioutils",
    ],
    cppflags: [
        "-DBIQUAD_OPT",
        "-fvisibility=hidden",

        "-Wall",
        "-Werror",
    ],
+25 −0
Original line number Diff line number Diff line
@@ -20,6 +20,10 @@
/*  Includes                                                                            */
/*                                                                                      */
/****************************************************************************************/

#ifdef BIQUAD_OPT
#include <system/audio.h>
#endif
#include "LVREV_Private.h"
#include "Filter.h"

@@ -71,10 +75,17 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings(LVREV_Instance_st* pPrivate) {

        Omega = LVM_GetOmega(pPrivate->NewParams.HPF, pPrivate->NewParams.SampleRate);
        LVM_FO_HPF(Omega, &Coeffs);
#ifdef BIQUAD_OPT
        const std::array<LVM_FLOAT, android::audio_utils::kBiquadNumCoefs> coefs = {
                Coeffs.A0, Coeffs.A1, 0.0, -(Coeffs.B1), 0.0};
        pPrivate->pRevHPFBiquad.reset(
                new android::audio_utils::BiquadFilter<LVM_FLOAT>(FCC_1, coefs));
#else
        FO_1I_D32F32Cll_TRC_WRA_01_Init(&pPrivate->pFastCoef->HPCoefs, &pPrivate->pFastData->HPTaps,
                                        &Coeffs);
        LoadConst_Float(0, (LVM_FLOAT*)&pPrivate->pFastData->HPTaps,
                        sizeof(Biquad_1I_Order1_FLOAT_Taps_t) / sizeof(LVM_FLOAT));
#endif
    }

    /*
@@ -99,10 +110,17 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings(LVREV_Instance_st* pPrivate) {
                LVM_FO_LPF(Omega, &Coeffs);
            }
        }
#ifdef BIQUAD_OPT
        const std::array<LVM_FLOAT, android::audio_utils::kBiquadNumCoefs> coefs = {
                Coeffs.A0, Coeffs.A1, 0.0, -(Coeffs.B1), 0.0};
        pPrivate->pRevLPFBiquad.reset(
                new android::audio_utils::BiquadFilter<LVM_FLOAT>(FCC_1, coefs));
#else
        FO_1I_D32F32Cll_TRC_WRA_01_Init(&pPrivate->pFastCoef->LPCoefs, &pPrivate->pFastData->LPTaps,
                                        &Coeffs);
        LoadConst_Float(0, (LVM_FLOAT*)&pPrivate->pFastData->LPTaps,
                        sizeof(Biquad_1I_Order1_FLOAT_Taps_t) / sizeof(LVM_FLOAT));
#endif
    }

    /*
@@ -231,8 +249,15 @@ LVREV_ReturnStatus_en LVREV_ApplyNewSettings(LVREV_Instance_st* pPrivate) {
                Coeffs.A1 = 0;
                Coeffs.B1 = 0;
            }
#ifdef BIQUAD_OPT
            const std::array<LVM_FLOAT, android::audio_utils::kBiquadNumCoefs> coefs = {
                    Coeffs.A0, Coeffs.A1, 0.0, -(Coeffs.B1), 0.0};
            pPrivate->revLPFBiquad[i].reset(
                    new android::audio_utils::BiquadFilter<LVM_FLOAT>(FCC_1, coefs));
#else
            FO_1I_D32F32Cll_TRC_WRA_01_Init(&pPrivate->pFastCoef->RevLPCoefs[i],
                                            &pPrivate->pFastData->RevLPTaps[i], &Coeffs);
#endif
        }
    }

+21 −0
Original line number Diff line number Diff line
@@ -56,13 +56,24 @@ LVREV_ReturnStatus_en LVREV_ClearAudioBuffers(LVREV_Handle_t hInstance) {
     * Clear all filter tap data, delay-lines and other signal related data
     */

#ifdef BIQUAD_OPT
    pLVREV_Private->pRevHPFBiquad->clear();
    pLVREV_Private->pRevLPFBiquad->clear();
#else
    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) {
#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);
@@ -71,15 +82,25 @@ LVREV_ReturnStatus_en LVREV_ClearAudioBuffers(LVREV_Handle_t hInstance) {
    }

    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);
#endif
        LoadConst_Float(0, pLVREV_Private->pDelay_T[0], LVREV_MAX_T0_DELAY);
    }
    return LVREV_SUCCESS;
+15 −0
Original line number Diff line number Diff line
@@ -134,9 +134,11 @@ LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t* phInstance,
    /*
     * Set the data, coefficient and temporary memory pointers
     */
#ifndef BIQUAD_OPT
    /* Fast data memory base address */
    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));
@@ -194,9 +196,11 @@ LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t* phInstance,
    pLVREV_Private->T[3] = LVREV_MAX_T3_DELAY;
    pLVREV_Private->AB_Selection = 1; /* Select smoothing A to B */

#ifndef BIQUAD_OPT
    /* Fast coefficient memory base address */
    pLVREV_Private->pFastCoef =
            (LVREV_FastCoef_st*)InstAlloc_AddMember(&FastCoef, sizeof(LVREV_FastCoef_st));
#endif
    /* General purpose scratch */
    pLVREV_Private->pScratch =
            (LVM_FLOAT*)InstAlloc_AddMember(&Temporary, sizeof(LVM_FLOAT) * MaxBlockSize);
@@ -308,6 +312,17 @@ LVREV_ReturnStatus_en LVREV_GetInstanceHandle(LVREV_Handle_t* phInstance,
    pLVREV_Private->A_DelaySize[3] = LVREV_MAX_AP3_DELAY;
    pLVREV_Private->B_DelaySize[3] = LVREV_MAX_AP3_DELAY;

#ifdef BIQUAD_OPT
    pLVREV_Private->pRevHPFBiquad.reset(
            new android::audio_utils::BiquadFilter<LVM_FLOAT>(LVM_MAX_CHANNELS));
    pLVREV_Private->pRevLPFBiquad.reset(
            new android::audio_utils::BiquadFilter<LVM_FLOAT>(LVM_MAX_CHANNELS));
    for (int i = 0; i < LVREV_DELAYLINES_4; i++) {
        pLVREV_Private->revLPFBiquad[i].reset(
                new android::audio_utils::BiquadFilter<LVM_FLOAT>(LVM_MAX_CHANNELS));
    }
#endif

    LVREV_ClearAudioBuffers(*phInstance);

    return LVREV_SUCCESS;
+4 −0
Original line number Diff line number Diff line
@@ -139,7 +139,9 @@ LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance,
        /*
         * Persistent fast data memory
         */
#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));
@@ -163,7 +165,9 @@ LVREV_ReturnStatus_en LVREV_GetMemoryTable(LVREV_Handle_t hInstance,
        /*
         * Persistent fast coefficient memory
         */
#ifndef BIQUAD_OPT
        InstAlloc_AddMember(&FastCoef, sizeof(LVREV_FastCoef_st));
#endif
        pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Size = InstAlloc_GetTotal(&FastCoef);
        pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].Type = LVM_PERSISTENT_FAST_COEF;
        pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress = LVM_NULL;
Loading