audio-hal: Use audio stream to get delay latency
An incremental change on top of Change-Id: Icb9babf7e6a63c1f3d1af73c42ef21fb8b7d211b
This resolved the perf issue of audio playback.
Change-Id: I7f50813147c4568d9e12dd16c486adc3fc4abe90
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 0594b7b..987e388 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -4418,10 +4418,8 @@
/* This adjustment accounts for buffering after app processor.
* It is based on estimated DSP latency per use case, rather than exact.
*/
- pthread_mutex_lock(&adev->lock);
- dsp_frames = platform_render_latency(out->dev, out->usecase) *
+ dsp_frames = platform_render_latency(out) *
out->sample_rate / 1000000LL;
- pthread_mutex_unlock(&adev->lock);
pthread_mutex_lock(&out->position_query_lock);
written_frames = out->written /
@@ -5386,9 +5384,7 @@
1000) / (out->config.rate);
else
period_ms = 0;
- pthread_mutex_lock(&adev->lock);
- latency = period_ms + platform_render_latency(out->dev, out->usecase)/1000;
- pthread_mutex_unlock(&adev->lock);
+ latency = period_ms + platform_render_latency(out) / 1000;
} else {
latency = (out->config.period_count * out->config.period_size * 1000) /
(out->config.rate);
@@ -6324,10 +6320,8 @@
// This adjustment accounts for buffering after app processor.
// It is based on estimated DSP latency per use case, rather than exact.
- pthread_mutex_lock(&adev->lock);
- frames_temp = platform_render_latency(out->dev, out->usecase) *
+ frames_temp = platform_render_latency(out) *
out->sample_rate / 1000000LL;
- pthread_mutex_unlock(&adev->lock);
if (signed_frames >= frames_temp)
signed_frames -= frames_temp;
@@ -7225,10 +7219,8 @@
unsigned int avail;
if (pcm_get_htimestamp(in->pcm, &avail, ×tamp) == 0) {
*frames = in->frames_read + avail;
- pthread_mutex_lock(&adev->lock);
*time = timestamp.tv_sec * 1000000000LL + timestamp.tv_nsec
- - platform_capture_latency(in->dev, in->usecase) * 1000LL;
- pthread_mutex_unlock(&adev->lock);
+ - platform_capture_latency(in) * 1000LL;
ret = 0;
}
}