summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShunkai Yao <yaoshunkai@google.com>2024-02-13 02:15:07 +0000
committerShunkai Yao <yaoshunkai@google.com>2024-02-13 02:15:07 +0000
commit7a766c881c7aca892f3fc5f08fdabba524a3eabe (patch)
treef6973d0d2bb3484bb02b95c43b7549fce5de5766
parente0283c632d005ebe1cae13eeb4a165ed46fb3dc0 (diff)
downloadmedia-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.h36
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;
}