diff options
author | Shunkai Yao <yaoshunkai@google.com> | 2024-02-15 23:42:56 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-02-15 23:42:56 +0000 |
commit | 76167db6a857119b7c4746f9a92827290f81bfa2 (patch) | |
tree | 9a0342742b0cd7b578da0efdf454a1207f3914cf | |
parent | 745cbb066dbd28882354f4488e25df9618f9b112 (diff) | |
parent | 7a766c881c7aca892f3fc5f08fdabba524a3eabe (diff) | |
download | media-76167db6a857119b7c4746f9a92827290f81bfa2.tar.gz |
Merge "Add getRange util from effect capability definition" into main
-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; } |