summaryrefslogtreecommitdiffstats
path: root/services/audioflinger/Threads.cpp
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2013-08-29 17:12:45 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-08-29 17:12:45 -0700
commitf557872b594d15599bdb65efd91eb5adeb1d0840 (patch)
tree8df16a0c49bac71163035d11562e06bcc12a2490 /services/audioflinger/Threads.cpp
parent30c296c153447f5c2bb5251928bf4d3c4e28e552 (diff)
parent908d3c09ca7f2ccb280aa5dc8d876099ff9a9d0f (diff)
downloadframeworks_av-f557872b594d15599bdb65efd91eb5adeb1d0840.zip
frameworks_av-f557872b594d15599bdb65efd91eb5adeb1d0840.tar.gz
frameworks_av-f557872b594d15599bdb65efd91eb5adeb1d0840.tar.bz2
am 908d3c09: am 51ec03c2: Merge "Implement Track::getTimestamp()" into klp-dev
* commit '908d3c09ca7f2ccb280aa5dc8d876099ff9a9d0f': Implement Track::getTimestamp()
Diffstat (limited to 'services/audioflinger/Threads.cpp')
-rw-r--r--services/audioflinger/Threads.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 8bc70ba..99d0ac2 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -958,7 +958,9 @@ AudioFlinger::PlaybackThread::PlaybackThread(const sp<AudioFlinger>& audioFlinge
mDraining(false),
mScreenState(AudioFlinger::mScreenState),
// index 0 is reserved for normal mixer's submix
- mFastTrackAvailMask(((1 << FastMixerState::kMaxFastTracks) - 1) & ~1)
+ mFastTrackAvailMask(((1 << FastMixerState::kMaxFastTracks) - 1) & ~1),
+ // mLatchD, mLatchQ,
+ mLatchDValid(false), mLatchQValid(false)
{
snprintf(mName, kNameLength, "AudioOut_%X", id);
mNBLogWriter = audioFlinger->newWriter_l(kLogSize, mName);
@@ -1826,6 +1828,14 @@ ssize_t AudioFlinger::PlaybackThread::threadLoop_write()
} else {
bytesWritten = framesWritten;
}
+ status_t status = INVALID_OPERATION; // mLatchD.mTimestamp is invalid
+ if (status == NO_ERROR) {
+ size_t totalFramesWritten = mNormalSink->framesWritten();
+ if (totalFramesWritten >= mLatchD.mTimestamp.mPosition) {
+ mLatchD.mUnpresentedFrames = totalFramesWritten - mLatchD.mTimestamp.mPosition;
+ mLatchDValid = true;
+ }
+ }
// otherwise use the HAL / AudioStreamOut directly
} else {
// Direct output and offload threads
@@ -2104,6 +2114,12 @@ bool AudioFlinger::PlaybackThread::threadLoop()
logString = NULL;
}
+ if (mLatchDValid) {
+ mLatchQ = mLatchD;
+ mLatchDValid = false;
+ mLatchQValid = true;
+ }
+
if (checkForNewParameters_l()) {
cacheParameters_l();
}