diff options
author | Mikhail Naganov <mnaganov@google.com> | 2020-08-11 23:23:16 +0000 |
---|---|---|
committer | Mikhail Naganov <mnaganov@google.com> | 2020-09-28 23:18:37 +0000 |
commit | c9e1607de4c5f4854bc58ee9fdf45d16010cc476 (patch) | |
tree | f51282daf2e19340923532aa5027845e31dadabf /audio/common/7.0/example/EqualizerEffect.cpp | |
parent | 108e702dc736e40a371619af91c47a059daf095c (diff) |
audio: Add example HAL implementation
This is partial implementation of the example V7.0 audio HAL
which passes VTS tests. Note that the 'core' part
of the HAL (IDevice/IStream) isn't implemented yet.
It passes VTS because it doesn't provide any devices
(modules) and the audio HAL isn't the 'default' instance.
Bug: 142480271
Test: atest VtsHalAudioV7_0TargetTest
atest VtsHalAudioEffectV7_0TargetTest
Change-Id: Ie3dd62c5db1cdb5534df4dd7f326c4c8776bf3c4
Diffstat (limited to 'audio/common/7.0/example/EqualizerEffect.cpp')
-rw-r--r-- | audio/common/7.0/example/EqualizerEffect.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/audio/common/7.0/example/EqualizerEffect.cpp b/audio/common/7.0/example/EqualizerEffect.cpp new file mode 100644 index 0000000000..c93c5a90fb --- /dev/null +++ b/audio/common/7.0/example/EqualizerEffect.cpp @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <limits> + +#define LOG_TAG "EffectsFactory7.0" +#include <log/log.h> + +#include "EqualizerEffect.h" + +using ::android::hardware::hidl_string; +using ::android::hardware::hidl_vec; +using ::android::hardware::Return; +using ::android::hardware::Void; +using namespace ::android::hardware::audio::common::V7_0; + +namespace android::hardware::audio::effect::V7_0::implementation { + +const EffectDescriptor& EqualizerEffect::getDescriptor() { + // Note: for VTS tests only 'type' and 'uuid' fields are required. + // The actual implementation must provide meaningful values + // for all fields of the descriptor. + static const EffectDescriptor descriptor = { + .type = + {// Same UUID as AudioEffect.EFFECT_TYPE_EQUALIZER in Java. + 0x0bed4300, 0xddd6, 0x11db, 0x8f34, + std::array<uint8_t, 6>{{0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}}, + .uuid = {0, 0, 0, 1, std::array<uint8_t, 6>{{0, 0, 0, 0, 0, 0}}}}; + return descriptor; +} + +EqualizerEffect::EqualizerEffect() : mEffect(new Effect(getDescriptor())) { + mProperties.bandLevels.resize(kNumBands); +} + +Return<void> EqualizerEffect::getNumBands(getNumBands_cb _hidl_cb) { + _hidl_cb(Result::OK, kNumBands); + return Void(); +} + +Return<void> EqualizerEffect::getLevelRange(getLevelRange_cb _hidl_cb) { + _hidl_cb(Result::OK, std::numeric_limits<int16_t>::min(), std::numeric_limits<int16_t>::max()); + return Void(); +} + +Return<Result> EqualizerEffect::setBandLevel(uint16_t band, int16_t level) { + if (band < kNumBands) { + mProperties.bandLevels[band] = level; + return Result::OK; + } else { + return Result::INVALID_ARGUMENTS; + } +} + +Return<void> EqualizerEffect::getBandLevel(uint16_t band, getBandLevel_cb _hidl_cb) { + if (band < kNumBands) { + _hidl_cb(Result::OK, mProperties.bandLevels[band]); + } else { + _hidl_cb(Result::INVALID_ARGUMENTS, 0); + } + return Void(); +} + +Return<void> EqualizerEffect::getBandCenterFrequency(uint16_t band, + getBandCenterFrequency_cb _hidl_cb) { + (void)band; + _hidl_cb(Result::OK, 0); + return Void(); +} + +Return<void> EqualizerEffect::getBandFrequencyRange(uint16_t band, + getBandFrequencyRange_cb _hidl_cb) { + (void)band; + _hidl_cb(Result::OK, 0, 1); + return Void(); +} + +Return<void> EqualizerEffect::getBandForFrequency(uint32_t freq, getBandForFrequency_cb _hidl_cb) { + (void)freq; + _hidl_cb(Result::OK, 0); + return Void(); +} + +Return<void> EqualizerEffect::getPresetNames(getPresetNames_cb _hidl_cb) { + hidl_vec<hidl_string> presetNames; + presetNames.resize(kNumPresets); + presetNames[0] = "default"; + _hidl_cb(Result::OK, presetNames); + return Void(); +} + +Return<Result> EqualizerEffect::setCurrentPreset(uint16_t preset) { + if (preset < kNumPresets) { + mProperties.curPreset = preset; + return Result::OK; + } else { + return Result::INVALID_ARGUMENTS; + } +} + +Return<void> EqualizerEffect::getCurrentPreset(getCurrentPreset_cb _hidl_cb) { + _hidl_cb(Result::OK, mProperties.curPreset); + return Void(); +} + +Return<Result> EqualizerEffect::setAllProperties( + const IEqualizerEffect::AllProperties& properties) { + mProperties = properties; + return Result::OK; +} + +Return<void> EqualizerEffect::getAllProperties(getAllProperties_cb _hidl_cb) { + _hidl_cb(Result::OK, mProperties); + return Void(); +} + +} // namespace android::hardware::audio::effect::V7_0::implementation |