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

Commit 57e5eb54 authored by Sneha Patil's avatar Sneha Patil
Browse files

PreProcessing: Data conversions for webrtc module and AEC check

Add conversions between float and int16_t for inputs and outputs
Add a check to execute ProcessReverseStream only for AEC effect

Bug:305866207
Test: atest VtsHalAECTargetTest
      atest VtsHalNSTargetTest
      atest VtsHalAGC1TargetTest
      atest VtsHalAGC2TargetTest

Change-Id: Ifb96bd03f170e3ce306ee2bfa9856c2caac9e413
parent d76d9e0a
Loading
Loading
Loading
Loading
+24 −16
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#include <cstddef>
#define LOG_TAG "PreProcessingContext"
#include <audio_utils/primitives.h>
#include <Utils.h>

#include "PreProcessingContext.h"
@@ -281,32 +282,39 @@ IEffect::Status PreProcessingContext::lvmProcess(float* in, float* out, int samp
    LOG(DEBUG) << __func__ << " start processing";
    std::lock_guard lg(mMutex);

    mProcessedMsk |= (1 << int(mType));

    // webrtc implementation clear out was_stream_delay_set every time after ProcessStream() call
    mAudioProcessingModule->set_stream_delay_ms(mEchoDelayUs / 1000);

    std::vector<int16_t> in16(samples);
    std::vector<int16_t> out16(samples);
    memcpy_to_i16_from_float(in16.data(), in, samples);

    mProcessedMsk |= (1 << int(mType));

    if ((mProcessedMsk & mEnabledMsk) == mEnabledMsk) {
        mProcessedMsk = 0;
        int processStatus = mAudioProcessingModule->ProcessStream(
                (const int16_t* const)in, mInputConfig, mOutputConfig, (int16_t* const)out);
        int processStatus = mAudioProcessingModule->ProcessStream(in16.data(), mInputConfig,
                                                                  mOutputConfig, out16.data());
        if (processStatus != 0) {
            LOG(ERROR) << "Process stream failed with error " << processStatus;
            return status;
        }
    }

    if (mType == PreProcessingEffectType::ACOUSTIC_ECHO_CANCELLATION) {
        mRevProcessedMsk |= (1 << int(mType));

        if ((mRevProcessedMsk & mRevEnabledMsk) == mRevEnabledMsk) {
            mRevProcessedMsk = 0;
            int revProcessStatus = mAudioProcessingModule->ProcessReverseStream(
                (const int16_t* const)in, mInputConfig, mInputConfig, (int16_t* const)out);
                    in16.data(), mInputConfig, mInputConfig, out16.data());
            if (revProcessStatus != 0) {
                LOG(ERROR) << "Process reverse stream failed with error " << revProcessStatus;
                return status;
            }
        }
    }

    memcpy_to_float_from_i16(out, out16.data(), samples);

    return {STATUS_OK, samples, samples};
}