alsa_sound: add support for low latency playback and recording
b/6865729
- Add deep buffer output in config file
- Configure deep buffer output if flag
AUDIO_OUTPUT_FLAG_DEEP_BUFFER is set,
otherwise configure low latency output.
- Add support for low latency recording
- Enable low latency recording path with
system property
- For 2 buffers and 2048 bytes, reduce
PLAYBACK_LOW_LATENCY to 21.5 ms
Change-Id: I3c0d54fa473fe89df5a3924de483f16975f4000e
Signed-off-by: Iliyan Malchev <malchev@google.com>
diff --git a/alsa_sound/AudioStreamInALSA.cpp b/alsa_sound/AudioStreamInALSA.cpp
index bf16915..e63d606 100644
--- a/alsa_sound/AudioStreamInALSA.cpp
+++ b/alsa_sound/AudioStreamInALSA.cpp
@@ -178,8 +178,14 @@
#endif
} else if(!strcmp(mHandle->useCase, SND_USE_CASE_MOD_PLAY_VOIP)) {
strlcpy(mHandle->useCase, SND_USE_CASE_MOD_PLAY_VOIP, sizeof(mHandle->useCase));
- }else {
- strlcpy(mHandle->useCase, SND_USE_CASE_MOD_CAPTURE_MUSIC, sizeof(mHandle->useCase));
+ } else {
+ char value[128];
+ property_get("persist.audio.lowlatency.rec",value,"0");
+ if (!strcmp("true", value)) {
+ strlcpy(mHandle->useCase, SND_USE_CASE_MOD_CAPTURE_LOWLATENCY_MUSIC, sizeof(mHandle->useCase));
+ } else {
+ strlcpy(mHandle->useCase, SND_USE_CASE_MOD_CAPTURE_MUSIC, sizeof(mHandle->useCase));
+ }
}
} else {
if ((mHandle->devices == AudioSystem::DEVICE_IN_VOICE_CALL) &&
@@ -222,7 +228,13 @@
} else if(!strcmp(mHandle->useCase, SND_USE_CASE_VERB_IP_VOICECALL)){
strlcpy(mHandle->useCase, SND_USE_CASE_VERB_IP_VOICECALL, sizeof(mHandle->useCase));
} else {
- strlcpy(mHandle->useCase, SND_USE_CASE_VERB_HIFI_REC, sizeof(mHandle->useCase));
+ char value[128];
+ property_get("persist.audio.lowlatency.rec",value,"0");
+ if (!strcmp("true", value)) {
+ strlcpy(mHandle->useCase, SND_USE_CASE_VERB_HIFI_LOWLATENCY_REC, sizeof(mHandle->useCase));
+ } else {
+ strlcpy(mHandle->useCase, SND_USE_CASE_VERB_HIFI_REC, sizeof(mHandle->useCase));
+ }
}
}
free(use_case);
@@ -250,6 +262,7 @@
}
}
if (!strcmp(mHandle->useCase, SND_USE_CASE_VERB_HIFI_REC) ||
+ !strcmp(mHandle->useCase, SND_USE_CASE_VERB_HIFI_LOWLATENCY_REC) ||
!strcmp(mHandle->useCase, SND_USE_CASE_VERB_FM_REC) ||
!strcmp(mHandle->useCase, SND_USE_CASE_VERB_IP_VOICECALL) ||
!strcmp(mHandle->useCase, SND_USE_CASE_VERB_FM_A2DP_REC) ||