Add new AudioInputFlags to AIDL conversion
- Add HOTWORD_TAP to AIDL conversion utilities
- Add HW_LOOKBACK to AIDL conversion utilities
- Add flags as must match when picking profiles in APM
Bug: 237449755
Test: Compiles
Change-Id: I79349813b966f025b697db11235eb8a500ddfb31
diff --git a/media/audioaidlconversion/AidlConversionCppNdk.cpp b/media/audioaidlconversion/AidlConversionCppNdk.cpp
index ea1ec0c..7580724 100644
--- a/media/audioaidlconversion/AidlConversionCppNdk.cpp
+++ b/media/audioaidlconversion/AidlConversionCppNdk.cpp
@@ -1164,6 +1164,10 @@
return AUDIO_INPUT_FLAG_DIRECT;
case AudioInputFlags::ULTRASOUND:
return AUDIO_INPUT_FLAG_ULTRASOUND;
+ case AudioInputFlags::HOTWORD_TAP:
+ return AUDIO_INPUT_FLAG_HOTWORD_TAP;
+ case AudioInputFlags::HW_LOOKBACK:
+ return AUDIO_INPUT_FLAG_HW_LOOKBACK;
}
return unexpected(BAD_VALUE);
}
@@ -1191,6 +1195,10 @@
return AudioInputFlags::DIRECT;
case AUDIO_INPUT_FLAG_ULTRASOUND:
return AudioInputFlags::ULTRASOUND;
+ case AUDIO_INPUT_FLAG_HOTWORD_TAP:
+ return AudioInputFlags::HOTWORD_TAP;
+ case AUDIO_INPUT_FLAG_HW_LOOKBACK:
+ return AudioInputFlags::HW_LOOKBACK;
}
return unexpected(BAD_VALUE);
}
@@ -2127,4 +2135,4 @@
#if defined(BACKEND_NDK)
} // aidl
-#endif
\ No newline at end of file
+#endif
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index 1d4eb1e..23be0c4 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -34,6 +34,7 @@
#include <map>
#include <math.h>
#include <set>
+#include <type_traits>
#include <unordered_set>
#include <vector>
@@ -7397,8 +7398,11 @@
// TODO: perhaps isCompatibleProfile should return a "matching" score so we can return
// the best matching profile, not the first one.
- const audio_input_flags_t mustMatchFlag = AUDIO_INPUT_FLAG_MMAP_NOIRQ;
- const audio_input_flags_t oriFlags = flags;
+ using underlying_input_flag_t = std::underlying_type_t<audio_input_flags_t>;
+ const underlying_input_flag_t mustMatchFlag = AUDIO_INPUT_FLAG_MMAP_NOIRQ |
+ AUDIO_INPUT_FLAG_HOTWORD_TAP | AUDIO_INPUT_FLAG_HW_LOOKBACK;
+
+ const underlying_input_flag_t oriFlags = flags;
for (;;) {
sp<IOProfile> firstInexact = nullptr;
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 5c32209..82a13d6 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -667,7 +667,9 @@
return binderStatusFromStatusT(PERMISSION_DENIED);
}
- if (((flags & AUDIO_INPUT_FLAG_HW_HOTWORD) != 0)
+ if (((flags & (AUDIO_INPUT_FLAG_HW_HOTWORD |
+ AUDIO_INPUT_FLAG_HOTWORD_TAP |
+ AUDIO_INPUT_FLAG_HW_LOOKBACK)) != 0)
&& !canCaptureHotword) {
ALOGE("%s: permission denied: hotword mode not allowed"
" for uid %d pid %d", __func__, attributionSource.uid, attributionSource.pid);