libstagefright: Fix timestamp corruption during offload playback
-Timestamp gets corrupted at EOS of offload playback.
-This happens because the number of samples played returned from
HAL could be zero if playback has reached EOS and if compress
handle is invalid / closed.
-If HAL has posted EOS avoid the update of real time and media
time with the timestamp from HAL.
CRs-Fixed: 570368
Change-Id: I5ea75f4eda1df0c110bce780e50e3c8ae9b4cd85
diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp
index ec86a25..d5acd52 100644
--- a/media/libstagefright/AudioPlayer.cpp
+++ b/media/libstagefright/AudioPlayer.cpp
@@ -719,10 +719,13 @@
int64_t AudioPlayer::getRealTimeUs() {
Mutex::Autolock autoLock(mLock);
if (useOffload()) {
+ int64_t playPosition = 0;
if (mSeeking) {
return mSeekTimeUs;
}
- mPositionTimeRealUs = getOutputPlayPositionUs_l();
+ playPosition = getOutputPlayPositionUs_l();
+ if(!mReachedEOS)
+ mPositionTimeRealUs = playPosition;
return mPositionTimeRealUs;
}
@@ -777,12 +780,16 @@
Mutex::Autolock autoLock(mLock);
if (useOffload()) {
+ int64_t playPosition = 0;
if (mSeeking) {
return mSeekTimeUs;
}
- mPositionTimeRealUs = getOutputPlayPositionUs_l();
- ALOGV("getMediaTimeUs getOutputPlayPositionUs_l() mPositionTimeRealUs %lld",
- mPositionTimeRealUs);
+
+ playPosition = getOutputPlayPositionUs_l();
+ if (!mReachedEOS)
+ mPositionTimeRealUs = playPosition;
+ ALOGV("getMediaTimeUs getOutputPlayPositionUs_l() playPosition = %lld,\
+ mPositionTimeRealUs %lld", playPosition, mPositionTimeRealUs);
return mPositionTimeRealUs;
}
@@ -805,7 +812,10 @@
Mutex::Autolock autoLock(mLock);
if (useOffload()) {
- mPositionTimeRealUs = getOutputPlayPositionUs_l();
+ int64_t playPosition = 0;
+ playPosition = getOutputPlayPositionUs_l();
+ if(!mReachedEOS)
+ mPositionTimeRealUs = playPosition;
*realtime_us = mPositionTimeRealUs;
*mediatime_us = mPositionTimeRealUs;
} else {