diff options
author | Shunkai Yao <yaoshunkai@google.com> | 2024-02-13 02:15:07 +0000 |
---|---|---|
committer | Shunkai Yao <yaoshunkai@google.com> | 2024-02-13 02:15:07 +0000 |
commit | 7a766c881c7aca892f3fc5f08fdabba524a3eabe (patch) | |
tree | f6973d0d2bb3484bb02b95c43b7549fce5de5766 | |
parent | e0283c632d005ebe1cae13eeb4a165ed46fb3dc0 (diff) | |
download | media-7a766c881c7aca892f3fc5f08fdabba524a3eabe.tar.gz |
Add getRange util from effect capability definition
Bug: 273373363
Test: atest EffectsFactoryHalInterfaceTest
Change-Id: I69ea86869086ab33a92e387291117b400ad1db8d
-rw-r--r-- | audio/include/system/audio_effects/aidl_effects_utils.h | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/audio/include/system/audio_effects/aidl_effects_utils.h b/audio/include/system/audio_effects/aidl_effects_utils.h index e6583a18..bf8bec70 100644 --- a/audio/include/system/audio_effects/aidl_effects_utils.h +++ b/audio/include/system/audio_effects/aidl_effects_utils.h @@ -49,7 +49,7 @@ static constexpr uint32_t kEventFlagDataMqUpdate = 0x1 << 1; * so this method return true. */ template <typename T, typename R> -bool inRange(const T& target, const R& ranges) { +static inline bool inRange(const T& target, const R& ranges) { for (const auto& r : ranges) { if (target.getTag() == r.min.getTag() && target.getTag() == r.max.getTag() && @@ -61,16 +61,36 @@ bool inRange(const T& target, const R& ranges) { } template <typename Range::Tag rangeTag, typename T> -bool inRange(const T& target, const Capability& cap) { +static inline bool inRange(const T& target, const Capability& cap) { if (cap.range.getTag() == rangeTag) { - const auto& ranges = cap.range.template get<rangeTag>(); - return inRange(target, ranges); + const auto& ranges = cap.range.template get<rangeTag>(); + return inRange(target, ranges); } return true; } +/** + * Return the range pair (as defined in aidl::android::hardware::audio::effect::Range) of a + * parameter. + */ +template <typename Range::Tag RangeTag, typename R, typename T> +static inline std::optional<R> getRange(const Capability& cap, T tag) { + if (cap.range.getTag() != RangeTag) { + return std::nullopt; + } + + const auto& ranges = cap.range.template get<RangeTag>(); + for (const auto& r : ranges) { + if (r.min.getTag() == tag && r.max.getTag() == tag) { + return r; + } + } + + return std::nullopt; +} + template <typename T, typename R> -bool isRangeValid(const T& tag, const R& ranges) { +static inline bool isRangeValid(const T& tag, const R& ranges) { for (const auto& r : ranges) { if (tag == r.min.getTag() && tag == r.max.getTag()) { return r.min <= r.max; @@ -81,10 +101,10 @@ bool isRangeValid(const T& tag, const R& ranges) { } template <typename Range::Tag rangeTag, typename T> -bool isRangeValid(const T& paramTag, const Capability& cap) { +static inline bool isRangeValid(const T& paramTag, const Capability& cap) { if (cap.range.getTag() == rangeTag) { - const auto& ranges = cap.range.template get<rangeTag>(); - return isRangeValid(paramTag, ranges); + const auto& ranges = cap.range.template get<rangeTag>(); + return isRangeValid(paramTag, ranges); } return true; } |