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() {