NuPlayerDriver: include lapsed time when reporting current position.
Bug: 17031731
Change-Id: I01962ee9194bdaa9e8ed1a51abbf365733be3c85
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
index 8a63cfe..c0091bf 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
@@ -36,6 +36,8 @@
mAsyncResult(UNKNOWN_ERROR),
mDurationUs(-1),
mPositionUs(-1),
+ mNotifyTimeRealUs(0),
+ mPauseStartedTimeUs(0),
mNumFramesTotal(0),
mNumFramesDropped(0),
mLooper(new ALooper),
@@ -244,6 +246,7 @@
case STATE_STOPPED_AND_PREPARED:
{
mPlayer->resume();
+ mPositionUs -= ALooper::GetNowUs() - mPauseStartedTimeUs;
break;
}
@@ -278,6 +281,7 @@
default:
return INVALID_OPERATION;
}
+ mPauseStartedTimeUs = ALooper::GetNowUs();
return OK;
}
@@ -299,6 +303,7 @@
return INVALID_OPERATION;
}
+ mPauseStartedTimeUs = ALooper::GetNowUs();
mState = STATE_PAUSED;
return OK;
@@ -347,7 +352,10 @@
if (mPositionUs < 0) {
*msec = 0;
} else {
- *msec = (mPositionUs + 500ll) / 1000;
+ int64_t nowUs =
+ (mState != STATE_RUNNING ?
+ mPauseStartedTimeUs : ALooper::GetNowUs());
+ *msec = (mPositionUs + nowUs - mNotifyTimeRealUs + 500ll) / 1000;
}
return OK;
@@ -522,6 +530,7 @@
void NuPlayerDriver::notifyPosition(int64_t positionUs) {
Mutex::Autolock autoLock(mLock);
mPositionUs = positionUs;
+ mNotifyTimeRealUs = ALooper::GetNowUs();
}
void NuPlayerDriver::notifySeekComplete() {