audiolfinger: implement latency mode control in spatializer mixer
Add audio HAL stream latency mode control logic to
Spatialier mixer thread:
- Query supported latency modes from HAL stream and register mode
change callback: when mode changes either from callback or routing
change, notify Spatializer effect client via IAudioFlingerClient
interface.
- Compute requested latency mode based on the requested mode and
active spatialized tracks and request it from HAL stream.
Bug: 218273231
Test: make
Change-Id: Ifc4445e1ce554631dbcffaf478fbe8a33ec1b5ab
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 01ba2df..8ae06d0 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -1587,21 +1587,29 @@
}
status_t AudioFlinger::setRequestedLatencyMode(
- audio_io_handle_t output, audio_latency_mode_t mode __unused) {
+ audio_io_handle_t output, audio_latency_mode_t mode) {
if (output == AUDIO_IO_HANDLE_NONE) {
return BAD_VALUE;
}
- //TODO b/218273231: implement
- return INVALID_OPERATION;
+ AutoMutex lock(mLock);
+ PlaybackThread *thread = checkPlaybackThread_l(output);
+ if (thread == nullptr) {
+ return BAD_VALUE;
+ }
+ return thread->setRequestedLatencyMode(mode);
}
status_t AudioFlinger::getSupportedLatencyModes(audio_io_handle_t output,
- std::vector<audio_latency_mode_t>* modes __unused) {
+ std::vector<audio_latency_mode_t>* modes) {
if (output == AUDIO_IO_HANDLE_NONE) {
return BAD_VALUE;
}
- //TODO b/218273231: implement
- return INVALID_OPERATION;
+ AutoMutex lock(mLock);
+ PlaybackThread *thread = checkPlaybackThread_l(output);
+ if (thread == nullptr) {
+ return BAD_VALUE;
+ }
+ return thread->getSupportedLatencyModes(modes);
}
status_t AudioFlinger::setStreamMute(audio_stream_type_t stream, bool muted)