Fix AudioTrack retrograde getPosition when restoring tracks

mReleased represents the number of frames written to the
track, but was cleared on start() causing a mismatch if the
client wrote to the track before starting.  Moved the clearing
to entering the STATE_STOPPED or STATE_FLUSHED state.

Bug: 18017947
Bug: 18022276
Change-Id: I3788c98c4c3c4d9cc004378432797b3f3138e22e
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 8e0704f..0a89fbb 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -464,7 +464,6 @@
     if (previousState == STATE_STOPPED || previousState == STATE_FLUSHED) {
         // reset current position as seen by client to 0
         mPosition = 0;
-        mReleased = 0;
         // For offloaded tracks, we don't know if the hardware counters are really zero here,
         // since the flush is asynchronous and stop may not fully drain.
         // We save the time when the track is started to later verify whether
@@ -529,6 +528,7 @@
         mState = STATE_STOPPING;
     } else {
         mState = STATE_STOPPED;
+        mReleased = 0;
     }
 
     mProxy->interrupt();
@@ -585,6 +585,7 @@
     mRefreshRemaining = true;
 
     mState = STATE_FLUSHED;
+    mReleased = 0;
     if (isOffloaded_l()) {
         mProxy->interrupt();
     }
@@ -1625,6 +1626,7 @@
                 waitStreamEnd = mState == STATE_STOPPING;
                 if (waitStreamEnd) {
                     mState = STATE_STOPPED;
+                    mReleased = 0;
                 }
             }
             if (waitStreamEnd && status != DEAD_OBJECT) {
@@ -1873,6 +1875,7 @@
     if (result != NO_ERROR) {
         ALOGW("restoreTrack_l() failed status %d", result);
         mState = STATE_STOPPED;
+        mReleased = 0;
     }
 
     return result;