summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/AudioPlayer.cpp
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2012-03-05 17:27:11 -0800
committerEric Laurent <elaurent@google.com>2012-03-05 17:27:11 -0800
commitdb354e58e65592777aa17caa47933e14838b8b35 (patch)
tree4a04ca6b47a4853f9b397a19b3f4dc84675c8fa7 /media/libstagefright/AudioPlayer.cpp
parentd8d6185c978c9b27ca69e7791785e0983ed9e8b8 (diff)
downloadframeworks_av-db354e58e65592777aa17caa47933e14838b8b35.zip
frameworks_av-db354e58e65592777aa17caa47933e14838b8b35.tar.gz
frameworks_av-db354e58e65592777aa17caa47933e14838b8b35.tar.bz2
MediaPlayerService: fix AudioSink latency
The AudioSink latency is currently cached when the associated AudioTrack is created. However, the AudioTrack latency can change if the AudioTrack is moved from one output stream to another. The AudioPlayer must also periodically update its view of the latency as it is needed to compensate the real audio time used for A/V sync. This fixes an A/V sync problem seen when switching A2DP on and off while playing a video. Change-Id: I28b24049ca114e1af3e24791dcc900f463536ba4
Diffstat (limited to 'media/libstagefright/AudioPlayer.cpp')
-rw-r--r--media/libstagefright/AudioPlayer.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp
index df27566..175d6b5 100644
--- a/media/libstagefright/AudioPlayer.cpp
+++ b/media/libstagefright/AudioPlayer.cpp
@@ -418,6 +418,12 @@ size_t AudioPlayer::fillBuffer(void *data, size_t size) {
break;
}
+ if (mAudioSink != NULL) {
+ mLatencyUs = (int64_t)mAudioSink->latency() * 1000;
+ } else {
+ mLatencyUs = (int64_t)mAudioTrack->latency() * 1000;
+ }
+
CHECK(mInputBuffer->meta_data()->findInt64(
kKeyTime, &mPositionTimeMediaUs));