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

Commit 4ce527e8 authored by Shunkai Yao's avatar Shunkai Yao Committed by Automerger Merge Worker
Browse files

Merge "Update work buffer size with input/output frame size change" into main am: db9b8f08

parents 2a3bc07b db9b8f08
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ EffectContext::EffectContext(size_t statusDepth, const Parameter::Common& common
    ::android::status_t status =
            EventFlag::createEventFlag(mStatusMQ->getEventFlagWord(), &mEfGroup);
    LOG_ALWAYS_FATAL_IF(status != ::android::OK || !mEfGroup, " create EventFlagGroup failed ");
    mWorkBuffer.reserve(std::max(inBufferSizeInFloat, outBufferSizeInFloat));
    mWorkBuffer.resize(std::max(inBufferSizeInFloat, outBufferSizeInFloat));
}

// reset buffer status by abandon input data in FMQ
@@ -82,6 +82,10 @@ float* EffectContext::getWorkBuffer() {
    return static_cast<float*>(mWorkBuffer.data());
}

size_t EffectContext::getWorkBufferSize() const {
    return mWorkBuffer.size();
}

std::shared_ptr<EffectContext::StatusMQ> EffectContext::getStatusFmq() const {
    return mStatusMQ;
}
@@ -206,6 +210,8 @@ RetCode EffectContext::updateIOFrameSize(const Parameter::Common& common) {
    mInputFrameSize = iFrameSize;
    mOutputFrameSize = oFrameSize;
    if (needUpdateMq) {
        mWorkBuffer.resize(std::max(common.input.frameCount * mInputFrameSize / sizeof(float),
                                    common.output.frameCount * mOutputFrameSize / sizeof(float)));
        return notifyDataMqUpdate();
    }
    return RetCode::SUCCESS;
+3 −1
Original line number Diff line number Diff line
@@ -327,7 +327,9 @@ void EffectImpl::process() {
            return;
        }

        auto processSamples = inputMQ->availableToRead();
        assert(mImplContext->getWorkBufferSize() >=
               std::max(inputMQ->availableToRead(), outputMQ->availableToWrite()));
        auto processSamples = std::min(inputMQ->availableToRead(), outputMQ->availableToWrite());
        if (processSamples) {
            inputMQ->read(buffer, processSamples);
            IEffect::Status status = effectProcessImpl(buffer, buffer, processSamples);
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ class EffectContext {
    std::shared_ptr<DataMQ> getOutputDataFmq() const;

    float* getWorkBuffer();
    size_t getWorkBufferSize() const;

    // reset buffer status by abandon input data in FMQ
    void resetBuffer();