summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/AudioPlayer.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-02-03 10:23:26 -0800
committerAndreas Huber <andih@google.com>2010-02-03 10:23:26 -0800
commitad6516d9247bd0a76a393810b041c3e4094f0e36 (patch)
tree9ddbeb15c8c205420a6deb72d1a8ea01c1db7f32 /media/libstagefright/AudioPlayer.cpp
parent7b7a83a6840d34ab39f1a3c8ab81946bb4404c14 (diff)
downloadframeworks_av-ad6516d9247bd0a76a393810b041c3e4094f0e36.zip
frameworks_av-ad6516d9247bd0a76a393810b041c3e4094f0e36.tar.gz
frameworks_av-ad6516d9247bd0a76a393810b041c3e4094f0e36.tar.bz2
AudioPlayer didn't properly account for the latency when calculating the current media time.
related-to-bug: 2414900
Diffstat (limited to 'media/libstagefright/AudioPlayer.cpp')
-rw-r--r--media/libstagefright/AudioPlayer.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp
index efe7ebb..01578c1 100644
--- a/media/libstagefright/AudioPlayer.cpp
+++ b/media/libstagefright/AudioPlayer.cpp
@@ -249,7 +249,8 @@ void AudioPlayer::fillBuffer(void *data, size_t size) {
kKeyTime, &mPositionTimeMediaUs));
mPositionTimeRealUs =
- ((mNumFramesPlayed + size_done / mFrameSize) * 1000000)
+ -mLatencyUs
+ + ((mNumFramesPlayed + size_done / mFrameSize) * 1000000)
/ mSampleRate;
LOGV("buffer->size() = %d, "
@@ -297,6 +298,10 @@ int64_t AudioPlayer::getRealTimeUsLocked() const {
int64_t AudioPlayer::getMediaTimeUs() {
Mutex::Autolock autoLock(mLock);
+ if (mPositionTimeMediaUs < 0 || mPositionTimeRealUs < 0) {
+ return 0;
+ }
+
return mPositionTimeMediaUs + (getRealTimeUsLocked() - mPositionTimeRealUs);
}
@@ -307,7 +312,7 @@ bool AudioPlayer::getMediaTimeMapping(
*realtime_us = mPositionTimeRealUs;
*mediatime_us = mPositionTimeMediaUs;
- return mPositionTimeRealUs != -1 || mPositionTimeMediaUs != -1;
+ return mPositionTimeRealUs != -1 && mPositionTimeMediaUs != -1;
}
status_t AudioPlayer::seekTo(int64_t time_us) {