blob: c7c6505407c712e7e378561969d37425562cddf3 [file] [log] [blame]
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +05301/*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Mikhail Naganov872d4a62023-03-09 18:19:01 -080017#define LOG_TAG "VtsHalEnvironmentalReverbTest"
18#include <android-base/logging.h>
Sneha Patil37f131c2024-05-09 15:11:19 +053019#include <audio_utils/power.h>
20#include <system/audio.h>
Mikhail Naganov872d4a62023-03-09 18:19:01 -080021
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +053022#include "EffectHelper.h"
23
24using namespace android;
Sneha Patil37f131c2024-05-09 15:11:19 +053025using namespace aidl::android::hardware::audio::effect;
26using aidl::android::hardware::audio::common::getChannelCount;
Jaideep Sharma74498412023-09-13 15:25:25 +053027using android::hardware::audio::common::testing::detail::TestExecutionTracer;
Sneha Patil37f131c2024-05-09 15:11:19 +053028using TagVectorPair = std::pair<EnvironmentalReverb::Tag, std::vector<int>>;
29using TagValuePair = std::pair<EnvironmentalReverb::Tag, int>;
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +053030
Sneha Patil37f131c2024-05-09 15:11:19 +053031static constexpr int kMaxRoomLevel = 0;
32static constexpr int kMinRoomLevel = -6000;
33static constexpr int kMinRoomHfLevel = -4000;
34static constexpr int kMinDecayTime = 0;
35static constexpr int kMinHfRatio = 100;
36static constexpr int kMinLevel = -6000;
37static constexpr int kMinDensity = 0;
38static constexpr int kMinDiffusion = 0;
39static constexpr int kMinDelay = 0;
40
41static const std::vector<TagVectorPair> kParamsIncreasingVector = {
42
43 {EnvironmentalReverb::roomLevelMb, {-3500, -2800, -2100, -1400, -700, 0}},
44 {EnvironmentalReverb::roomHfLevelMb, {-4000, -3200, -2400, -1600, -800, 0}},
45 {EnvironmentalReverb::decayTimeMs, {800, 1600, 2400, 3200, 4000}},
46 {EnvironmentalReverb::decayHfRatioPm, {100, 600, 1100, 1600, 2000}},
47 {EnvironmentalReverb::levelMb, {-3500, -2800, -2100, -1400, -700, 0}},
48};
49
50static const std::vector<TagValuePair> kParamsMinimumValue = {
51 {EnvironmentalReverb::roomLevelMb, kMinRoomLevel},
52 {EnvironmentalReverb::decayTimeMs, kMinDecayTime},
53 {EnvironmentalReverb::levelMb, kMinLevel}};
54
55std::vector<std::pair<std::shared_ptr<IFactory>, Descriptor>> kDescPair;
56
57using Maker = std::set<int> (*)();
58static const std::array<Maker, static_cast<int>(EnvironmentalReverb::bypass) + 1>
59 kTestValueSetMaker = {
60 nullptr,
61 []() -> std::set<int> {
62 return EffectHelper::getTestValueSet<EnvironmentalReverb, int,
63 Range::environmentalReverb,
64 EnvironmentalReverb::roomLevelMb>(
65 kDescPair, EffectHelper::expandTestValueBasic<int>);
66 },
67 []() -> std::set<int> {
68 return EffectHelper::getTestValueSet<EnvironmentalReverb, int,
69 Range::environmentalReverb,
70 EnvironmentalReverb::roomHfLevelMb>(
71 kDescPair, EffectHelper::expandTestValueBasic<int>);
72 },
73 []() -> std::set<int> {
74 return EffectHelper::getTestValueSet<EnvironmentalReverb, int,
75 Range::environmentalReverb,
76 EnvironmentalReverb::decayTimeMs>(
77 kDescPair, EffectHelper::expandTestValueBasic<int>);
78 },
79 []() -> std::set<int> {
80 return EffectHelper::getTestValueSet<EnvironmentalReverb, int,
81 Range::environmentalReverb,
82 EnvironmentalReverb::decayHfRatioPm>(
83 kDescPair, EffectHelper::expandTestValueBasic<int>);
84 },
85 nullptr,
86 nullptr,
87 []() -> std::set<int> {
88 return EffectHelper::getTestValueSet<EnvironmentalReverb, int,
89 Range::environmentalReverb,
90 EnvironmentalReverb::levelMb>(
91 kDescPair, EffectHelper::expandTestValueBasic<int>);
92 },
93 []() -> std::set<int> {
94 return EffectHelper::getTestValueSet<EnvironmentalReverb, int,
95 Range::environmentalReverb,
96 EnvironmentalReverb::delayMs>(
97 kDescPair, EffectHelper::expandTestValueBasic<int>);
98 },
99 []() -> std::set<int> {
100 return EffectHelper::getTestValueSet<EnvironmentalReverb, int,
101 Range::environmentalReverb,
102 EnvironmentalReverb::diffusionPm>(
103 kDescPair, EffectHelper::expandTestValueBasic<int>);
104 },
105 []() -> std::set<int> {
106 return EffectHelper::getTestValueSet<EnvironmentalReverb, int,
107 Range::environmentalReverb,
108 EnvironmentalReverb::densityPm>(
109 kDescPair, EffectHelper::expandTestValueBasic<int>);
110 },
111 []() -> std::set<int> {
112 return EffectHelper::getTestValueSet<EnvironmentalReverb, int,
113 Range::environmentalReverb,
114 EnvironmentalReverb::bypass>(
115 kDescPair, EffectHelper::expandTestValueBasic<int>);
116 },
117};
118
119static std::vector<TagValuePair> buildSetAndGetTestParams() {
120 std::vector<TagValuePair> valueTag;
121 for (EnvironmentalReverb::Tag tag : ndk::enum_range<EnvironmentalReverb::Tag>()) {
122 std::set<int> values;
123 int intTag = static_cast<int>(tag);
124 if (intTag <= static_cast<int>(EnvironmentalReverb::bypass) &&
125 kTestValueSetMaker[intTag] != nullptr) {
126 values = kTestValueSetMaker[intTag]();
127 }
128
129 for (const auto& value : values) {
130 valueTag.push_back(std::make_pair(tag, value));
131 }
132 }
133
134 return valueTag;
135}
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530136/**
Sneha Patil37f131c2024-05-09 15:11:19 +0530137 * Tests do the following:
138 * - Testing parameter range supported by the effect. Range is verified with IEffect.getDescriptor()
139 * and range defined in the documentation.
140 * - Validating the effect by comparing the outputs of the supported parameters.
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530141 */
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530142
Sneha Patil37f131c2024-05-09 15:11:19 +0530143enum ParamName { DESCRIPTOR_INDEX, TAG_VALUE_PAIR };
144
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530145class EnvironmentalReverbHelper : public EffectHelper {
146 public:
147 EnvironmentalReverbHelper(std::pair<std::shared_ptr<IFactory>, Descriptor> pair) {
148 std::tie(mFactory, mDescriptor) = pair;
149 }
150
151 void SetUpReverb() {
152 ASSERT_NE(nullptr, mFactory);
153 ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor));
154
155 Parameter::Specific specific = getDefaultParamSpecific();
Shunkai Yao61f9dd22024-05-08 22:34:36 +0000156 Parameter::Common common = createParamCommon(
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530157 0 /* session */, 1 /* ioHandle */, 44100 /* iSampleRate */, 44100 /* oSampleRate */,
Sneha Patil37f131c2024-05-09 15:11:19 +0530158 mFrameCount /* iFrameCount */, mFrameCount /* oFrameCount */);
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530159 ASSERT_NO_FATAL_FAILURE(open(mEffect, common, specific, &ret, EX_NONE));
160 ASSERT_NE(nullptr, mEffect);
161 }
162
163 void TearDownReverb() {
164 ASSERT_NO_FATAL_FAILURE(close(mEffect));
165 ASSERT_NO_FATAL_FAILURE(destroy(mFactory, mEffect));
166 }
167
168 Parameter::Specific getDefaultParamSpecific() {
Sneha Patil37f131c2024-05-09 15:11:19 +0530169 EnvironmentalReverb er =
170 EnvironmentalReverb::make<EnvironmentalReverb::roomLevelMb>(kMaxRoomLevel);
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530171 Parameter::Specific specific =
172 Parameter::Specific::make<Parameter::Specific::environmentalReverb>(er);
173 return specific;
174 }
175
Sneha Patil37f131c2024-05-09 15:11:19 +0530176 bool isParamValid(EnvironmentalReverb env) {
177 return isParameterValid<EnvironmentalReverb, Range::environmentalReverb>(env, mDescriptor);
178 }
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530179
Sneha Patil37f131c2024-05-09 15:11:19 +0530180 Parameter createParam(EnvironmentalReverb env) {
181 return Parameter::make<Parameter::specific>(
182 Parameter::Specific::make<Parameter::Specific::environmentalReverb>(env));
183 }
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530184
Sneha Patil37f131c2024-05-09 15:11:19 +0530185 void setAndVerifyParam(binder_exception_t expected, EnvironmentalReverb env,
186 EnvironmentalReverb::Tag tag) {
187 auto expectedParam = createParam(env);
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530188
Sneha Patil37f131c2024-05-09 15:11:19 +0530189 EXPECT_STATUS(expected, mEffect->setParameter(expectedParam)) << expectedParam.toString();
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530190
Sneha Patil37f131c2024-05-09 15:11:19 +0530191 if (expected == EX_NONE) {
192 auto erId = EnvironmentalReverb::Id::make<EnvironmentalReverb::Id::commonTag>(
193 EnvironmentalReverb::Tag(tag));
194
195 auto id = Parameter::Id::make<Parameter::Id::environmentalReverbTag>(erId);
196
197 // get parameter
198 Parameter getParam;
199 EXPECT_STATUS(EX_NONE, mEffect->getParameter(id, &getParam));
200 EXPECT_EQ(expectedParam, getParam) << "\nexpectedParam:" << expectedParam.toString()
201 << "\ngetParam:" << getParam.toString();
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530202 }
203 }
204
Sneha Patil37f131c2024-05-09 15:11:19 +0530205 bool isAuxiliary() {
206 return mDescriptor.common.flags.type ==
207 aidl::android::hardware::audio::effect::Flags::Type::AUXILIARY;
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530208 }
209
Sneha Patil37f131c2024-05-09 15:11:19 +0530210 float computeOutputEnergy(const std::vector<float>& input, std::vector<float> output) {
211 if (!isAuxiliary()) {
212 // Extract auxiliary output
213 for (size_t i = 0; i < output.size(); i++) {
214 output[i] -= input[i];
215 }
216 }
217 return audio_utils_compute_energy_mono(output.data(), AUDIO_FORMAT_PCM_FLOAT,
218 output.size());
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530219 }
220
Sneha Patil37f131c2024-05-09 15:11:19 +0530221 void generateSineWaveInput(std::vector<float>& input) {
222 int frequency = 1000;
223 size_t kSamplingFrequency = 44100;
224 for (size_t i = 0; i < input.size(); i++) {
225 input[i] = sin(2 * M_PI * frequency * i / kSamplingFrequency);
226 }
227 }
228 using Maker = EnvironmentalReverb (*)(int);
229
230 static constexpr std::array<Maker, static_cast<int>(EnvironmentalReverb::bypass) + 1>
231 kEnvironmentalReverbParamMaker = {
232 nullptr,
233 [](int value) -> EnvironmentalReverb {
234 return EnvironmentalReverb::make<EnvironmentalReverb::roomLevelMb>(value);
235 },
236 [](int value) -> EnvironmentalReverb {
237 return EnvironmentalReverb::make<EnvironmentalReverb::roomHfLevelMb>(value);
238 },
239 [](int value) -> EnvironmentalReverb {
240 return EnvironmentalReverb::make<EnvironmentalReverb::decayTimeMs>(value);
241 },
242 [](int value) -> EnvironmentalReverb {
243 return EnvironmentalReverb::make<EnvironmentalReverb::decayHfRatioPm>(
244 value);
245 },
246 nullptr,
247 nullptr,
248 [](int value) -> EnvironmentalReverb {
249 return EnvironmentalReverb::make<EnvironmentalReverb::levelMb>(value);
250 },
251 [](int value) -> EnvironmentalReverb {
252 return EnvironmentalReverb::make<EnvironmentalReverb::delayMs>(value);
253 },
254 [](int value) -> EnvironmentalReverb {
255 return EnvironmentalReverb::make<EnvironmentalReverb::diffusionPm>(value);
256 },
257 [](int value) -> EnvironmentalReverb {
258 return EnvironmentalReverb::make<EnvironmentalReverb::densityPm>(value);
259 },
260 [](int value) -> EnvironmentalReverb {
261 return EnvironmentalReverb::make<EnvironmentalReverb::bypass>(value);
262 }};
263
264 void createEnvParam(EnvironmentalReverb::Tag tag, int paramValue) {
265 int intTag = static_cast<int>(tag);
266 if (intTag <= static_cast<int>(EnvironmentalReverb::bypass) &&
267 kEnvironmentalReverbParamMaker[intTag] != NULL) {
268 mEnvParam = kEnvironmentalReverbParamMaker[intTag](paramValue);
269 } else {
270 GTEST_SKIP() << "Invalid parameter, skipping the test\n";
271 }
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530272 }
273
Sneha Patil37f131c2024-05-09 15:11:19 +0530274 void setParameterAndProcess(std::vector<float>& input, std::vector<float>& output, int val,
275 EnvironmentalReverb::Tag tag) {
276 createEnvParam(tag, val);
277 if (isParamValid(mEnvParam)) {
278 ASSERT_NO_FATAL_FAILURE(setAndVerifyParam(EX_NONE, mEnvParam, tag));
279 ASSERT_NO_FATAL_FAILURE(processAndWriteToOutput(input, output, mEffect, &ret));
280 }
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530281 }
282
Sneha Patil37f131c2024-05-09 15:11:19 +0530283 static constexpr int kSamplingFrequency = 44100;
284 static constexpr int kDurationMilliSec = 500;
285 static constexpr int kBufferSize = kSamplingFrequency * kDurationMilliSec / 1000;
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530286
Sneha Patil37f131c2024-05-09 15:11:19 +0530287 int mStereoChannelCount =
288 getChannelCount(AudioChannelLayout::make<AudioChannelLayout::layoutMask>(
289 AudioChannelLayout::LAYOUT_STEREO));
290 int mFrameCount = kBufferSize / mStereoChannelCount;
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530291
Sneha Patil37f131c2024-05-09 15:11:19 +0530292 std::shared_ptr<IFactory> mFactory;
293 std::shared_ptr<IEffect> mEffect;
294 IEffect::OpenEffectReturn ret;
295 Descriptor mDescriptor;
296 EnvironmentalReverb mEnvParam;
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530297};
298
Sneha Patil37f131c2024-05-09 15:11:19 +0530299class EnvironmentalReverbParamTest
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530300 : public ::testing::TestWithParam<
Sneha Patil37f131c2024-05-09 15:11:19 +0530301 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, TagValuePair>>,
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530302 public EnvironmentalReverbHelper {
303 public:
Sneha Patil37f131c2024-05-09 15:11:19 +0530304 EnvironmentalReverbParamTest()
305 : EnvironmentalReverbHelper(std::get<DESCRIPTOR_INDEX>(GetParam())) {
306 std::tie(mTag, mParamValue) = std::get<TAG_VALUE_PAIR>(GetParam());
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530307 }
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530308 void SetUp() override { SetUpReverb(); }
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530309 void TearDown() override { TearDownReverb(); }
Sneha Patil37f131c2024-05-09 15:11:19 +0530310
311 EnvironmentalReverb::Tag mTag;
312 int mParamValue;
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530313};
314
Sneha Patil37f131c2024-05-09 15:11:19 +0530315TEST_P(EnvironmentalReverbParamTest, SetAndGetParameter) {
316 createEnvParam(mTag, mParamValue);
317 ASSERT_NO_FATAL_FAILURE(setAndVerifyParam(
318 isParamValid(mEnvParam) ? EX_NONE : EX_ILLEGAL_ARGUMENT, mEnvParam, mTag));
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530319}
320
321INSTANTIATE_TEST_SUITE_P(
Sneha Patil37f131c2024-05-09 15:11:19 +0530322 EnvironmentalReverbTest, EnvironmentalReverbParamTest,
Shunkai Yao0a0c45e2023-02-13 17:41:11 +0000323 ::testing::Combine(
324 testing::ValuesIn(kDescPair = EffectFactoryHelper::getAllEffectDescriptors(
Shunkai Yaof8be1ac2023-03-06 18:41:27 +0000325 IFactory::descriptor, getEffectTypeUuidEnvReverb())),
Sneha Patil37f131c2024-05-09 15:11:19 +0530326 testing::ValuesIn(buildSetAndGetTestParams())),
327 [](const testing::TestParamInfo<EnvironmentalReverbParamTest::ParamType>& info) {
328 auto descriptor = std::get<DESCRIPTOR_INDEX>(info.param).second;
329 auto tag = std::get<TAG_VALUE_PAIR>(info.param).first;
330 auto val = std::get<TAG_VALUE_PAIR>(info.param).second;
331 std::string name =
332 getPrefix(descriptor) + "_Tag_" + toString(tag) + std::to_string(val);
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530333 std::replace_if(
334 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
335 return name;
336 });
Sneha Patil37f131c2024-05-09 15:11:19 +0530337GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(EnvironmentalReverbParamTest);
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530338
Sneha Patil37f131c2024-05-09 15:11:19 +0530339class EnvironmentalReverbDataTest
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530340 : public ::testing::TestWithParam<
Sneha Patil37f131c2024-05-09 15:11:19 +0530341 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, TagVectorPair>>,
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530342 public EnvironmentalReverbHelper {
343 public:
Sneha Patil37f131c2024-05-09 15:11:19 +0530344 EnvironmentalReverbDataTest()
345 : EnvironmentalReverbHelper(std::get<DESCRIPTOR_INDEX>(GetParam())) {
346 std::tie(mTag, mParamValues) = std::get<TAG_VALUE_PAIR>(GetParam());
347 mInput.resize(kBufferSize);
348 generateSineWaveInput(mInput);
349 }
350 void SetUp() override { SetUpReverb(); }
351 void TearDown() override { TearDownReverb(); }
352
353 void assertEnergyIncreasingWithParameter(bool bypass) {
354 createEnvParam(EnvironmentalReverb::bypass, bypass);
355 ASSERT_NO_FATAL_FAILURE(setAndVerifyParam(EX_NONE, mEnvParam, EnvironmentalReverb::bypass));
356 float baseEnergy = 0;
357 for (int val : mParamValues) {
358 std::vector<float> output(kBufferSize);
359 setParameterAndProcess(mInput, output, val, mTag);
360 float energy = computeOutputEnergy(mInput, output);
361 ASSERT_GT(energy, baseEnergy);
362 baseEnergy = energy;
363 }
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530364 }
365
Sneha Patil37f131c2024-05-09 15:11:19 +0530366 void assertZeroEnergyWithBypass(bool bypass) {
367 createEnvParam(EnvironmentalReverb::bypass, bypass);
368 ASSERT_NO_FATAL_FAILURE(setAndVerifyParam(EX_NONE, mEnvParam, EnvironmentalReverb::bypass));
369 for (int val : mParamValues) {
370 std::vector<float> output(kBufferSize);
371 setParameterAndProcess(mInput, output, val, mTag);
372 float energy = computeOutputEnergy(mInput, output);
373 ASSERT_EQ(energy, 0);
374 }
375 }
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530376
Sneha Patil37f131c2024-05-09 15:11:19 +0530377 EnvironmentalReverb::Tag mTag;
378 std::vector<int> mParamValues;
379 std::vector<float> mInput;
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530380};
381
Sneha Patil37f131c2024-05-09 15:11:19 +0530382TEST_P(EnvironmentalReverbDataTest, IncreasingParamValue) {
383 assertEnergyIncreasingWithParameter(false);
384}
385
386TEST_P(EnvironmentalReverbDataTest, WithBypassEnabled) {
387 assertZeroEnergyWithBypass(true);
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530388}
389
390INSTANTIATE_TEST_SUITE_P(
Sneha Patil37f131c2024-05-09 15:11:19 +0530391 EnvironmentalReverbTest, EnvironmentalReverbDataTest,
392 ::testing::Combine(
393 testing::ValuesIn(kDescPair = EffectFactoryHelper::getAllEffectDescriptors(
394 IFactory::descriptor, getEffectTypeUuidEnvReverb())),
395 testing::ValuesIn(kParamsIncreasingVector)),
396 [](const testing::TestParamInfo<EnvironmentalReverbDataTest::ParamType>& info) {
397 auto descriptor = std::get<DESCRIPTOR_INDEX>(info.param).second;
398 auto tag = std::get<TAG_VALUE_PAIR>(info.param).first;
399 std::string name = getPrefix(descriptor) + "_Tag_" + toString(tag);
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530400 return name;
401 });
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530402
Sneha Patil37f131c2024-05-09 15:11:19 +0530403GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(EnvironmentalReverbDataTest);
404
405class EnvironmentalReverbMinimumParamTest
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530406 : public ::testing::TestWithParam<
Sneha Patil37f131c2024-05-09 15:11:19 +0530407 std::tuple<std::pair<std::shared_ptr<IFactory>, Descriptor>, TagValuePair>>,
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530408 public EnvironmentalReverbHelper {
409 public:
Sneha Patil37f131c2024-05-09 15:11:19 +0530410 EnvironmentalReverbMinimumParamTest()
411 : EnvironmentalReverbHelper(std::get<DESCRIPTOR_INDEX>(GetParam())) {
412 std::tie(mTag, mValue) = std::get<TAG_VALUE_PAIR>(GetParam());
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530413 }
Sneha Patil37f131c2024-05-09 15:11:19 +0530414 void SetUp() override {
415 SetUpReverb();
416 createEnvParam(EnvironmentalReverb::roomLevelMb, kMinRoomLevel);
417 ASSERT_NO_FATAL_FAILURE(
418 setAndVerifyParam(EX_NONE, mEnvParam, EnvironmentalReverb::roomLevelMb));
419 }
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530420 void TearDown() override { TearDownReverb(); }
Sneha Patil37f131c2024-05-09 15:11:19 +0530421
422 EnvironmentalReverb::Tag mTag;
423 int mValue;
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530424};
425
Sneha Patil37f131c2024-05-09 15:11:19 +0530426TEST_P(EnvironmentalReverbMinimumParamTest, MinimumValueTest) {
427 std::vector<float> input(kBufferSize);
428 generateSineWaveInput(input);
429 std::vector<float> output(kBufferSize);
430 setParameterAndProcess(input, output, mValue, mTag);
431 float energy = computeOutputEnergy(input, output);
432 // No Auxiliary output for minimum param values
433 ASSERT_EQ(energy, 0);
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530434}
435
436INSTANTIATE_TEST_SUITE_P(
Sneha Patil37f131c2024-05-09 15:11:19 +0530437 EnvironmentalReverbTest, EnvironmentalReverbMinimumParamTest,
438 ::testing::Combine(
439 testing::ValuesIn(kDescPair = EffectFactoryHelper::getAllEffectDescriptors(
440 IFactory::descriptor, getEffectTypeUuidEnvReverb())),
441 testing::ValuesIn(kParamsMinimumValue)),
442 [](const testing::TestParamInfo<EnvironmentalReverbMinimumParamTest::ParamType>& info) {
443 auto descriptor = std::get<DESCRIPTOR_INDEX>(info.param).second;
444 auto tag = std::get<TAG_VALUE_PAIR>(info.param).first;
445 auto val = std::get<TAG_VALUE_PAIR>(info.param).second;
446 std::string name =
447 getPrefix(descriptor) + "_Tag_" + toString(tag) + std::to_string(val);
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530448 std::replace_if(
449 name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
450 return name;
451 });
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530452
Sneha Patil37f131c2024-05-09 15:11:19 +0530453GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(EnvironmentalReverbMinimumParamTest);
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530454
455int main(int argc, char** argv) {
456 ::testing::InitGoogleTest(&argc, argv);
Jaideep Sharma74498412023-09-13 15:25:25 +0530457 ::testing::UnitTest::GetInstance()->listeners().Append(new TestExecutionTracer());
Shraddha Basantwanidbb0ed62022-11-17 20:32:18 +0530458 ABinderProcess_setThreadPoolMaxThreadCount(1);
459 ABinderProcess_startThreadPool();
460 return RUN_ALL_TESTS();
461}