audioflinger: implement getTimestamp() for offloaded tracks

Bug: 9587132.
Change-Id: Ie9d5f4cca96306d08bc9a2dbd6edd8953096702d
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index 57aad1e..ccba014 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -757,19 +757,23 @@
     }
     Mutex::Autolock _l(thread->mLock);
     PlaybackThread *playbackThread = (PlaybackThread *)thread.get();
-    if (!playbackThread->mLatchQValid) {
-        return INVALID_OPERATION;
+    if (!isOffloaded()) {
+        if (!playbackThread->mLatchQValid) {
+            return INVALID_OPERATION;
+        }
+        uint32_t unpresentedFrames =
+                ((int64_t) playbackThread->mLatchQ.mUnpresentedFrames * mSampleRate) /
+                playbackThread->mSampleRate;
+        uint32_t framesWritten = mAudioTrackServerProxy->framesReleased();
+        if (framesWritten < unpresentedFrames) {
+            return INVALID_OPERATION;
+        }
+        timestamp.mPosition = framesWritten - unpresentedFrames;
+        timestamp.mTime = playbackThread->mLatchQ.mTimestamp.mTime;
+        return NO_ERROR;
     }
-    uint32_t unpresentedFrames =
-            ((int64_t) playbackThread->mLatchQ.mUnpresentedFrames * mSampleRate) /
-            playbackThread->mSampleRate;
-    uint32_t framesWritten = mAudioTrackServerProxy->framesReleased();
-    if (framesWritten < unpresentedFrames) {
-        return INVALID_OPERATION;
-    }
-    timestamp.mPosition = framesWritten - unpresentedFrames;
-    timestamp.mTime = playbackThread->mLatchQ.mTimestamp.mTime;
-    return NO_ERROR;
+
+    return playbackThread->getTimestamp_l(timestamp);
 }
 
 status_t AudioFlinger::PlaybackThread::Track::attachAuxEffect(int EffectId)