blob: a7fc35d478283e17d18ce56cc68c59a7ef1de2e0 [file] [log] [blame]
Mikhail Naganovbf393172016-11-11 16:24:50 -08001/*
Kevin Rocard96d2cd92018-11-14 16:22:07 -08002 * Copyright (C) 2018 The Android Open Source Project
Mikhail Naganovbf393172016-11-11 16:24:50 -08003 *
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
17#define LOG_TAG "AudioEffectHidlHalTest"
18#include <android-base/logging.h>
Mikhail Naganov9f289042017-02-23 08:39:36 -080019#include <system/audio.h>
Mikhail Naganovbf393172016-11-11 16:24:50 -080020
Kevin Rocard96d2cd92018-11-14 16:22:07 -080021#include PATH(android/hardware/audio/effect/FILE_VERSION/IEffect.h)
22#include PATH(android/hardware/audio/effect/FILE_VERSION/IEffectsFactory.h)
23#include PATH(android/hardware/audio/effect/FILE_VERSION/IEqualizerEffect.h)
24#include PATH(android/hardware/audio/effect/FILE_VERSION/ILoudnessEnhancerEffect.h)
25#include PATH(android/hardware/audio/effect/FILE_VERSION/types.h)
Mikhail Naganov9f289042017-02-23 08:39:36 -080026#include <android/hidl/allocator/1.0/IAllocator.h>
27#include <android/hidl/memory/1.0/IMemory.h>
Mikhail Naganovbf393172016-11-11 16:24:50 -080028
Kevin Rocardf5305b32018-11-13 10:41:53 -080029#include <common/all-versions/VersionUtils.h>
30
Mikhail Naganov315ce412019-10-23 16:46:54 -070031#include <gtest/gtest.h>
32#include <hidl/GtestPrinter.h>
33#include <hidl/ServiceManagement.h>
Mikhail Naganovbf393172016-11-11 16:24:50 -080034
Mikhail Naganov00a44c02018-12-14 14:31:45 -080035using ::android::sp;
36using ::android::hardware::hidl_handle;
37using ::android::hardware::hidl_memory;
38using ::android::hardware::hidl_string;
39using ::android::hardware::hidl_vec;
40using ::android::hardware::MQDescriptorSync;
41using ::android::hardware::Return;
42using ::android::hardware::Void;
43using ::android::hardware::audio::common::utils::mkEnumBitfield;
44using ::android::hidl::allocator::V1_0::IAllocator;
45using ::android::hidl::memory::V1_0::IMemory;
46using namespace ::android::hardware::audio::common::CPP_VERSION;
47using namespace ::android::hardware::audio::effect::CPP_VERSION;
Mikhail Naganovbf393172016-11-11 16:24:50 -080048
Mikhail Naganov9f289042017-02-23 08:39:36 -080049#ifndef ARRAY_SIZE
50#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a)))
51#endif
52
Mikhail Naganov315ce412019-10-23 16:46:54 -070053class AudioEffectsFactoryHidlTest : public ::testing::TestWithParam<std::string> {
54 public:
55 void SetUp() override {
56 effectsFactory = IEffectsFactory::getService(GetParam());
57 ASSERT_NE(effectsFactory, nullptr);
58 }
Kevin Rocard55b10612018-11-12 12:33:16 -080059 void TearDown() override { effectsFactory.clear(); }
Mikhail Naganov9f289042017-02-23 08:39:36 -080060
Kevin Rocard55b10612018-11-12 12:33:16 -080061 protected:
62 static void description(const std::string& description) {
63 RecordProperty("description", description);
64 }
Mikhail Naganovbf393172016-11-11 16:24:50 -080065
Kevin Rocard55b10612018-11-12 12:33:16 -080066 sp<IEffectsFactory> effectsFactory;
Mikhail Naganovbf393172016-11-11 16:24:50 -080067};
68
nelsonli3c12e582019-12-12 13:53:49 +080069TEST_P(AudioEffectsFactoryHidlTest, EnumerateEffects) {
Kevin Rocard55b10612018-11-12 12:33:16 -080070 description("Verify that EnumerateEffects returns at least one effect");
71 Result retval = Result::NOT_INITIALIZED;
72 size_t effectCount = 0;
73 Return<void> ret =
74 effectsFactory->getAllDescriptors([&](Result r, const hidl_vec<EffectDescriptor>& result) {
75 retval = r;
76 effectCount = result.size();
77 });
78 EXPECT_TRUE(ret.isOk());
79 EXPECT_EQ(Result::OK, retval);
80 EXPECT_GT(effectCount, 0u);
Mikhail Naganovbf393172016-11-11 16:24:50 -080081}
82
nelsonli3c12e582019-12-12 13:53:49 +080083TEST_P(AudioEffectsFactoryHidlTest, CreateEffect) {
Kevin Rocard55b10612018-11-12 12:33:16 -080084 description("Verify that an effect can be created via CreateEffect");
85 bool gotEffect = false;
86 Uuid effectUuid;
87 Return<void> ret =
88 effectsFactory->getAllDescriptors([&](Result r, const hidl_vec<EffectDescriptor>& result) {
89 if (r == Result::OK && result.size() > 0) {
90 gotEffect = true;
91 effectUuid = result[0].uuid;
92 }
93 });
94 ASSERT_TRUE(ret.isOk());
95 ASSERT_TRUE(gotEffect);
96 Result retval = Result::NOT_INITIALIZED;
97 sp<IEffect> effect;
98 ret = effectsFactory->createEffect(
99 effectUuid, 1 /*session*/, 1 /*ioHandle*/,
100 [&](Result r, const sp<IEffect>& result, uint64_t /*effectId*/) {
101 retval = r;
102 if (r == Result::OK) {
103 effect = result;
104 }
105 });
106 EXPECT_TRUE(ret.isOk());
107 EXPECT_EQ(Result::OK, retval);
108 EXPECT_NE(nullptr, effect.get());
Mikhail Naganovbf393172016-11-11 16:24:50 -0800109}
110
nelsonli3c12e582019-12-12 13:53:49 +0800111TEST_P(AudioEffectsFactoryHidlTest, GetDescriptor) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800112 description(
113 "Verify that effects factory can provide an effect descriptor via "
114 "GetDescriptor");
115 hidl_vec<EffectDescriptor> allDescriptors;
116 Return<void> ret =
117 effectsFactory->getAllDescriptors([&](Result r, const hidl_vec<EffectDescriptor>& result) {
118 if (r == Result::OK) {
119 allDescriptors = result;
120 }
Mikhail Naganovbf393172016-11-11 16:24:50 -0800121 });
Kevin Rocard55b10612018-11-12 12:33:16 -0800122 ASSERT_TRUE(ret.isOk());
123 ASSERT_GT(allDescriptors.size(), 0u);
124 for (size_t i = 0; i < allDescriptors.size(); ++i) {
125 ret = effectsFactory->getDescriptor(allDescriptors[i].uuid,
126 [&](Result r, const EffectDescriptor& result) {
127 EXPECT_EQ(r, Result::OK);
128 EXPECT_EQ(result, allDescriptors[i]);
129 });
130 }
131 EXPECT_TRUE(ret.isOk());
Mikhail Naganovbf393172016-11-11 16:24:50 -0800132}
133
nelsonli3c12e582019-12-12 13:53:49 +0800134TEST_P(AudioEffectsFactoryHidlTest, DebugDumpInvalidArgument) {
Mikhail Naganov3e6fe752017-04-24 10:44:08 -0700135 description("Verify that debugDump doesn't crash on invalid arguments");
Kevin Rocard96d2cd92018-11-14 16:22:07 -0800136#if MAJOR_VERSION == 2
Mikhail Naganov3e6fe752017-04-24 10:44:08 -0700137 Return<void> ret = effectsFactory->debugDump(hidl_handle());
Kevin Rocard20614ba2018-11-10 07:20:17 -0800138#elif MAJOR_VERSION >= 4
Kevin Rocard96d2cd92018-11-14 16:22:07 -0800139 Return<void> ret = effectsFactory->debug(hidl_handle(), {});
140#endif
Mikhail Naganov3e6fe752017-04-24 10:44:08 -0700141 ASSERT_TRUE(ret.isOk());
142}
143
Mikhail Naganov9f289042017-02-23 08:39:36 -0800144// Equalizer effect is required by CDD, but only the type is fixed.
145// This is the same UUID as AudioEffect.EFFECT_TYPE_EQUALIZER in Java.
146static const Uuid EQUALIZER_EFFECT_TYPE = {
147 0x0bed4300, 0xddd6, 0x11db, 0x8f34,
148 std::array<uint8_t, 6>{{0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}};
149// Loudness Enhancer effect is required by CDD, but only the type is fixed.
150// This is the same UUID as AudioEffect.EFFECT_TYPE_LOUDNESS_ENHANCER in Java.
151static const Uuid LOUDNESS_ENHANCER_EFFECT_TYPE = {
152 0xfe3199be, 0xaed0, 0x413f, 0x87bb,
153 std::array<uint8_t, 6>{{0x11, 0x26, 0x0e, 0xb6, 0x3c, 0xf1}}};
154
155// The main test class for Audio Effect HIDL HAL.
Mikhail Naganov315ce412019-10-23 16:46:54 -0700156class AudioEffectHidlTest : public ::testing::TestWithParam<std::string> {
157 public:
158 void SetUp() override {
159 effectsFactory = IEffectsFactory::getService(GetParam());
Kevin Rocard55b10612018-11-12 12:33:16 -0800160 ASSERT_NE(nullptr, effectsFactory.get());
Mikhail Naganov9f289042017-02-23 08:39:36 -0800161
Kevin Rocard55b10612018-11-12 12:33:16 -0800162 findAndCreateEffect(getEffectType());
163 ASSERT_NE(nullptr, effect.get());
Mikhail Naganov9f289042017-02-23 08:39:36 -0800164
Kevin Rocard55b10612018-11-12 12:33:16 -0800165 Return<Result> ret = effect->init();
166 ASSERT_TRUE(ret.isOk());
167 ASSERT_EQ(Result::OK, ret);
168 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800169
Kevin Rocard55b10612018-11-12 12:33:16 -0800170 void TearDown() override {
171 effect.clear();
172 effectsFactory.clear();
173 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800174
Kevin Rocard55b10612018-11-12 12:33:16 -0800175 protected:
176 static void description(const std::string& description) {
177 RecordProperty("description", description);
178 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800179
Kevin Rocard55b10612018-11-12 12:33:16 -0800180 virtual Uuid getEffectType() { return EQUALIZER_EFFECT_TYPE; }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800181
Kevin Rocard55b10612018-11-12 12:33:16 -0800182 void findAndCreateEffect(const Uuid& type);
183 void findEffectInstance(const Uuid& type, Uuid* uuid);
184 void getChannelCount(uint32_t* channelCount);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800185
Kevin Rocard55b10612018-11-12 12:33:16 -0800186 sp<IEffectsFactory> effectsFactory;
187 sp<IEffect> effect;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800188};
189
190void AudioEffectHidlTest::findAndCreateEffect(const Uuid& type) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800191 Uuid effectUuid;
192 findEffectInstance(type, &effectUuid);
193 Return<void> ret = effectsFactory->createEffect(
194 effectUuid, 1 /*session*/, 1 /*ioHandle*/,
195 [&](Result r, const sp<IEffect>& result, uint64_t /*effectId*/) {
196 if (r == Result::OK) {
197 effect = result;
198 }
199 });
200 ASSERT_TRUE(ret.isOk());
Mikhail Naganov9f289042017-02-23 08:39:36 -0800201}
202
203void AudioEffectHidlTest::findEffectInstance(const Uuid& type, Uuid* uuid) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800204 bool effectFound = false;
205 Return<void> ret =
206 effectsFactory->getAllDescriptors([&](Result r, const hidl_vec<EffectDescriptor>& result) {
207 if (r == Result::OK) {
208 for (const auto& desc : result) {
209 if (desc.type == type) {
210 effectFound = true;
211 *uuid = desc.uuid;
212 break;
213 }
214 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800215 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800216 });
217 ASSERT_TRUE(ret.isOk());
218 ASSERT_TRUE(effectFound);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800219}
220
221void AudioEffectHidlTest::getChannelCount(uint32_t* channelCount) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800222 Result retval;
223 EffectConfig currentConfig;
224 Return<void> ret = effect->getConfig([&](Result r, const EffectConfig& conf) {
225 retval = r;
226 if (r == Result::OK) {
227 currentConfig = conf;
228 }
229 });
230 ASSERT_TRUE(ret.isOk());
231 ASSERT_EQ(Result::OK, retval);
232 ASSERT_TRUE(audio_channel_mask_is_valid(
233 static_cast<audio_channel_mask_t>(currentConfig.outputCfg.channels)));
234 *channelCount = audio_channel_count_from_out_mask(
235 static_cast<audio_channel_mask_t>(currentConfig.outputCfg.channels));
Mikhail Naganov9f289042017-02-23 08:39:36 -0800236}
237
nelsonli3c12e582019-12-12 13:53:49 +0800238TEST_P(AudioEffectHidlTest, Close) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800239 description("Verify that an effect can be closed");
240 Return<Result> ret = effect->close();
241 EXPECT_TRUE(ret.isOk());
242 EXPECT_EQ(Result::OK, ret);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800243}
244
nelsonli3c12e582019-12-12 13:53:49 +0800245TEST_P(AudioEffectHidlTest, GetDescriptor) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800246 description("Verify that an effect can return its own descriptor via GetDescriptor");
247 Result retval = Result::NOT_INITIALIZED;
248 Uuid actualType;
249 Return<void> ret = effect->getDescriptor([&](Result r, const EffectDescriptor& desc) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800250 retval = r;
251 if (r == Result::OK) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800252 actualType = desc.type;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800253 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800254 });
255 EXPECT_TRUE(ret.isOk());
256 EXPECT_EQ(Result::OK, retval);
257 EXPECT_EQ(getEffectType(), actualType);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800258}
259
nelsonli3c12e582019-12-12 13:53:49 +0800260TEST_P(AudioEffectHidlTest, GetSetConfig) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800261 description(
262 "Verify that it is possible to manipulate effect config via Get / "
263 "SetConfig");
264 Result retval = Result::NOT_INITIALIZED;
265 EffectConfig currentConfig;
266 Return<void> ret = effect->getConfig([&](Result r, const EffectConfig& conf) {
267 retval = r;
268 if (r == Result::OK) {
269 currentConfig = conf;
270 }
271 });
272 EXPECT_TRUE(ret.isOk());
273 EXPECT_EQ(Result::OK, retval);
274 Return<Result> ret2 = effect->setConfig(currentConfig, nullptr, nullptr);
275 EXPECT_TRUE(ret2.isOk());
276 EXPECT_EQ(Result::OK, ret2);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800277}
278
nelsonli3c12e582019-12-12 13:53:49 +0800279TEST_P(AudioEffectHidlTest, GetConfigReverse) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800280 description("Verify that GetConfigReverse does not crash");
281 Return<void> ret = effect->getConfigReverse([&](Result, const EffectConfig&) {});
282 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700283}
284
nelsonli3c12e582019-12-12 13:53:49 +0800285TEST_P(AudioEffectHidlTest, GetSupportedAuxChannelsConfigs) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800286 description("Verify that GetSupportedAuxChannelsConfigs does not crash");
287 Return<void> ret = effect->getSupportedAuxChannelsConfigs(
288 0, [&](Result, const hidl_vec<EffectAuxChannelsConfig>&) {});
289 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700290}
291
nelsonli3c12e582019-12-12 13:53:49 +0800292TEST_P(AudioEffectHidlTest, GetAuxChannelsConfig) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800293 description("Verify that GetAuxChannelsConfig does not crash");
294 Return<void> ret = effect->getAuxChannelsConfig([&](Result, const EffectAuxChannelsConfig&) {});
295 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700296}
297
nelsonli3c12e582019-12-12 13:53:49 +0800298TEST_P(AudioEffectHidlTest, SetAuxChannelsConfig) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800299 description("Verify that SetAuxChannelsConfig does not crash");
300 Return<Result> ret = effect->setAuxChannelsConfig(EffectAuxChannelsConfig());
301 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700302}
303
Mikhail Naganov9f289042017-02-23 08:39:36 -0800304// Not generated automatically because AudioBuffer contains
305// instances of hidl_memory which can't be compared properly
306// in general case due to presence of handles.
307//
308// However, in this particular case, handles must not present
309// thus comparison is possible.
310//
311// operator== must be defined in the same namespace as the structures.
312namespace android {
313namespace hardware {
314namespace audio {
315namespace effect {
Kevin Rocard96d2cd92018-11-14 16:22:07 -0800316namespace CPP_VERSION {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800317inline bool operator==(const AudioBuffer& lhs, const AudioBuffer& rhs) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800318 return lhs.id == rhs.id && lhs.frameCount == rhs.frameCount && lhs.data.handle() == nullptr &&
319 rhs.data.handle() == nullptr;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800320}
321
Kevin Rocard55b10612018-11-12 12:33:16 -0800322inline bool operator==(const EffectBufferConfig& lhs, const EffectBufferConfig& rhs) {
323 return lhs.buffer == rhs.buffer && lhs.samplingRateHz == rhs.samplingRateHz &&
324 lhs.channels == rhs.channels && lhs.format == rhs.format &&
325 lhs.accessMode == rhs.accessMode && lhs.mask == rhs.mask;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800326}
327
328inline bool operator==(const EffectConfig& lhs, const EffectConfig& rhs) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800329 return lhs.inputCfg == rhs.inputCfg && lhs.outputCfg == rhs.outputCfg;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800330}
Kevin Rocard96d2cd92018-11-14 16:22:07 -0800331} // namespace CPP_VERSION
Mikhail Naganov9f289042017-02-23 08:39:36 -0800332} // namespace effect
333} // namespace audio
334} // namespace hardware
335} // namespace android
336
nelsonli3c12e582019-12-12 13:53:49 +0800337TEST_P(AudioEffectHidlTest, Reset) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800338 description("Verify that Reset preserves effect configuration");
339 Result retval = Result::NOT_INITIALIZED;
340 EffectConfig originalConfig;
341 Return<void> ret = effect->getConfig([&](Result r, const EffectConfig& conf) {
342 retval = r;
343 if (r == Result::OK) {
344 originalConfig = conf;
345 }
346 });
347 ASSERT_TRUE(ret.isOk());
348 ASSERT_EQ(Result::OK, retval);
349 Return<Result> ret2 = effect->reset();
350 EXPECT_TRUE(ret2.isOk());
351 EXPECT_EQ(Result::OK, ret2);
352 EffectConfig configAfterReset;
353 ret = effect->getConfig([&](Result r, const EffectConfig& conf) {
354 retval = r;
355 if (r == Result::OK) {
356 configAfterReset = conf;
357 }
358 });
359 EXPECT_EQ(originalConfig, configAfterReset);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800360}
361
nelsonli3c12e582019-12-12 13:53:49 +0800362TEST_P(AudioEffectHidlTest, DisableEnableDisable) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800363 description("Verify Disable -> Enable -> Disable sequence for an effect");
364 Return<Result> ret = effect->disable();
365 EXPECT_TRUE(ret.isOk());
366 EXPECT_EQ(Result::INVALID_ARGUMENTS, ret);
367 ret = effect->enable();
368 EXPECT_TRUE(ret.isOk());
369 EXPECT_EQ(Result::OK, ret);
370 ret = effect->disable();
371 EXPECT_TRUE(ret.isOk());
372 EXPECT_EQ(Result::OK, ret);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800373}
374
nelsonli3c12e582019-12-12 13:53:49 +0800375TEST_P(AudioEffectHidlTest, SetDevice) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800376 description("Verify that SetDevice works for an output chain effect");
Kevin Rocardf5305b32018-11-13 10:41:53 -0800377 Return<Result> ret = effect->setDevice(mkEnumBitfield(AudioDevice::OUT_SPEAKER));
Kevin Rocard55b10612018-11-12 12:33:16 -0800378 EXPECT_TRUE(ret.isOk());
379 EXPECT_EQ(Result::OK, ret);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800380}
381
nelsonli3c12e582019-12-12 13:53:49 +0800382TEST_P(AudioEffectHidlTest, SetAndGetVolume) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800383 description("Verify that SetAndGetVolume method works for an effect");
384 uint32_t channelCount;
385 getChannelCount(&channelCount);
386 hidl_vec<uint32_t> volumes;
387 volumes.resize(channelCount);
388 for (uint32_t i = 0; i < channelCount; ++i) {
389 volumes[i] = 0;
390 }
391 Result retval = Result::NOT_INITIALIZED;
392 Return<void> ret =
393 effect->setAndGetVolume(volumes, [&](Result r, const hidl_vec<uint32_t>&) { retval = r; });
394 EXPECT_TRUE(ret.isOk());
395 EXPECT_EQ(Result::OK, retval);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800396}
397
nelsonli3c12e582019-12-12 13:53:49 +0800398TEST_P(AudioEffectHidlTest, VolumeChangeNotification) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800399 description("Verify that effect accepts VolumeChangeNotification");
400 uint32_t channelCount;
401 getChannelCount(&channelCount);
402 hidl_vec<uint32_t> volumes;
403 volumes.resize(channelCount);
404 for (uint32_t i = 0; i < channelCount; ++i) {
405 volumes[i] = 0;
406 }
407 Return<Result> ret = effect->volumeChangeNotification(volumes);
408 EXPECT_TRUE(ret.isOk());
409 EXPECT_EQ(Result::OK, ret);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800410}
411
nelsonli3c12e582019-12-12 13:53:49 +0800412TEST_P(AudioEffectHidlTest, SetAudioMode) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800413 description("Verify that SetAudioMode works for an effect");
414 Return<Result> ret = effect->setAudioMode(AudioMode::NORMAL);
415 EXPECT_TRUE(ret.isOk());
416 EXPECT_EQ(Result::OK, ret);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800417}
418
nelsonli3c12e582019-12-12 13:53:49 +0800419TEST_P(AudioEffectHidlTest, SetConfigReverse) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800420 description("Verify that SetConfigReverse does not crash");
421 Return<Result> ret = effect->setConfigReverse(EffectConfig(), nullptr, nullptr);
422 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700423}
424
nelsonli3c12e582019-12-12 13:53:49 +0800425TEST_P(AudioEffectHidlTest, SetInputDevice) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800426 description("Verify that SetInputDevice does not crash");
Kevin Rocardf5305b32018-11-13 10:41:53 -0800427 Return<Result> ret = effect->setInputDevice(mkEnumBitfield(AudioDevice::IN_BUILTIN_MIC));
Kevin Rocard55b10612018-11-12 12:33:16 -0800428 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700429}
430
nelsonli3c12e582019-12-12 13:53:49 +0800431TEST_P(AudioEffectHidlTest, SetAudioSource) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800432 description("Verify that SetAudioSource does not crash");
433 Return<Result> ret = effect->setAudioSource(AudioSource::MIC);
434 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700435}
436
nelsonli3c12e582019-12-12 13:53:49 +0800437TEST_P(AudioEffectHidlTest, Offload) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800438 description("Verify that calling Offload method does not crash");
439 EffectOffloadParameter offloadParam;
440 offloadParam.isOffload = false;
441 offloadParam.ioHandle = static_cast<int>(AudioHandleConsts::AUDIO_IO_HANDLE_NONE);
442 Return<Result> ret = effect->offload(offloadParam);
443 EXPECT_TRUE(ret.isOk());
Mikhail Naganov9f289042017-02-23 08:39:36 -0800444}
445
nelsonli3c12e582019-12-12 13:53:49 +0800446TEST_P(AudioEffectHidlTest, PrepareForProcessing) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800447 description("Verify that PrepareForProcessing method works for an effect");
448 Result retval = Result::NOT_INITIALIZED;
449 Return<void> ret = effect->prepareForProcessing(
450 [&](Result r, const MQDescriptorSync<Result>&) { retval = r; });
451 EXPECT_TRUE(ret.isOk());
452 EXPECT_EQ(Result::OK, retval);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800453}
454
nelsonli3c12e582019-12-12 13:53:49 +0800455TEST_P(AudioEffectHidlTest, SetProcessBuffers) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800456 description("Verify that SetProcessBuffers works for an effect");
457 sp<IAllocator> ashmem = IAllocator::getService("ashmem");
458 ASSERT_NE(nullptr, ashmem.get());
459 bool success = false;
460 AudioBuffer buffer;
461 Return<void> ret = ashmem->allocate(1024, [&](bool s, const hidl_memory& memory) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800462 success = s;
463 if (s) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800464 buffer.data = memory;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800465 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800466 });
467 ASSERT_TRUE(ret.isOk());
468 ASSERT_TRUE(success);
469 Return<Result> ret2 = effect->setProcessBuffers(buffer, buffer);
470 EXPECT_TRUE(ret2.isOk());
471 EXPECT_EQ(Result::OK, ret2);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800472}
473
nelsonli3c12e582019-12-12 13:53:49 +0800474TEST_P(AudioEffectHidlTest, Command) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800475 description("Verify that Command does not crash");
476 Return<void> ret =
477 effect->command(0, hidl_vec<uint8_t>(), 0, [&](int32_t, const hidl_vec<uint8_t>&) {});
478 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700479}
Mikhail Naganov9f289042017-02-23 08:39:36 -0800480
nelsonli3c12e582019-12-12 13:53:49 +0800481TEST_P(AudioEffectHidlTest, SetParameter) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800482 description("Verify that SetParameter does not crash");
483 Return<Result> ret = effect->setParameter(hidl_vec<uint8_t>(), hidl_vec<uint8_t>());
484 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700485}
486
nelsonli3c12e582019-12-12 13:53:49 +0800487TEST_P(AudioEffectHidlTest, GetParameter) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800488 description("Verify that GetParameter does not crash");
489 Return<void> ret =
490 effect->getParameter(hidl_vec<uint8_t>(), 0, [&](Result, const hidl_vec<uint8_t>&) {});
491 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700492}
493
nelsonli3c12e582019-12-12 13:53:49 +0800494TEST_P(AudioEffectHidlTest, GetSupportedConfigsForFeature) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800495 description("Verify that GetSupportedConfigsForFeature does not crash");
496 Return<void> ret = effect->getSupportedConfigsForFeature(
497 0, 0, 0, [&](Result, uint32_t, const hidl_vec<uint8_t>&) {});
498 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700499}
500
nelsonli3c12e582019-12-12 13:53:49 +0800501TEST_P(AudioEffectHidlTest, GetCurrentConfigForFeature) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800502 description("Verify that GetCurrentConfigForFeature does not crash");
503 Return<void> ret =
504 effect->getCurrentConfigForFeature(0, 0, [&](Result, const hidl_vec<uint8_t>&) {});
505 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700506}
507
nelsonli3c12e582019-12-12 13:53:49 +0800508TEST_P(AudioEffectHidlTest, SetCurrentConfigForFeature) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800509 description("Verify that SetCurrentConfigForFeature does not crash");
510 Return<Result> ret = effect->setCurrentConfigForFeature(0, hidl_vec<uint8_t>());
511 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700512}
513
Mikhail Naganov9f289042017-02-23 08:39:36 -0800514// The main test class for Equalizer Audio Effect HIDL HAL.
515class EqualizerAudioEffectHidlTest : public AudioEffectHidlTest {
Kevin Rocard55b10612018-11-12 12:33:16 -0800516 public:
517 void SetUp() override {
518 AudioEffectHidlTest::SetUp();
519 equalizer = IEqualizerEffect::castFrom(effect);
520 ASSERT_NE(nullptr, equalizer.get());
521 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800522
Kevin Rocard55b10612018-11-12 12:33:16 -0800523 protected:
524 Uuid getEffectType() override { return EQUALIZER_EFFECT_TYPE; }
525 void getNumBands(uint16_t* numBands);
526 void getLevelRange(int16_t* minLevel, int16_t* maxLevel);
527 void getBandFrequencyRange(uint16_t band, uint32_t* minFreq, uint32_t* centerFreq,
528 uint32_t* maxFreq);
529 void getPresetCount(size_t* count);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800530
Kevin Rocard55b10612018-11-12 12:33:16 -0800531 sp<IEqualizerEffect> equalizer;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800532};
533
534void EqualizerAudioEffectHidlTest::getNumBands(uint16_t* numBands) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800535 Result retval = Result::NOT_INITIALIZED;
536 Return<void> ret = equalizer->getNumBands([&](Result r, uint16_t b) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800537 retval = r;
538 if (retval == Result::OK) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800539 *numBands = b;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800540 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800541 });
542 ASSERT_TRUE(ret.isOk());
543 ASSERT_EQ(Result::OK, retval);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800544}
545
Kevin Rocard55b10612018-11-12 12:33:16 -0800546void EqualizerAudioEffectHidlTest::getLevelRange(int16_t* minLevel, int16_t* maxLevel) {
547 Result retval = Result::NOT_INITIALIZED;
548 Return<void> ret = equalizer->getLevelRange([&](Result r, int16_t min, int16_t max) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800549 retval = r;
550 if (retval == Result::OK) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800551 *minLevel = min;
552 *maxLevel = max;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800553 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800554 });
555 ASSERT_TRUE(ret.isOk());
556 ASSERT_EQ(Result::OK, retval);
557}
558
559void EqualizerAudioEffectHidlTest::getBandFrequencyRange(uint16_t band, uint32_t* minFreq,
560 uint32_t* centerFreq, uint32_t* maxFreq) {
561 Result retval = Result::NOT_INITIALIZED;
562 Return<void> ret =
563 equalizer->getBandFrequencyRange(band, [&](Result r, uint32_t min, uint32_t max) {
564 retval = r;
565 if (retval == Result::OK) {
566 *minFreq = min;
567 *maxFreq = max;
568 }
569 });
570 ASSERT_TRUE(ret.isOk());
571 ASSERT_EQ(Result::OK, retval);
572 ret = equalizer->getBandCenterFrequency(band, [&](Result r, uint32_t center) {
573 retval = r;
574 if (retval == Result::OK) {
575 *centerFreq = center;
576 }
577 });
578 ASSERT_TRUE(ret.isOk());
579 ASSERT_EQ(Result::OK, retval);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800580}
581
582void EqualizerAudioEffectHidlTest::getPresetCount(size_t* count) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800583 Result retval = Result::NOT_INITIALIZED;
584 Return<void> ret = equalizer->getPresetNames([&](Result r, const hidl_vec<hidl_string>& names) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800585 retval = r;
586 if (retval == Result::OK) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800587 *count = names.size();
Mikhail Naganov9f289042017-02-23 08:39:36 -0800588 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800589 });
590 ASSERT_TRUE(ret.isOk());
591 ASSERT_EQ(Result::OK, retval);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800592}
593
nelsonli3c12e582019-12-12 13:53:49 +0800594TEST_P(EqualizerAudioEffectHidlTest, GetNumBands) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800595 description("Verify that Equalizer effect reports at least one band");
596 uint16_t numBands = 0;
597 getNumBands(&numBands);
598 EXPECT_GT(numBands, 0);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800599}
600
nelsonli3c12e582019-12-12 13:53:49 +0800601TEST_P(EqualizerAudioEffectHidlTest, GetLevelRange) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800602 description("Verify that Equalizer effect reports adequate band level range");
603 int16_t minLevel = 0x7fff, maxLevel = 0;
604 getLevelRange(&minLevel, &maxLevel);
605 EXPECT_GT(maxLevel, minLevel);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800606}
607
nelsonli3c12e582019-12-12 13:53:49 +0800608TEST_P(EqualizerAudioEffectHidlTest, GetSetBandLevel) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800609 description("Verify that manipulating band levels works for Equalizer effect");
610 uint16_t numBands = 0;
611 getNumBands(&numBands);
612 ASSERT_GT(numBands, 0);
613 int16_t levels[3]{0x7fff, 0, 0};
614 getLevelRange(&levels[0], &levels[2]);
615 ASSERT_GT(levels[2], levels[0]);
616 levels[1] = (levels[2] + levels[0]) / 2;
617 for (uint16_t i = 0; i < numBands; ++i) {
618 for (size_t j = 0; j < ARRAY_SIZE(levels); ++j) {
619 Return<Result> ret = equalizer->setBandLevel(i, levels[j]);
620 EXPECT_TRUE(ret.isOk());
621 EXPECT_EQ(Result::OK, ret);
622 Result retval = Result::NOT_INITIALIZED;
623 int16_t actualLevel;
624 Return<void> ret2 = equalizer->getBandLevel(i, [&](Result r, int16_t l) {
625 retval = r;
626 if (retval == Result::OK) {
627 actualLevel = l;
628 }
629 });
630 EXPECT_TRUE(ret2.isOk());
631 EXPECT_EQ(Result::OK, retval);
632 EXPECT_EQ(levels[j], actualLevel);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800633 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800634 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800635}
636
nelsonli3c12e582019-12-12 13:53:49 +0800637TEST_P(EqualizerAudioEffectHidlTest, GetBandCenterFrequencyAndRange) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800638 description("Verify that Equalizer effect reports adequate band frequency range");
639 uint16_t numBands = 0;
640 getNumBands(&numBands);
641 ASSERT_GT(numBands, 0);
642 for (uint16_t i = 0; i < numBands; ++i) {
643 uint32_t minFreq = 0xffffffff, centerFreq = 0xffffffff, maxFreq = 0xffffffff;
644 getBandFrequencyRange(i, &minFreq, &centerFreq, &maxFreq);
645 // Note: NXP legacy implementation reports "1" as upper bound for last band,
646 // so this check fails.
647 EXPECT_GE(maxFreq, centerFreq);
648 EXPECT_GE(centerFreq, minFreq);
649 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800650}
651
nelsonli3c12e582019-12-12 13:53:49 +0800652TEST_P(EqualizerAudioEffectHidlTest, GetBandForFrequency) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800653 description("Verify that Equalizer effect supports GetBandForFrequency correctly");
654 uint16_t numBands = 0;
655 getNumBands(&numBands);
656 ASSERT_GT(numBands, 0);
657 for (uint16_t i = 0; i < numBands; ++i) {
658 uint32_t freqs[3]{0, 0, 0};
659 getBandFrequencyRange(i, &freqs[0], &freqs[1], &freqs[2]);
660 // NXP legacy implementation reports "1" as upper bound for last band, some
661 // of the checks fail.
662 for (size_t j = 0; j < ARRAY_SIZE(freqs); ++j) {
663 if (j == 0) {
664 freqs[j]++;
665 } // Min frequency is an open interval.
666 Result retval = Result::NOT_INITIALIZED;
667 uint16_t actualBand = numBands + 1;
668 Return<void> ret = equalizer->getBandForFrequency(freqs[j], [&](Result r, uint16_t b) {
669 retval = r;
670 if (retval == Result::OK) {
671 actualBand = b;
672 }
673 });
674 EXPECT_TRUE(ret.isOk());
675 EXPECT_EQ(Result::OK, retval);
676 EXPECT_EQ(i, actualBand) << "Frequency: " << freqs[j];
677 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800678 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800679}
680
nelsonli3c12e582019-12-12 13:53:49 +0800681TEST_P(EqualizerAudioEffectHidlTest, GetPresetNames) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800682 description("Verify that Equalizer effect reports at least one preset");
683 size_t presetCount;
684 getPresetCount(&presetCount);
685 EXPECT_GT(presetCount, 0u);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800686}
687
nelsonli3c12e582019-12-12 13:53:49 +0800688TEST_P(EqualizerAudioEffectHidlTest, GetSetCurrentPreset) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800689 description("Verify that manipulating the current preset for Equalizer effect");
690 size_t presetCount;
691 getPresetCount(&presetCount);
692 ASSERT_GT(presetCount, 0u);
693 for (uint16_t i = 0; i < presetCount; ++i) {
694 Return<Result> ret = equalizer->setCurrentPreset(i);
695 EXPECT_TRUE(ret.isOk());
696 EXPECT_EQ(Result::OK, ret);
697 Result retval = Result::NOT_INITIALIZED;
698 uint16_t actualPreset = 0xffff;
699 Return<void> ret2 = equalizer->getCurrentPreset([&](Result r, uint16_t p) {
700 retval = r;
701 if (retval == Result::OK) {
702 actualPreset = p;
703 }
704 });
705 EXPECT_TRUE(ret2.isOk());
706 EXPECT_EQ(Result::OK, retval);
707 EXPECT_EQ(i, actualPreset);
708 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800709}
710
nelsonli3c12e582019-12-12 13:53:49 +0800711TEST_P(EqualizerAudioEffectHidlTest, GetSetAllProperties) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800712 description(
713 "Verify that setting band levels and presets works via Get / "
714 "SetAllProperties for Equalizer effect");
Kevin Rocard96d2cd92018-11-14 16:22:07 -0800715 using AllProperties =
Mikhail Naganov00a44c02018-12-14 14:31:45 -0800716 ::android::hardware::audio::effect::CPP_VERSION::IEqualizerEffect::AllProperties;
Kevin Rocard55b10612018-11-12 12:33:16 -0800717 uint16_t numBands = 0;
718 getNumBands(&numBands);
719 ASSERT_GT(numBands, 0);
720 AllProperties props;
721 props.bandLevels.resize(numBands);
722 for (size_t i = 0; i < numBands; ++i) {
723 props.bandLevels[i] = 0;
724 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800725
Kevin Rocard55b10612018-11-12 12:33:16 -0800726 AllProperties actualProps;
727 Result retval = Result::NOT_INITIALIZED;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800728
Kevin Rocard55b10612018-11-12 12:33:16 -0800729 // Verify setting of the band levels via properties.
730 props.curPreset = -1;
731 Return<Result> ret = equalizer->setAllProperties(props);
732 EXPECT_TRUE(ret.isOk());
733 EXPECT_EQ(Result::OK, ret);
734 Return<void> ret2 = equalizer->getAllProperties([&](Result r, AllProperties p) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800735 retval = r;
736 if (retval == Result::OK) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800737 actualProps = p;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800738 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800739 });
740 EXPECT_TRUE(ret2.isOk());
741 EXPECT_EQ(Result::OK, retval);
742 EXPECT_EQ(props.bandLevels, actualProps.bandLevels);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800743
Kevin Rocard55b10612018-11-12 12:33:16 -0800744 // Verify setting of the current preset via properties.
745 props.curPreset = 0; // Assuming there is at least one preset.
746 ret = equalizer->setAllProperties(props);
747 EXPECT_TRUE(ret.isOk());
748 EXPECT_EQ(Result::OK, ret);
749 ret2 = equalizer->getAllProperties([&](Result r, AllProperties p) {
750 retval = r;
751 if (retval == Result::OK) {
752 actualProps = p;
753 }
754 });
755 EXPECT_TRUE(ret2.isOk());
756 EXPECT_EQ(Result::OK, retval);
757 EXPECT_EQ(props.curPreset, actualProps.curPreset);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800758}
759
760// The main test class for Equalizer Audio Effect HIDL HAL.
761class LoudnessEnhancerAudioEffectHidlTest : public AudioEffectHidlTest {
Kevin Rocard55b10612018-11-12 12:33:16 -0800762 public:
763 void SetUp() override {
764 AudioEffectHidlTest::SetUp();
765 enhancer = ILoudnessEnhancerEffect::castFrom(effect);
766 ASSERT_NE(nullptr, enhancer.get());
767 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800768
Kevin Rocard55b10612018-11-12 12:33:16 -0800769 protected:
770 Uuid getEffectType() override { return LOUDNESS_ENHANCER_EFFECT_TYPE; }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800771
Kevin Rocard55b10612018-11-12 12:33:16 -0800772 sp<ILoudnessEnhancerEffect> enhancer;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800773};
774
nelsonli3c12e582019-12-12 13:53:49 +0800775TEST_P(LoudnessEnhancerAudioEffectHidlTest, GetSetTargetGain) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800776 description(
777 "Verify that manipulating the target gain works for Loudness Enhancer "
778 "effect");
779 const int32_t gain = 100;
780 Return<Result> ret = enhancer->setTargetGain(gain);
781 EXPECT_TRUE(ret.isOk());
782 EXPECT_EQ(Result::OK, ret);
783 int32_t actualGain = 0;
784 Result retval;
785 Return<void> ret2 = enhancer->getTargetGain([&](Result r, int32_t g) {
786 retval = r;
787 if (retval == Result::OK) {
788 actualGain = g;
789 }
790 });
791 EXPECT_TRUE(ret2.isOk());
792 EXPECT_EQ(Result::OK, retval);
793 EXPECT_EQ(gain, actualGain);
Mikhail Naganovbf393172016-11-11 16:24:50 -0800794}
Zhuoyao Zhang7dc6ce82018-02-08 12:44:27 -0800795
Mikhail Naganov315ce412019-10-23 16:46:54 -0700796INSTANTIATE_TEST_SUITE_P(
797 EffectsFactory, AudioEffectsFactoryHidlTest,
798 testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)),
799 android::hardware::PrintInstanceNameToString);
800INSTANTIATE_TEST_SUITE_P(
nelsonli3c12e582019-12-12 13:53:49 +0800801 Equalizer, AudioEffectHidlTest,
802 testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)),
803 android::hardware::PrintInstanceNameToString);
804INSTANTIATE_TEST_SUITE_P(
Mikhail Naganov315ce412019-10-23 16:46:54 -0700805 Equalizer, EqualizerAudioEffectHidlTest,
806 testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)),
807 android::hardware::PrintInstanceNameToString);
808INSTANTIATE_TEST_SUITE_P(
809 LoudnessEnhancer, LoudnessEnhancerAudioEffectHidlTest,
810 testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)),
811 android::hardware::PrintInstanceNameToString);