diff options
author | Eric Laurent <elaurent@google.com> | 2012-03-05 17:27:11 -0800 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2012-03-05 17:27:11 -0800 |
commit | db354e58e65592777aa17caa47933e14838b8b35 (patch) | |
tree | 4a04ca6b47a4853f9b397a19b3f4dc84675c8fa7 /media/libstagefright/AudioPlayer.cpp | |
parent | d8d6185c978c9b27ca69e7791785e0983ed9e8b8 (diff) | |
download | frameworks_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.cpp | 6 |
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)); |