Fix the AudioRecord Latency in Audio Input MIO.
Calculate the correct latency based on Opencore BufferSize and KernelBufferSize.
diff --git a/android/author/android_audio_input.cpp b/android/author/android_audio_input.cpp
index 27d647a..27bb681 100644
--- a/android/author/android_audio_input.cpp
+++ b/android/author/android_audio_input.cpp
@@ -1175,8 +1175,22 @@
// The difference in 2 will give the actual time
// of first audio capture.
uint32 systime = (uint32) (systemTime() / 1000000L);
- // TODO: add audio hardware input latency here
- uint32 recordLatency = record->latency();
+ uint32 recordLatency = 0;
+
+ // Get the latency now
+ size_t kernelBufferSize = 0;
+ status_t ret = AudioSystem::getInputBufferSize(iAudioSamplingRate,
+ AudioSystem::PCM_16_BIT,
+ iAudioNumChannels, &kernelBufferSize);
+
+ if (ret == NO_ERROR) {
+ uint32 readBufferFrames = kBufferSize/2/iAudioNumChannels;
+ uint32 kernelFrames = kernelBufferSize/2/iAudioNumChannels;
+ recordLatency = ((readBufferFrames - 1)/kernelFrames + 1) * (kernelFrames*1000)/iAudioSamplingRate;
+ } else {
+ LOGE("AudioSystem::getInputBufferSize returned error");
+ }
+
iFirstFrameTs = systime - recordLatency;
LOGV("First Audio Frame received systime %d, recordLatency %d, iFirstFrameTs %d", systime, recordLatency, iFirstFrameTs);
}