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

Commit b4654353 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "PreProcessing: Data conversions for webrtc module and AEC check" into...

Merge "PreProcessing: Data conversions for webrtc module and AEC check" into main am: f54ef11f am: 8e975b35

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



Change-Id: I4be914cc1cd355c267f39e0e494208960bb6517b
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents af92c70e 8e975b35
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::process(float* in, float* out, int samples
    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};
}