summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Burk <philburk@google.com>2015-07-07 16:46:25 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-07-07 16:46:26 +0000
commit2fe714fa470ef787b218a7797a9ba4fa309db6bd (patch)
tree0c48805e5bed9a318450f5b66f3bf815121a0c6c
parent4aff170d78d5cc839efaf4548f9dbd98fec67b3f (diff)
parentc73381fd51ed430361c5f3c8b6f43b425802b3c7 (diff)
downloadfugu-2fe714fa470ef787b218a7797a9ba4fa309db6bd.tar.gz
Merge "FuguAudio: do not reset frame position on standby" into mnc-dev
-rw-r--r--audio_policy.conf1
-rw-r--r--libaudio/AudioStreamOut.cpp22
-rw-r--r--libaudio/AudioStreamOut.h3
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;