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

Commit f54ef11f authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

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

parents 5c7ce95d 57e5eb54
Loading
Loading
Loading
Loading
+24 −16
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


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


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


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

    // webrtc implementation clear out was_stream_delay_set every time after ProcessStream() call
    // webrtc implementation clear out was_stream_delay_set every time after ProcessStream() call
    mAudioProcessingModule->set_stream_delay_ms(mEchoDelayUs / 1000);
    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) {
    if ((mProcessedMsk & mEnabledMsk) == mEnabledMsk) {
        mProcessedMsk = 0;
        mProcessedMsk = 0;
        int processStatus = mAudioProcessingModule->ProcessStream(
        int processStatus = mAudioProcessingModule->ProcessStream(in16.data(), mInputConfig,
                (const int16_t* const)in, mInputConfig, mOutputConfig, (int16_t* const)out);
                                                                  mOutputConfig, out16.data());
        if (processStatus != 0) {
        if (processStatus != 0) {
            LOG(ERROR) << "Process stream failed with error " << processStatus;
            LOG(ERROR) << "Process stream failed with error " << processStatus;
            return status;
            return status;
        }
        }
    }
    }


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

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

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


    return {STATUS_OK, samples, samples};
    return {STATUS_OK, samples, samples};
}
}