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

Commit bd399b0b authored by Chia-chi Yeh's avatar Chia-chi Yeh Committed by Android (Google) Code Review
Browse files

Merge "RTP: Pause echo suppressor when far-end volume is low." into gingerbread

parents 47ccfcb0 0c7d3066
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -160,22 +160,27 @@ void EchoSuppressor::run(int16_t *playbacked, int16_t *recorded)
    }

    // Compute correlations.
    float corr2 = 0.0f;
    int latency = 0;
    float corr2 = 0.0f;
    float varX = 0.0f;
    float varY = mY2Sum - mWeight * mYSum * mYSum;
    for (int i = mTailLength - 1; i >= 0; --i) {
        float varX = mX2Sums[i] - mWeight * mXSums[i] * mXSums[i];
        float cov = mXYSums[i] - mWeight * mXSums[i] * mYSum;
        float c2 = cov * cov / (varX * varY + 1);
        if (c2 > corr2) {
            corr2 = c2;
        if (cov > 0.0f) {
            float varXi = mX2Sums[i] - mWeight * mXSums[i] * mXSums[i];
            float corr2i = cov * cov / (varXi * varY + 1);
            if (corr2i > corr2) {
                varX = varXi;
                corr2 = corr2i;
                latency = i;
            }
        }
    //LOGI("correlation^2 = %.10f, latency = %d", corr2, latency * mScale);
    }
    //LOGI("corr^2 %.5f, var %8.0f %8.0f, latency %d", corr2, varX, varY,
    //        latency * mScale);

    // Do echo suppression.
    if (corr2 > 0.1f) {
    if (corr2 > 0.1f && varX > 10000.0f) {
        int factor = (corr2 > 1.0f) ? 0 : (1.0f - sqrtf(corr2)) * 4096;
        for (int i = 0; i < mSampleCount; ++i) {
            recorded[i] = recorded[i] * factor >> 16;