Update VTS to open Spatializer with supported input channel layout
Bug: 338040049
Test: atest --test-mapping hardware/interfaces/audio/aidl/vts
Change-Id: I2e3457771617ff9425672f4db5e151658e47c827
diff --git a/audio/aidl/vts/EffectHelper.h b/audio/aidl/vts/EffectHelper.h
index 0fdf7a7..72a4667 100644
--- a/audio/aidl/vts/EffectHelper.h
+++ b/audio/aidl/vts/EffectHelper.h
@@ -18,6 +18,7 @@
#include <algorithm>
#include <memory>
+#include <optional>
#include <string>
#include <type_traits>
#include <unordered_map>
@@ -42,13 +43,18 @@
using namespace android;
using aidl::android::hardware::audio::effect::CommandId;
using aidl::android::hardware::audio::effect::Descriptor;
+using aidl::android::hardware::audio::effect::getEffectTypeUuidSpatializer;
+using aidl::android::hardware::audio::effect::getRange;
using aidl::android::hardware::audio::effect::IEffect;
+using aidl::android::hardware::audio::effect::isRangeValid;
+using aidl::android::hardware::audio::effect::kEffectTypeUuidSpatializer;
using aidl::android::hardware::audio::effect::kEventFlagDataMqNotEmpty;
using aidl::android::hardware::audio::effect::kEventFlagDataMqUpdate;
using aidl::android::hardware::audio::effect::kEventFlagNotEmpty;
using aidl::android::hardware::audio::effect::kReopenSupportedVersion;
using aidl::android::hardware::audio::effect::Parameter;
using aidl::android::hardware::audio::effect::Range;
+using aidl::android::hardware::audio::effect::Spatializer;
using aidl::android::hardware::audio::effect::State;
using aidl::android::hardware::common::fmq::SynchronizedReadWrite;
using aidl::android::media::audio::common::AudioChannelLayout;
@@ -79,14 +85,16 @@
class EffectHelper {
public:
- static void create(std::shared_ptr<IFactory> factory, std::shared_ptr<IEffect>& effect,
- Descriptor& desc, binder_status_t status = EX_NONE) {
+ void create(std::shared_ptr<IFactory> factory, std::shared_ptr<IEffect>& effect,
+ Descriptor& desc, binder_status_t status = EX_NONE) {
ASSERT_NE(factory, nullptr);
auto& id = desc.common.id;
ASSERT_STATUS(status, factory->createEffect(id.uuid, &effect));
if (status == EX_NONE) {
ASSERT_NE(effect, nullptr) << toString(id.uuid);
}
+ mIsSpatializer = id.type == getEffectTypeUuidSpatializer();
+ mDescriptor = desc;
}
static void destroyIgnoreRet(std::shared_ptr<IFactory> factory,
@@ -110,10 +118,9 @@
ASSERT_STATUS(status, effect->open(common, specific, ret));
}
- static void open(std::shared_ptr<IEffect> effect, int session = 0,
- binder_status_t status = EX_NONE) {
+ void open(std::shared_ptr<IEffect> effect, int session = 0, binder_status_t status = EX_NONE) {
ASSERT_NE(effect, nullptr);
- Parameter::Common common = EffectHelper::createParamCommon(session);
+ Parameter::Common common = createParamCommon(session);
IEffect::OpenEffectReturn ret;
ASSERT_NO_FATAL_FAILURE(open(effect, common, std::nullopt /* specific */, &ret, status));
}
@@ -207,15 +214,31 @@
true /* retry */));
EXPECT_TRUE(efState & kEventFlagDataMqUpdate);
}
- static Parameter::Common createParamCommon(
- int session = 0, int ioHandle = -1, int iSampleRate = 48000, int oSampleRate = 48000,
- long iFrameCount = 0x100, long oFrameCount = 0x100,
- AudioChannelLayout inputChannelLayout =
- AudioChannelLayout::make<AudioChannelLayout::layoutMask>(
- AudioChannelLayout::LAYOUT_STEREO),
- AudioChannelLayout outputChannelLayout =
- AudioChannelLayout::make<AudioChannelLayout::layoutMask>(
- AudioChannelLayout::LAYOUT_STEREO)) {
+
+ Parameter::Common createParamCommon(int session = 0, int ioHandle = -1, int iSampleRate = 48000,
+ int oSampleRate = 48000, long iFrameCount = 0x100,
+ long oFrameCount = 0x100) {
+ AudioChannelLayout defaultLayout = AudioChannelLayout::make<AudioChannelLayout::layoutMask>(
+ AudioChannelLayout::LAYOUT_STEREO);
+ // query supported input layout and use it as the default parameter in common
+ if (mIsSpatializer && isRangeValid<Range::spatializer>(Spatializer::supportedChannelLayout,
+ mDescriptor.capability)) {
+ const auto layoutRange = getRange<Range::spatializer, Range::SpatializerRange>(
+ mDescriptor.capability, Spatializer::supportedChannelLayout);
+ if (std::vector<AudioChannelLayout> layouts;
+ layoutRange &&
+ 0 != (layouts = layoutRange->min.get<Spatializer::supportedChannelLayout>())
+ .size()) {
+ defaultLayout = layouts[0];
+ }
+ }
+ return createParamCommon(session, ioHandle, iSampleRate, oSampleRate, iFrameCount,
+ oFrameCount, defaultLayout, defaultLayout);
+ }
+ static Parameter::Common createParamCommon(int session, int ioHandle, int iSampleRate,
+ int oSampleRate, long iFrameCount, long oFrameCount,
+ AudioChannelLayout inputChannelLayout,
+ AudioChannelLayout outputChannelLayout) {
Parameter::Common common;
common.session = session;
common.ioHandle = ioHandle;
@@ -379,4 +402,7 @@
return bufferMag;
}
+
+ bool mIsSpatializer;
+ Descriptor mDescriptor;
};