blob: 390d4ee41887fbee6f76192b64a4842c5288a56b [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(
Eric Laurentd33e6932019-11-13 13:47:50 -080099 effectUuid, 1 /*session*/, 1 /*ioHandle*/,
100#if MAJOR_VERSION >= 6
101 0 /*device*/,
102#endif
103 [&](Result r, const sp<IEffect>& result, uint64_t /*effectId*/) {
104 retval = r;
105 if (r == Result::OK) {
106 effect = result;
107 }
108 });
Kevin Rocard55b10612018-11-12 12:33:16 -0800109 EXPECT_TRUE(ret.isOk());
110 EXPECT_EQ(Result::OK, retval);
111 EXPECT_NE(nullptr, effect.get());
Mikhail Naganovbf393172016-11-11 16:24:50 -0800112}
113
nelsonli3c12e582019-12-12 13:53:49 +0800114TEST_P(AudioEffectsFactoryHidlTest, GetDescriptor) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800115 description(
116 "Verify that effects factory can provide an effect descriptor via "
117 "GetDescriptor");
118 hidl_vec<EffectDescriptor> allDescriptors;
119 Return<void> ret =
120 effectsFactory->getAllDescriptors([&](Result r, const hidl_vec<EffectDescriptor>& result) {
121 if (r == Result::OK) {
122 allDescriptors = result;
123 }
Mikhail Naganovbf393172016-11-11 16:24:50 -0800124 });
Kevin Rocard55b10612018-11-12 12:33:16 -0800125 ASSERT_TRUE(ret.isOk());
126 ASSERT_GT(allDescriptors.size(), 0u);
127 for (size_t i = 0; i < allDescriptors.size(); ++i) {
128 ret = effectsFactory->getDescriptor(allDescriptors[i].uuid,
129 [&](Result r, const EffectDescriptor& result) {
130 EXPECT_EQ(r, Result::OK);
131 EXPECT_EQ(result, allDescriptors[i]);
132 });
133 }
134 EXPECT_TRUE(ret.isOk());
Mikhail Naganovbf393172016-11-11 16:24:50 -0800135}
136
nelsonli3c12e582019-12-12 13:53:49 +0800137TEST_P(AudioEffectsFactoryHidlTest, DebugDumpInvalidArgument) {
Mikhail Naganov3e6fe752017-04-24 10:44:08 -0700138 description("Verify that debugDump doesn't crash on invalid arguments");
Kevin Rocard96d2cd92018-11-14 16:22:07 -0800139#if MAJOR_VERSION == 2
Mikhail Naganov3e6fe752017-04-24 10:44:08 -0700140 Return<void> ret = effectsFactory->debugDump(hidl_handle());
Kevin Rocard20614ba2018-11-10 07:20:17 -0800141#elif MAJOR_VERSION >= 4
Kevin Rocard96d2cd92018-11-14 16:22:07 -0800142 Return<void> ret = effectsFactory->debug(hidl_handle(), {});
143#endif
Mikhail Naganov3e6fe752017-04-24 10:44:08 -0700144 ASSERT_TRUE(ret.isOk());
145}
146
Mikhail Naganov9f289042017-02-23 08:39:36 -0800147// Equalizer effect is required by CDD, but only the type is fixed.
148// This is the same UUID as AudioEffect.EFFECT_TYPE_EQUALIZER in Java.
149static const Uuid EQUALIZER_EFFECT_TYPE = {
150 0x0bed4300, 0xddd6, 0x11db, 0x8f34,
151 std::array<uint8_t, 6>{{0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}};
152// Loudness Enhancer effect is required by CDD, but only the type is fixed.
153// This is the same UUID as AudioEffect.EFFECT_TYPE_LOUDNESS_ENHANCER in Java.
154static const Uuid LOUDNESS_ENHANCER_EFFECT_TYPE = {
155 0xfe3199be, 0xaed0, 0x413f, 0x87bb,
156 std::array<uint8_t, 6>{{0x11, 0x26, 0x0e, 0xb6, 0x3c, 0xf1}}};
157
158// The main test class for Audio Effect HIDL HAL.
Mikhail Naganov315ce412019-10-23 16:46:54 -0700159class AudioEffectHidlTest : public ::testing::TestWithParam<std::string> {
160 public:
161 void SetUp() override {
162 effectsFactory = IEffectsFactory::getService(GetParam());
Kevin Rocard55b10612018-11-12 12:33:16 -0800163 ASSERT_NE(nullptr, effectsFactory.get());
Mikhail Naganov9f289042017-02-23 08:39:36 -0800164
Kevin Rocard55b10612018-11-12 12:33:16 -0800165 findAndCreateEffect(getEffectType());
166 ASSERT_NE(nullptr, effect.get());
Mikhail Naganov9f289042017-02-23 08:39:36 -0800167
Kevin Rocard55b10612018-11-12 12:33:16 -0800168 Return<Result> ret = effect->init();
169 ASSERT_TRUE(ret.isOk());
170 ASSERT_EQ(Result::OK, ret);
171 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800172
Kevin Rocard55b10612018-11-12 12:33:16 -0800173 void TearDown() override {
174 effect.clear();
175 effectsFactory.clear();
176 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800177
Kevin Rocard55b10612018-11-12 12:33:16 -0800178 protected:
179 static void description(const std::string& description) {
180 RecordProperty("description", description);
181 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800182
Kevin Rocard55b10612018-11-12 12:33:16 -0800183 virtual Uuid getEffectType() { return EQUALIZER_EFFECT_TYPE; }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800184
Kevin Rocard55b10612018-11-12 12:33:16 -0800185 void findAndCreateEffect(const Uuid& type);
186 void findEffectInstance(const Uuid& type, Uuid* uuid);
187 void getChannelCount(uint32_t* channelCount);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800188
Kevin Rocard55b10612018-11-12 12:33:16 -0800189 sp<IEffectsFactory> effectsFactory;
190 sp<IEffect> effect;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800191};
192
193void AudioEffectHidlTest::findAndCreateEffect(const Uuid& type) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800194 Uuid effectUuid;
195 findEffectInstance(type, &effectUuid);
196 Return<void> ret = effectsFactory->createEffect(
Eric Laurentd33e6932019-11-13 13:47:50 -0800197 effectUuid, 1 /*session*/, 1 /*ioHandle*/,
198#if MAJOR_VERSION >= 6
199 0 /*device*/,
200#endif
201 [&](Result r, const sp<IEffect>& result, uint64_t /*effectId*/) {
202 if (r == Result::OK) {
203 effect = result;
204 }
205 });
Kevin Rocard55b10612018-11-12 12:33:16 -0800206 ASSERT_TRUE(ret.isOk());
Mikhail Naganov9f289042017-02-23 08:39:36 -0800207}
208
209void AudioEffectHidlTest::findEffectInstance(const Uuid& type, Uuid* uuid) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800210 bool effectFound = false;
211 Return<void> ret =
212 effectsFactory->getAllDescriptors([&](Result r, const hidl_vec<EffectDescriptor>& result) {
213 if (r == Result::OK) {
214 for (const auto& desc : result) {
215 if (desc.type == type) {
216 effectFound = true;
217 *uuid = desc.uuid;
218 break;
219 }
220 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800221 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800222 });
223 ASSERT_TRUE(ret.isOk());
224 ASSERT_TRUE(effectFound);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800225}
226
227void AudioEffectHidlTest::getChannelCount(uint32_t* channelCount) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800228 Result retval;
229 EffectConfig currentConfig;
230 Return<void> ret = effect->getConfig([&](Result r, const EffectConfig& conf) {
231 retval = r;
232 if (r == Result::OK) {
233 currentConfig = conf;
234 }
235 });
236 ASSERT_TRUE(ret.isOk());
237 ASSERT_EQ(Result::OK, retval);
238 ASSERT_TRUE(audio_channel_mask_is_valid(
239 static_cast<audio_channel_mask_t>(currentConfig.outputCfg.channels)));
240 *channelCount = audio_channel_count_from_out_mask(
241 static_cast<audio_channel_mask_t>(currentConfig.outputCfg.channels));
Mikhail Naganov9f289042017-02-23 08:39:36 -0800242}
243
nelsonli3c12e582019-12-12 13:53:49 +0800244TEST_P(AudioEffectHidlTest, Close) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800245 description("Verify that an effect can be closed");
246 Return<Result> ret = effect->close();
247 EXPECT_TRUE(ret.isOk());
248 EXPECT_EQ(Result::OK, ret);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800249}
250
nelsonli3c12e582019-12-12 13:53:49 +0800251TEST_P(AudioEffectHidlTest, GetDescriptor) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800252 description("Verify that an effect can return its own descriptor via GetDescriptor");
253 Result retval = Result::NOT_INITIALIZED;
254 Uuid actualType;
255 Return<void> ret = effect->getDescriptor([&](Result r, const EffectDescriptor& desc) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800256 retval = r;
257 if (r == Result::OK) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800258 actualType = desc.type;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800259 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800260 });
261 EXPECT_TRUE(ret.isOk());
262 EXPECT_EQ(Result::OK, retval);
263 EXPECT_EQ(getEffectType(), actualType);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800264}
265
nelsonli3c12e582019-12-12 13:53:49 +0800266TEST_P(AudioEffectHidlTest, GetSetConfig) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800267 description(
268 "Verify that it is possible to manipulate effect config via Get / "
269 "SetConfig");
270 Result retval = Result::NOT_INITIALIZED;
271 EffectConfig currentConfig;
272 Return<void> ret = effect->getConfig([&](Result r, const EffectConfig& conf) {
273 retval = r;
274 if (r == Result::OK) {
275 currentConfig = conf;
276 }
277 });
278 EXPECT_TRUE(ret.isOk());
279 EXPECT_EQ(Result::OK, retval);
280 Return<Result> ret2 = effect->setConfig(currentConfig, nullptr, nullptr);
281 EXPECT_TRUE(ret2.isOk());
282 EXPECT_EQ(Result::OK, ret2);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800283}
284
nelsonli3c12e582019-12-12 13:53:49 +0800285TEST_P(AudioEffectHidlTest, GetConfigReverse) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800286 description("Verify that GetConfigReverse does not crash");
287 Return<void> ret = effect->getConfigReverse([&](Result, const EffectConfig&) {});
288 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700289}
290
nelsonli3c12e582019-12-12 13:53:49 +0800291TEST_P(AudioEffectHidlTest, GetSupportedAuxChannelsConfigs) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800292 description("Verify that GetSupportedAuxChannelsConfigs does not crash");
293 Return<void> ret = effect->getSupportedAuxChannelsConfigs(
294 0, [&](Result, const hidl_vec<EffectAuxChannelsConfig>&) {});
295 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700296}
297
nelsonli3c12e582019-12-12 13:53:49 +0800298TEST_P(AudioEffectHidlTest, GetAuxChannelsConfig) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800299 description("Verify that GetAuxChannelsConfig does not crash");
300 Return<void> ret = effect->getAuxChannelsConfig([&](Result, const EffectAuxChannelsConfig&) {});
301 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700302}
303
nelsonli3c12e582019-12-12 13:53:49 +0800304TEST_P(AudioEffectHidlTest, SetAuxChannelsConfig) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800305 description("Verify that SetAuxChannelsConfig does not crash");
306 Return<Result> ret = effect->setAuxChannelsConfig(EffectAuxChannelsConfig());
307 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700308}
309
Mikhail Naganov9f289042017-02-23 08:39:36 -0800310// Not generated automatically because AudioBuffer contains
311// instances of hidl_memory which can't be compared properly
312// in general case due to presence of handles.
313//
314// However, in this particular case, handles must not present
315// thus comparison is possible.
316//
317// operator== must be defined in the same namespace as the structures.
318namespace android {
319namespace hardware {
320namespace audio {
321namespace effect {
Kevin Rocard96d2cd92018-11-14 16:22:07 -0800322namespace CPP_VERSION {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800323inline bool operator==(const AudioBuffer& lhs, const AudioBuffer& rhs) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800324 return lhs.id == rhs.id && lhs.frameCount == rhs.frameCount && lhs.data.handle() == nullptr &&
325 rhs.data.handle() == nullptr;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800326}
327
Kevin Rocard55b10612018-11-12 12:33:16 -0800328inline bool operator==(const EffectBufferConfig& lhs, const EffectBufferConfig& rhs) {
329 return lhs.buffer == rhs.buffer && lhs.samplingRateHz == rhs.samplingRateHz &&
330 lhs.channels == rhs.channels && lhs.format == rhs.format &&
331 lhs.accessMode == rhs.accessMode && lhs.mask == rhs.mask;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800332}
333
334inline bool operator==(const EffectConfig& lhs, const EffectConfig& rhs) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800335 return lhs.inputCfg == rhs.inputCfg && lhs.outputCfg == rhs.outputCfg;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800336}
Kevin Rocard96d2cd92018-11-14 16:22:07 -0800337} // namespace CPP_VERSION
Mikhail Naganov9f289042017-02-23 08:39:36 -0800338} // namespace effect
339} // namespace audio
340} // namespace hardware
341} // namespace android
342
nelsonli3c12e582019-12-12 13:53:49 +0800343TEST_P(AudioEffectHidlTest, Reset) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800344 description("Verify that Reset preserves effect configuration");
345 Result retval = Result::NOT_INITIALIZED;
346 EffectConfig originalConfig;
347 Return<void> ret = effect->getConfig([&](Result r, const EffectConfig& conf) {
348 retval = r;
349 if (r == Result::OK) {
350 originalConfig = conf;
351 }
352 });
353 ASSERT_TRUE(ret.isOk());
354 ASSERT_EQ(Result::OK, retval);
355 Return<Result> ret2 = effect->reset();
356 EXPECT_TRUE(ret2.isOk());
357 EXPECT_EQ(Result::OK, ret2);
358 EffectConfig configAfterReset;
359 ret = effect->getConfig([&](Result r, const EffectConfig& conf) {
360 retval = r;
361 if (r == Result::OK) {
362 configAfterReset = conf;
363 }
364 });
365 EXPECT_EQ(originalConfig, configAfterReset);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800366}
367
nelsonli3c12e582019-12-12 13:53:49 +0800368TEST_P(AudioEffectHidlTest, DisableEnableDisable) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800369 description("Verify Disable -> Enable -> Disable sequence for an effect");
370 Return<Result> ret = effect->disable();
371 EXPECT_TRUE(ret.isOk());
372 EXPECT_EQ(Result::INVALID_ARGUMENTS, ret);
373 ret = effect->enable();
374 EXPECT_TRUE(ret.isOk());
375 EXPECT_EQ(Result::OK, ret);
376 ret = effect->disable();
377 EXPECT_TRUE(ret.isOk());
378 EXPECT_EQ(Result::OK, ret);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800379}
380
nelsonli3c12e582019-12-12 13:53:49 +0800381TEST_P(AudioEffectHidlTest, SetDevice) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800382 description("Verify that SetDevice works for an output chain effect");
Kevin Rocardf5305b32018-11-13 10:41:53 -0800383 Return<Result> ret = effect->setDevice(mkEnumBitfield(AudioDevice::OUT_SPEAKER));
Kevin Rocard55b10612018-11-12 12:33:16 -0800384 EXPECT_TRUE(ret.isOk());
385 EXPECT_EQ(Result::OK, ret);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800386}
387
nelsonli3c12e582019-12-12 13:53:49 +0800388TEST_P(AudioEffectHidlTest, SetAndGetVolume) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800389 description("Verify that SetAndGetVolume method works for an effect");
390 uint32_t channelCount;
391 getChannelCount(&channelCount);
392 hidl_vec<uint32_t> volumes;
393 volumes.resize(channelCount);
394 for (uint32_t i = 0; i < channelCount; ++i) {
395 volumes[i] = 0;
396 }
397 Result retval = Result::NOT_INITIALIZED;
398 Return<void> ret =
399 effect->setAndGetVolume(volumes, [&](Result r, const hidl_vec<uint32_t>&) { retval = r; });
400 EXPECT_TRUE(ret.isOk());
401 EXPECT_EQ(Result::OK, retval);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800402}
403
nelsonli3c12e582019-12-12 13:53:49 +0800404TEST_P(AudioEffectHidlTest, VolumeChangeNotification) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800405 description("Verify that effect accepts VolumeChangeNotification");
406 uint32_t channelCount;
407 getChannelCount(&channelCount);
408 hidl_vec<uint32_t> volumes;
409 volumes.resize(channelCount);
410 for (uint32_t i = 0; i < channelCount; ++i) {
411 volumes[i] = 0;
412 }
413 Return<Result> ret = effect->volumeChangeNotification(volumes);
414 EXPECT_TRUE(ret.isOk());
415 EXPECT_EQ(Result::OK, ret);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800416}
417
nelsonli3c12e582019-12-12 13:53:49 +0800418TEST_P(AudioEffectHidlTest, SetAudioMode) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800419 description("Verify that SetAudioMode works for an effect");
420 Return<Result> ret = effect->setAudioMode(AudioMode::NORMAL);
421 EXPECT_TRUE(ret.isOk());
422 EXPECT_EQ(Result::OK, ret);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800423}
424
nelsonli3c12e582019-12-12 13:53:49 +0800425TEST_P(AudioEffectHidlTest, SetConfigReverse) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800426 description("Verify that SetConfigReverse does not crash");
427 Return<Result> ret = effect->setConfigReverse(EffectConfig(), nullptr, nullptr);
428 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700429}
430
nelsonli3c12e582019-12-12 13:53:49 +0800431TEST_P(AudioEffectHidlTest, SetInputDevice) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800432 description("Verify that SetInputDevice does not crash");
Kevin Rocardf5305b32018-11-13 10:41:53 -0800433 Return<Result> ret = effect->setInputDevice(mkEnumBitfield(AudioDevice::IN_BUILTIN_MIC));
Kevin Rocard55b10612018-11-12 12:33:16 -0800434 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700435}
436
nelsonli3c12e582019-12-12 13:53:49 +0800437TEST_P(AudioEffectHidlTest, SetAudioSource) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800438 description("Verify that SetAudioSource does not crash");
439 Return<Result> ret = effect->setAudioSource(AudioSource::MIC);
440 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700441}
442
nelsonli3c12e582019-12-12 13:53:49 +0800443TEST_P(AudioEffectHidlTest, Offload) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800444 description("Verify that calling Offload method does not crash");
445 EffectOffloadParameter offloadParam;
446 offloadParam.isOffload = false;
447 offloadParam.ioHandle = static_cast<int>(AudioHandleConsts::AUDIO_IO_HANDLE_NONE);
448 Return<Result> ret = effect->offload(offloadParam);
449 EXPECT_TRUE(ret.isOk());
Mikhail Naganov9f289042017-02-23 08:39:36 -0800450}
451
nelsonli3c12e582019-12-12 13:53:49 +0800452TEST_P(AudioEffectHidlTest, PrepareForProcessing) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800453 description("Verify that PrepareForProcessing method works for an effect");
454 Result retval = Result::NOT_INITIALIZED;
455 Return<void> ret = effect->prepareForProcessing(
456 [&](Result r, const MQDescriptorSync<Result>&) { retval = r; });
457 EXPECT_TRUE(ret.isOk());
458 EXPECT_EQ(Result::OK, retval);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800459}
460
nelsonli3c12e582019-12-12 13:53:49 +0800461TEST_P(AudioEffectHidlTest, SetProcessBuffers) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800462 description("Verify that SetProcessBuffers works for an effect");
463 sp<IAllocator> ashmem = IAllocator::getService("ashmem");
464 ASSERT_NE(nullptr, ashmem.get());
465 bool success = false;
466 AudioBuffer buffer;
467 Return<void> ret = ashmem->allocate(1024, [&](bool s, const hidl_memory& memory) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800468 success = s;
469 if (s) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800470 buffer.data = memory;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800471 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800472 });
473 ASSERT_TRUE(ret.isOk());
474 ASSERT_TRUE(success);
475 Return<Result> ret2 = effect->setProcessBuffers(buffer, buffer);
476 EXPECT_TRUE(ret2.isOk());
477 EXPECT_EQ(Result::OK, ret2);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800478}
479
nelsonli3c12e582019-12-12 13:53:49 +0800480TEST_P(AudioEffectHidlTest, Command) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800481 description("Verify that Command does not crash");
482 Return<void> ret =
483 effect->command(0, hidl_vec<uint8_t>(), 0, [&](int32_t, const hidl_vec<uint8_t>&) {});
484 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700485}
Mikhail Naganov9f289042017-02-23 08:39:36 -0800486
nelsonli3c12e582019-12-12 13:53:49 +0800487TEST_P(AudioEffectHidlTest, SetParameter) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800488 description("Verify that SetParameter does not crash");
489 Return<Result> ret = effect->setParameter(hidl_vec<uint8_t>(), hidl_vec<uint8_t>());
490 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700491}
492
nelsonli3c12e582019-12-12 13:53:49 +0800493TEST_P(AudioEffectHidlTest, GetParameter) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800494 description("Verify that GetParameter does not crash");
495 Return<void> ret =
496 effect->getParameter(hidl_vec<uint8_t>(), 0, [&](Result, const hidl_vec<uint8_t>&) {});
497 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700498}
499
nelsonli3c12e582019-12-12 13:53:49 +0800500TEST_P(AudioEffectHidlTest, GetSupportedConfigsForFeature) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800501 description("Verify that GetSupportedConfigsForFeature does not crash");
502 Return<void> ret = effect->getSupportedConfigsForFeature(
503 0, 0, 0, [&](Result, uint32_t, const hidl_vec<uint8_t>&) {});
504 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700505}
506
nelsonli3c12e582019-12-12 13:53:49 +0800507TEST_P(AudioEffectHidlTest, GetCurrentConfigForFeature) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800508 description("Verify that GetCurrentConfigForFeature does not crash");
509 Return<void> ret =
510 effect->getCurrentConfigForFeature(0, 0, [&](Result, const hidl_vec<uint8_t>&) {});
511 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700512}
513
nelsonli3c12e582019-12-12 13:53:49 +0800514TEST_P(AudioEffectHidlTest, SetCurrentConfigForFeature) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800515 description("Verify that SetCurrentConfigForFeature does not crash");
516 Return<Result> ret = effect->setCurrentConfigForFeature(0, hidl_vec<uint8_t>());
517 EXPECT_TRUE(ret.isOk());
Mikhail Naganov05fa0d02017-03-24 17:06:25 -0700518}
519
Mikhail Naganov9f289042017-02-23 08:39:36 -0800520// The main test class for Equalizer Audio Effect HIDL HAL.
521class EqualizerAudioEffectHidlTest : public AudioEffectHidlTest {
Kevin Rocard55b10612018-11-12 12:33:16 -0800522 public:
523 void SetUp() override {
524 AudioEffectHidlTest::SetUp();
525 equalizer = IEqualizerEffect::castFrom(effect);
526 ASSERT_NE(nullptr, equalizer.get());
527 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800528
Kevin Rocard55b10612018-11-12 12:33:16 -0800529 protected:
530 Uuid getEffectType() override { return EQUALIZER_EFFECT_TYPE; }
531 void getNumBands(uint16_t* numBands);
532 void getLevelRange(int16_t* minLevel, int16_t* maxLevel);
533 void getBandFrequencyRange(uint16_t band, uint32_t* minFreq, uint32_t* centerFreq,
534 uint32_t* maxFreq);
535 void getPresetCount(size_t* count);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800536
Kevin Rocard55b10612018-11-12 12:33:16 -0800537 sp<IEqualizerEffect> equalizer;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800538};
539
540void EqualizerAudioEffectHidlTest::getNumBands(uint16_t* numBands) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800541 Result retval = Result::NOT_INITIALIZED;
542 Return<void> ret = equalizer->getNumBands([&](Result r, uint16_t b) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800543 retval = r;
544 if (retval == Result::OK) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800545 *numBands = b;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800546 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800547 });
548 ASSERT_TRUE(ret.isOk());
549 ASSERT_EQ(Result::OK, retval);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800550}
551
Kevin Rocard55b10612018-11-12 12:33:16 -0800552void EqualizerAudioEffectHidlTest::getLevelRange(int16_t* minLevel, int16_t* maxLevel) {
553 Result retval = Result::NOT_INITIALIZED;
554 Return<void> ret = equalizer->getLevelRange([&](Result r, int16_t min, int16_t max) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800555 retval = r;
556 if (retval == Result::OK) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800557 *minLevel = min;
558 *maxLevel = max;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800559 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800560 });
561 ASSERT_TRUE(ret.isOk());
562 ASSERT_EQ(Result::OK, retval);
563}
564
565void EqualizerAudioEffectHidlTest::getBandFrequencyRange(uint16_t band, uint32_t* minFreq,
566 uint32_t* centerFreq, uint32_t* maxFreq) {
567 Result retval = Result::NOT_INITIALIZED;
568 Return<void> ret =
569 equalizer->getBandFrequencyRange(band, [&](Result r, uint32_t min, uint32_t max) {
570 retval = r;
571 if (retval == Result::OK) {
572 *minFreq = min;
573 *maxFreq = max;
574 }
575 });
576 ASSERT_TRUE(ret.isOk());
577 ASSERT_EQ(Result::OK, retval);
578 ret = equalizer->getBandCenterFrequency(band, [&](Result r, uint32_t center) {
579 retval = r;
580 if (retval == Result::OK) {
581 *centerFreq = center;
582 }
583 });
584 ASSERT_TRUE(ret.isOk());
585 ASSERT_EQ(Result::OK, retval);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800586}
587
588void EqualizerAudioEffectHidlTest::getPresetCount(size_t* count) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800589 Result retval = Result::NOT_INITIALIZED;
590 Return<void> ret = equalizer->getPresetNames([&](Result r, const hidl_vec<hidl_string>& names) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800591 retval = r;
592 if (retval == Result::OK) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800593 *count = names.size();
Mikhail Naganov9f289042017-02-23 08:39:36 -0800594 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800595 });
596 ASSERT_TRUE(ret.isOk());
597 ASSERT_EQ(Result::OK, retval);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800598}
599
nelsonli3c12e582019-12-12 13:53:49 +0800600TEST_P(EqualizerAudioEffectHidlTest, GetNumBands) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800601 description("Verify that Equalizer effect reports at least one band");
602 uint16_t numBands = 0;
603 getNumBands(&numBands);
604 EXPECT_GT(numBands, 0);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800605}
606
nelsonli3c12e582019-12-12 13:53:49 +0800607TEST_P(EqualizerAudioEffectHidlTest, GetLevelRange) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800608 description("Verify that Equalizer effect reports adequate band level range");
609 int16_t minLevel = 0x7fff, maxLevel = 0;
610 getLevelRange(&minLevel, &maxLevel);
611 EXPECT_GT(maxLevel, minLevel);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800612}
613
nelsonli3c12e582019-12-12 13:53:49 +0800614TEST_P(EqualizerAudioEffectHidlTest, GetSetBandLevel) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800615 description("Verify that manipulating band levels works for Equalizer effect");
616 uint16_t numBands = 0;
617 getNumBands(&numBands);
618 ASSERT_GT(numBands, 0);
619 int16_t levels[3]{0x7fff, 0, 0};
620 getLevelRange(&levels[0], &levels[2]);
621 ASSERT_GT(levels[2], levels[0]);
622 levels[1] = (levels[2] + levels[0]) / 2;
623 for (uint16_t i = 0; i < numBands; ++i) {
624 for (size_t j = 0; j < ARRAY_SIZE(levels); ++j) {
625 Return<Result> ret = equalizer->setBandLevel(i, levels[j]);
626 EXPECT_TRUE(ret.isOk());
627 EXPECT_EQ(Result::OK, ret);
628 Result retval = Result::NOT_INITIALIZED;
629 int16_t actualLevel;
630 Return<void> ret2 = equalizer->getBandLevel(i, [&](Result r, int16_t l) {
631 retval = r;
632 if (retval == Result::OK) {
633 actualLevel = l;
634 }
635 });
636 EXPECT_TRUE(ret2.isOk());
637 EXPECT_EQ(Result::OK, retval);
638 EXPECT_EQ(levels[j], actualLevel);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800639 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800640 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800641}
642
nelsonli3c12e582019-12-12 13:53:49 +0800643TEST_P(EqualizerAudioEffectHidlTest, GetBandCenterFrequencyAndRange) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800644 description("Verify that Equalizer effect reports adequate band frequency range");
645 uint16_t numBands = 0;
646 getNumBands(&numBands);
647 ASSERT_GT(numBands, 0);
648 for (uint16_t i = 0; i < numBands; ++i) {
649 uint32_t minFreq = 0xffffffff, centerFreq = 0xffffffff, maxFreq = 0xffffffff;
650 getBandFrequencyRange(i, &minFreq, &centerFreq, &maxFreq);
651 // Note: NXP legacy implementation reports "1" as upper bound for last band,
652 // so this check fails.
653 EXPECT_GE(maxFreq, centerFreq);
654 EXPECT_GE(centerFreq, minFreq);
655 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800656}
657
nelsonli3c12e582019-12-12 13:53:49 +0800658TEST_P(EqualizerAudioEffectHidlTest, GetBandForFrequency) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800659 description("Verify that Equalizer effect supports GetBandForFrequency correctly");
660 uint16_t numBands = 0;
661 getNumBands(&numBands);
662 ASSERT_GT(numBands, 0);
663 for (uint16_t i = 0; i < numBands; ++i) {
664 uint32_t freqs[3]{0, 0, 0};
665 getBandFrequencyRange(i, &freqs[0], &freqs[1], &freqs[2]);
666 // NXP legacy implementation reports "1" as upper bound for last band, some
667 // of the checks fail.
668 for (size_t j = 0; j < ARRAY_SIZE(freqs); ++j) {
669 if (j == 0) {
670 freqs[j]++;
671 } // Min frequency is an open interval.
672 Result retval = Result::NOT_INITIALIZED;
673 uint16_t actualBand = numBands + 1;
674 Return<void> ret = equalizer->getBandForFrequency(freqs[j], [&](Result r, uint16_t b) {
675 retval = r;
676 if (retval == Result::OK) {
677 actualBand = b;
678 }
679 });
680 EXPECT_TRUE(ret.isOk());
681 EXPECT_EQ(Result::OK, retval);
682 EXPECT_EQ(i, actualBand) << "Frequency: " << freqs[j];
683 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800684 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800685}
686
nelsonli3c12e582019-12-12 13:53:49 +0800687TEST_P(EqualizerAudioEffectHidlTest, GetPresetNames) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800688 description("Verify that Equalizer effect reports at least one preset");
689 size_t presetCount;
690 getPresetCount(&presetCount);
691 EXPECT_GT(presetCount, 0u);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800692}
693
nelsonli3c12e582019-12-12 13:53:49 +0800694TEST_P(EqualizerAudioEffectHidlTest, GetSetCurrentPreset) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800695 description("Verify that manipulating the current preset for Equalizer effect");
696 size_t presetCount;
697 getPresetCount(&presetCount);
698 ASSERT_GT(presetCount, 0u);
699 for (uint16_t i = 0; i < presetCount; ++i) {
700 Return<Result> ret = equalizer->setCurrentPreset(i);
701 EXPECT_TRUE(ret.isOk());
702 EXPECT_EQ(Result::OK, ret);
703 Result retval = Result::NOT_INITIALIZED;
704 uint16_t actualPreset = 0xffff;
705 Return<void> ret2 = equalizer->getCurrentPreset([&](Result r, uint16_t p) {
706 retval = r;
707 if (retval == Result::OK) {
708 actualPreset = p;
709 }
710 });
711 EXPECT_TRUE(ret2.isOk());
712 EXPECT_EQ(Result::OK, retval);
713 EXPECT_EQ(i, actualPreset);
714 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800715}
716
nelsonli3c12e582019-12-12 13:53:49 +0800717TEST_P(EqualizerAudioEffectHidlTest, GetSetAllProperties) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800718 description(
719 "Verify that setting band levels and presets works via Get / "
720 "SetAllProperties for Equalizer effect");
Kevin Rocard96d2cd92018-11-14 16:22:07 -0800721 using AllProperties =
Mikhail Naganov00a44c02018-12-14 14:31:45 -0800722 ::android::hardware::audio::effect::CPP_VERSION::IEqualizerEffect::AllProperties;
Kevin Rocard55b10612018-11-12 12:33:16 -0800723 uint16_t numBands = 0;
724 getNumBands(&numBands);
725 ASSERT_GT(numBands, 0);
726 AllProperties props;
727 props.bandLevels.resize(numBands);
728 for (size_t i = 0; i < numBands; ++i) {
729 props.bandLevels[i] = 0;
730 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800731
Kevin Rocard55b10612018-11-12 12:33:16 -0800732 AllProperties actualProps;
733 Result retval = Result::NOT_INITIALIZED;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800734
Kevin Rocard55b10612018-11-12 12:33:16 -0800735 // Verify setting of the band levels via properties.
736 props.curPreset = -1;
737 Return<Result> ret = equalizer->setAllProperties(props);
738 EXPECT_TRUE(ret.isOk());
739 EXPECT_EQ(Result::OK, ret);
740 Return<void> ret2 = equalizer->getAllProperties([&](Result r, AllProperties p) {
Mikhail Naganov9f289042017-02-23 08:39:36 -0800741 retval = r;
742 if (retval == Result::OK) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800743 actualProps = p;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800744 }
Kevin Rocard55b10612018-11-12 12:33:16 -0800745 });
746 EXPECT_TRUE(ret2.isOk());
747 EXPECT_EQ(Result::OK, retval);
748 EXPECT_EQ(props.bandLevels, actualProps.bandLevels);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800749
Kevin Rocard55b10612018-11-12 12:33:16 -0800750 // Verify setting of the current preset via properties.
751 props.curPreset = 0; // Assuming there is at least one preset.
752 ret = equalizer->setAllProperties(props);
753 EXPECT_TRUE(ret.isOk());
754 EXPECT_EQ(Result::OK, ret);
755 ret2 = equalizer->getAllProperties([&](Result r, AllProperties p) {
756 retval = r;
757 if (retval == Result::OK) {
758 actualProps = p;
759 }
760 });
761 EXPECT_TRUE(ret2.isOk());
762 EXPECT_EQ(Result::OK, retval);
763 EXPECT_EQ(props.curPreset, actualProps.curPreset);
Mikhail Naganov9f289042017-02-23 08:39:36 -0800764}
765
766// The main test class for Equalizer Audio Effect HIDL HAL.
767class LoudnessEnhancerAudioEffectHidlTest : public AudioEffectHidlTest {
Kevin Rocard55b10612018-11-12 12:33:16 -0800768 public:
769 void SetUp() override {
770 AudioEffectHidlTest::SetUp();
771 enhancer = ILoudnessEnhancerEffect::castFrom(effect);
772 ASSERT_NE(nullptr, enhancer.get());
773 }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800774
Kevin Rocard55b10612018-11-12 12:33:16 -0800775 protected:
776 Uuid getEffectType() override { return LOUDNESS_ENHANCER_EFFECT_TYPE; }
Mikhail Naganov9f289042017-02-23 08:39:36 -0800777
Kevin Rocard55b10612018-11-12 12:33:16 -0800778 sp<ILoudnessEnhancerEffect> enhancer;
Mikhail Naganov9f289042017-02-23 08:39:36 -0800779};
780
nelsonli3c12e582019-12-12 13:53:49 +0800781TEST_P(LoudnessEnhancerAudioEffectHidlTest, GetSetTargetGain) {
Kevin Rocard55b10612018-11-12 12:33:16 -0800782 description(
783 "Verify that manipulating the target gain works for Loudness Enhancer "
784 "effect");
785 const int32_t gain = 100;
786 Return<Result> ret = enhancer->setTargetGain(gain);
787 EXPECT_TRUE(ret.isOk());
788 EXPECT_EQ(Result::OK, ret);
789 int32_t actualGain = 0;
790 Result retval;
791 Return<void> ret2 = enhancer->getTargetGain([&](Result r, int32_t g) {
792 retval = r;
793 if (retval == Result::OK) {
794 actualGain = g;
795 }
796 });
797 EXPECT_TRUE(ret2.isOk());
798 EXPECT_EQ(Result::OK, retval);
799 EXPECT_EQ(gain, actualGain);
Mikhail Naganovbf393172016-11-11 16:24:50 -0800800}
Zhuoyao Zhang7dc6ce82018-02-08 12:44:27 -0800801
Mikhail Naganov315ce412019-10-23 16:46:54 -0700802INSTANTIATE_TEST_SUITE_P(
803 EffectsFactory, AudioEffectsFactoryHidlTest,
804 testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)),
805 android::hardware::PrintInstanceNameToString);
806INSTANTIATE_TEST_SUITE_P(
nelsonli3c12e582019-12-12 13:53:49 +0800807 Equalizer, AudioEffectHidlTest,
808 testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)),
809 android::hardware::PrintInstanceNameToString);
810INSTANTIATE_TEST_SUITE_P(
Mikhail Naganov315ce412019-10-23 16:46:54 -0700811 Equalizer, EqualizerAudioEffectHidlTest,
812 testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)),
813 android::hardware::PrintInstanceNameToString);
814INSTANTIATE_TEST_SUITE_P(
815 LoudnessEnhancer, LoudnessEnhancerAudioEffectHidlTest,
816 testing::ValuesIn(android::hardware::getAllHalInstanceNames(IEffectsFactory::descriptor)),
817 android::hardware::PrintInstanceNameToString);