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

This commit is contained in:
Shunkai Yao
2024-01-29 18:51:47 +00:00
committed by Gerrit Code Review
3 changed files with 11 additions and 2 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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();