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

Commit 266e5578 authored by Shunkai Yao's avatar Shunkai Yao Committed by Gerrit Code Review
Browse files

Merge "Effect AIDL: support output accumulate" into main

parents 9a072183 919b73fd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -193,6 +193,7 @@ status_t EffectConversionHelperAidl::handleSetConfig(uint32_t cmdSize, const voi
        Parameter aidlParam = UNION_MAKE(Parameter, common, common);
        RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->setParameter(aidlParam)));
    }
    mOutputAccessMode = config->outputCfg.accessMode;
    mCommon = common;

    return *static_cast<int32_t*>(pReplyData) = OK;
+2 −0
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@ class EffectConversionHelperAidl {
    ::aidl::android::hardware::audio::effect::Descriptor getDescriptor() const;
    status_t reopen();

    uint8_t mOutputAccessMode = EFFECT_BUFFER_ACCESS_WRITE;

  protected:
    const int32_t mSessionId;
    const int32_t mIoId;
+12 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@

#include <memory>

#include <audio_utils/primitives.h>
#include <error/expected_utils.h>
#include <media/AidlConversionCppNdk.h>
#include <media/AidlConversionEffect.h>
@@ -239,13 +240,22 @@ status_t EffectHalAidl::process() {
              mOutBuffer->getSize() / sizeof(float), available);
        return INVALID_OPERATION;
    }

    float *outputRawBuffer = mOutBuffer->audioBuffer()->f32;
    std::vector<float> tempBuffer;
    if (mConversion->mOutputAccessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) {
        tempBuffer.resize(floatsToRead);
        outputRawBuffer = tempBuffer.data();
    }
    // always read floating point data for AIDL
    if (!mOutBuffer->audioBuffer() ||
        !outputQ->read(mOutBuffer->audioBuffer()->f32, floatsToRead)) {
    if (!outputQ->read(outputRawBuffer, floatsToRead)) {
        ALOGE("%s failed to read %zu from outputQ to audioBuffer %p", __func__, floatsToRead,
              mOutBuffer->audioBuffer());
        return INVALID_OPERATION;
    }
    if (mConversion->mOutputAccessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) {
        accumulate_float(mOutBuffer->audioBuffer()->f32, outputRawBuffer, floatsToRead);
    }

    ALOGD("%s %s consumed %zu produced %zu", __func__, effectName.c_str(), floatsToWrite,
          floatsToRead);