diff options
author | Phil Burk <philburk@google.com> | 2015-07-07 16:46:25 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-07-07 16:46:26 +0000 |
commit | 2fe714fa470ef787b218a7797a9ba4fa309db6bd (patch) | |
tree | 0c48805e5bed9a318450f5b66f3bf815121a0c6c | |
parent | 4aff170d78d5cc839efaf4548f9dbd98fec67b3f (diff) | |
parent | c73381fd51ed430361c5f3c8b6f43b425802b3c7 (diff) | |
download | fugu-2fe714fa470ef787b218a7797a9ba4fa309db6bd.tar.gz |
Merge "FuguAudio: do not reset frame position on standby" into mnc-dev
-rw-r--r-- | audio_policy.conf | 1 | ||||
-rw-r--r-- | libaudio/AudioStreamOut.cpp | 22 | ||||
-rw-r--r-- | libaudio/AudioStreamOut.h | 3 |
3 files changed, 15 insertions, 11 deletions
diff --git a/audio_policy.conf b/audio_policy.conf index 4e337fe..8cf93a0 100644 --- a/audio_policy.conf +++ b/audio_policy.conf @@ -34,7 +34,6 @@ audio_hw_modules { channel_masks dynamic formats dynamic devices AUDIO_DEVICE_OUT_AUX_DIGITAL - flags AUDIO_OUTPUT_FLAG_DIRECT } } inputs { diff --git a/libaudio/AudioStreamOut.cpp b/libaudio/AudioStreamOut.cpp index 82678c9..93cce95 100644 --- a/libaudio/AudioStreamOut.cpp +++ b/libaudio/AudioStreamOut.cpp @@ -37,7 +37,8 @@ namespace android { AudioStreamOut::AudioStreamOut(AudioHardwareOutput& owner, bool mcOut) - : mFramesRendered(0) + : mRenderPosition(0) + , mPresentationPosition(0) , mOwnerHAL(owner) , mFramesWritten(0) , mTgtDevices(0) @@ -141,7 +142,8 @@ status_t AudioStreamOut::standbyHardware() status_t AudioStreamOut::standby() { - mFramesRendered = 0; + mRenderPosition = 0; + // Don't reset the presentation position. return standbyHardware(); } @@ -168,7 +170,8 @@ status_t AudioStreamOut::resume() status_t AudioStreamOut::flush() { - mFramesRendered = 0; + mRenderPosition = 0; + mPresentationPosition = 0; return NO_ERROR; } @@ -266,7 +269,8 @@ void AudioStreamOut::finishedWriteOp(size_t framesWritten, } mFramesWritten += framesWritten; - mFramesRendered += framesWritten; + mPresentationPosition += framesWritten; + mRenderPosition += framesWritten; if (needThrottle) { int64_t deltaLT; @@ -404,21 +408,21 @@ status_t AudioStreamOut::getPresentationPosition(uint64_t *frames, (int64_t)audioOutput->getKernelBufferSize() - (int64_t)avail; int64_t pendingFrames = framesInDriverBuffer + fudgeFrames; - int64_t signedFrames = mFramesRendered - pendingFrames; + int64_t signedFrames = mPresentationPosition - pendingFrames; if (pendingFrames < 0) { ALOGE("getPresentationPosition: negative pendingFrames = %lld", pendingFrames); } else if (signedFrames < 0) { ALOGI("getPresentationPosition: playing silent preroll" - ", mFramesRendered = %llu, pendingFrames = %lld", - mFramesRendered, pendingFrames); + ", mPresentationPosition = %llu, pendingFrames = %lld", + mPresentationPosition, pendingFrames); } else { #if HAL_PRINT_TIMESTAMP_CSV // Print comma separated values for spreadsheet analysis. uint64_t nanos = (((uint64_t)timestamp->tv_sec) * 1000000000L) + timestamp->tv_nsec; ALOGI("getPresentationPosition, %lld, %4u, %lld, %llu", - mFramesRendered, avail, signedFrames, nanos); + mPresentationPosition, avail, signedFrames, nanos); #endif *frames = (uint64_t) signedFrames; result = NO_ERROR; @@ -443,7 +447,7 @@ status_t AudioStreamOut::getRenderPosition(__unused uint32_t *dspFrames) if (dspFrames == NULL) { return -EINVAL; } - *dspFrames = (uint32_t) mFramesRendered; + *dspFrames = (uint32_t) mRenderPosition; return NO_ERROR; } diff --git a/libaudio/AudioStreamOut.h b/libaudio/AudioStreamOut.h index f73241d..a24bc71 100644 --- a/libaudio/AudioStreamOut.h +++ b/libaudio/AudioStreamOut.h @@ -73,7 +73,8 @@ protected: Mutex mRoutingLock; // Track frame position for timestamps, etc. - int64_t mFramesRendered; + uint64_t mRenderPosition; + uint64_t mPresentationPosition; // Our HAL, used as the middle-man to collect and trade AudioOutputs. AudioHardwareOutput& mOwnerHAL; |