Update offload ioHandle to effects
Bug: 271500140
Test: Enavble AIDL
Test: atest EffectProxyTest
Change-Id: I3705b3bfed33caf139dadbff9871be34b7ee906e
diff --git a/media/libaudiohal/impl/EffectConversionHelperAidl.cpp b/media/libaudiohal/impl/EffectConversionHelperAidl.cpp
index 8a582a5..9cf0cb8 100644
--- a/media/libaudiohal/impl/EffectConversionHelperAidl.cpp
+++ b/media/libaudiohal/impl/EffectConversionHelperAidl.cpp
@@ -208,12 +208,12 @@
mEffect->close();
return status;
}
- mCommon = common;
} else if (mCommon != common) {
ALOGI("%s at state %s, setParameter", __func__, android::internal::ToString(state).c_str());
- Parameter aidlParam = UNION_MAKE(Parameter, common, mCommon);
+ Parameter aidlParam = UNION_MAKE(Parameter, common, common);
RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->setParameter(aidlParam)));
}
+ mCommon = common;
return *static_cast<int32_t*>(pReplyData) = OK;
}
@@ -351,9 +351,14 @@
if (mIsProxyEffect) {
ALOGI("%s offload param offload %s ioHandle %d", __func__,
offload->isOffload ? "true" : "false", offload->ioHandle);
- mCommon.ioHandle = offload->ioHandle;
const auto& effectProxy = std::static_pointer_cast<EffectProxy>(mEffect);
RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(effectProxy->setOffloadParam(offload)));
+ if (mCommon.ioHandle != offload->ioHandle) {
+ ALOGI("%s ioHandle update [%d to %d]", __func__, mCommon.ioHandle, offload->ioHandle);
+ mCommon.ioHandle = offload->ioHandle;
+ Parameter aidlParam = UNION_MAKE(Parameter, common, mCommon);
+ RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->setParameter(aidlParam)));
+ }
// update FMQs if the effect instance already open
if (State state; effectProxy->getState(&state).isOk() && state != State::INIT) {
mStatusQ = effectProxy->getStatusMQ();
diff --git a/media/libaudiohal/impl/EffectProxy.cpp b/media/libaudiohal/impl/EffectProxy.cpp
index a131879..fc2da6b 100644
--- a/media/libaudiohal/impl/EffectProxy.cpp
+++ b/media/libaudiohal/impl/EffectProxy.cpp
@@ -15,6 +15,7 @@
*/
#include <algorithm>
+#include <cstddef>
#include <iterator>
#include <memory>
#define LOG_TAG "EffectProxy"
@@ -91,12 +92,16 @@
"noActiveEffctFound");
}
- mActiveSubIdx = std::distance(mSubEffects.begin(), itor);
- ALOGV("%s: active %soffload sub-effect %zu descriptor: %s", __func__,
+ const size_t newIndex = std::distance(mSubEffects.begin(), itor);
+ mActiveSubIdx = newIndex;
+
+ ALOGI("%s: active %soffload sub-effect %zu descriptor: %s", __func__,
offload->isOffload ? "" : "non-", mActiveSubIdx,
::android::audio::utils::toString(mSubEffects[mActiveSubIdx].descriptor.common.id.uuid)
.c_str());
- return ndk::ScopedAStatus::ok();
+ return runWithAllSubEffects([&](std::shared_ptr<IEffect>& effect) {
+ return effect->setParameter(Parameter::make<Parameter::offload>(offload->isOffload));
+ });
}
// EffectProxy go over sub-effects and call IEffect interfaces