Merge "codec2 hal: AIDL type conversion, step 1" into main
diff --git a/media/codec2/hal/client/Android.bp b/media/codec2/hal/client/Android.bp
index d2ef58c..1a2377c 100644
--- a/media/codec2/hal/client/Android.bp
+++ b/media/codec2/hal/client/Android.bp
@@ -10,12 +10,6 @@
cc_library_headers {
name: "libcodec2_client_headers",
export_include_dirs: ["include"],
- vendor_available: true,
- apex_available: [
- "//apex_available:platform",
- "com.android.media",
- "com.android.media.swcodec",
- ],
min_sdk_version: "29",
host_supported: true,
target: {
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..5e465d9 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"
@@ -92,11 +93,13 @@
}
mActiveSubIdx = std::distance(mSubEffects.begin(), itor);
- ALOGV("%s: active %soffload sub-effect %zu descriptor: %s", __func__,
+ 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
diff --git a/media/libaudiohal/tests/EffectProxy_test.cpp b/media/libaudiohal/tests/EffectProxy_test.cpp
index 8668e85..2953b0a 100644
--- a/media/libaudiohal/tests/EffectProxy_test.cpp
+++ b/media/libaudiohal/tests/EffectProxy_test.cpp
@@ -53,7 +53,9 @@
void SetUp() override {
auto serviceName = android::getAidlHalInstanceNames(IFactory::descriptor);
// only unit test with the first one in case more than one EffectFactory service exist
- ASSERT_NE(0ul, serviceName.size());
+ if (0ul == serviceName.size()) {
+ GTEST_SKIP() << "EffectFactory not available on device, skipping";
+ }
mFactory = IFactory::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(serviceName[0].c_str())));
ASSERT_NE(nullptr, mFactory);
@@ -157,6 +159,7 @@
effect_offload_param_t offloadParam{false, 0};
EXPECT_TRUE(proxy->setOffloadParam(&offloadParam).isOk());
offloadParam.isOffload = true;
+ offloadParam.ioHandle++;
EXPECT_TRUE(proxy->setOffloadParam(&offloadParam).isOk());
EXPECT_TRUE(proxy->close().isOk());
EXPECT_TRUE(proxy->destroy().isOk());
@@ -189,21 +192,21 @@
Parameter::Common common = createParamCommon();
IEffect::OpenEffectReturn ret;
Parameter::VolumeStereo volumeStereo({.left = .1f, .right = -0.8f});
- Parameter param = Parameter::make<Parameter::volumeStereo>(volumeStereo);
- Parameter::Id id = Parameter::Id::make<Parameter::Id::commonTag>(Parameter::volumeStereo);
+ Parameter expect = Parameter::make<Parameter::volumeStereo>(volumeStereo);
+ const Parameter::Id id = Parameter::Id::make<Parameter::Id::commonTag>(Parameter::volumeStereo);
State state;
for (const auto& itor : proxyMap) {
- Parameter expect;
+ Parameter getParam = Parameter::make<Parameter::offload>(true);
auto& proxy = std::get<TupleIndex::HANDLE>(itor.second);
effect_offload_param_t offloadParam{true, 0};
EXPECT_TRUE(proxy->setOffloadParam(&offloadParam).isOk());
EXPECT_TRUE(proxy->open(common, std::nullopt, &ret).isOk());
- EXPECT_TRUE(proxy->setParameter(param).isOk());
- EXPECT_TRUE(proxy->getParameter(id, &expect).isOk());
- EXPECT_EQ(expect, param) << " EXPECTED: " << expect.toString()
- << "\nACTUAL: " << param.toString();
+ EXPECT_TRUE(proxy->setParameter(expect).isOk());
+ EXPECT_TRUE(proxy->getParameter(id, &getParam).isOk());
+ EXPECT_EQ(expect, getParam)
+ << " EXPECTED: " << expect.toString() << "\nACTUAL: " << getParam.toString();
EXPECT_TRUE(proxy->command(CommandId::START).isOk());
EXPECT_TRUE(proxy->getState(&state).isOk());
@@ -225,25 +228,25 @@
Parameter::Common common = createParamCommon();
IEffect::OpenEffectReturn ret;
Parameter::VolumeStereo volumeStereo({.left = .5f, .right = .8f});
- Parameter param = Parameter::make<Parameter::volumeStereo>(volumeStereo);
- Parameter::Id id = Parameter::Id::make<Parameter::Id::commonTag>(Parameter::volumeStereo);
+ Parameter expect = Parameter::make<Parameter::volumeStereo>(volumeStereo);
+ const Parameter::Id id = Parameter::Id::make<Parameter::Id::commonTag>(Parameter::volumeStereo);
for (const auto& itor : proxyMap) {
- Parameter expect;
+ Parameter getParam = Parameter::make<Parameter::offload>(true);
auto& proxy = std::get<TupleIndex::HANDLE>(itor.second);
EXPECT_TRUE(proxy->open(common, std::nullopt, &ret).isOk());
- EXPECT_TRUE(proxy->setParameter(param).isOk());
- EXPECT_TRUE(proxy->getParameter(id, &expect).isOk());
- EXPECT_EQ(expect, param);
+ EXPECT_TRUE(proxy->setParameter(expect).isOk());
+ EXPECT_TRUE(proxy->getParameter(id, &getParam).isOk());
+ EXPECT_EQ(expect, getParam);
effect_offload_param_t offloadParam{false, 0};
EXPECT_TRUE(proxy->setOffloadParam(&offloadParam).isOk());
- EXPECT_TRUE(proxy->getParameter(id, &expect).isOk());
- EXPECT_EQ(expect, param);
+ EXPECT_TRUE(proxy->getParameter(id, &getParam).isOk());
+ EXPECT_EQ(expect, getParam);
offloadParam.isOffload = true;
EXPECT_TRUE(proxy->setOffloadParam(&offloadParam).isOk());
- EXPECT_TRUE(proxy->getParameter(id, &expect).isOk());
- EXPECT_EQ(expect, param);
+ EXPECT_TRUE(proxy->getParameter(id, &getParam).isOk());
+ EXPECT_EQ(expect, getParam);
EXPECT_TRUE(proxy->close().isOk());
EXPECT_TRUE(proxy->destroy().isOk());
@@ -271,13 +274,9 @@
effect_offload_param_t offloadParam{false, 0};
EXPECT_TRUE(proxy->setOffloadParam(&offloadParam).isOk());
- EXPECT_TRUE(proxy->getState(&state).isOk());
- EXPECT_EQ(State::PROCESSING, state);
offloadParam.isOffload = true;
EXPECT_TRUE(proxy->setOffloadParam(&offloadParam).isOk());
- EXPECT_TRUE(proxy->getState(&state).isOk());
- EXPECT_EQ(State::PROCESSING, state);
EXPECT_TRUE(proxy->command(CommandId::STOP).isOk());
EXPECT_TRUE(proxy->getState(&state).isOk());
diff --git a/media/libeffects/visualizer/EffectVisualizer.cpp b/media/libeffects/visualizer/EffectVisualizer.cpp
index 1551e33..8d408dd 100644
--- a/media/libeffects/visualizer/EffectVisualizer.cpp
+++ b/media/libeffects/visualizer/EffectVisualizer.cpp
@@ -165,6 +165,7 @@
pConfig->outputCfg.accessMode != EFFECT_BUFFER_ACCESS_ACCUMULATE) return -EINVAL;
if (pConfig->inputCfg.format != kProcessFormat) return -EINVAL;
+ pContext->mChannelCount = channelCount;
pContext->mConfig = *pConfig;
Visualizer_reset(pContext);
@@ -229,8 +230,6 @@
pContext->mScalingMode = VISUALIZER_SCALING_MODE_NORMALIZED;
// measurement initialization
- pContext->mChannelCount =
- audio_channel_count_from_out_mask(pContext->mConfig.inputCfg.channels);
pContext->mMeasurementMode = MEASUREMENT_MODE_NONE;
pContext->mMeasurementWindowSizeInBuffers = MEASUREMENT_WINDOW_MAX_SIZE_IN_BUFFERS;
pContext->mMeasurementBufferIdx = 0;