summaryrefslogtreecommitdiffstats
path: root/services/audioflinger/SpdifStreamOut.cpp
diff options
context:
space:
mode:
authorPhil Burk <philburk@google.com>2015-07-06 16:24:14 -0700
committerPhil Burk <philburk@google.com>2015-07-07 16:40:00 -0700
commit90eea7631b07117e46ae8b84889a2baa3eee7aea (patch)
treee31c07b33a68919b011a031f08eb785bba0c066d /services/audioflinger/SpdifStreamOut.cpp
parent29b7cec9a248828d2371bc8758d819308d0e84a4 (diff)
downloadframeworks_av-90eea7631b07117e46ae8b84889a2baa3eee7aea.zip
frameworks_av-90eea7631b07117e46ae8b84889a2baa3eee7aea.tar.gz
frameworks_av-90eea7631b07117e46ae8b84889a2baa3eee7aea.tar.bz2
AudioFlinger: reset frame position on standby
The HAL does not reset the frame position on standby(). But applications expect the frame position to be reset. So we subtract the position at standby from the current position. Bug: 21724210 Bug: 21930805 Change-Id: I0c4520ba1c6c06a580f45f6bafc8cf1d56969f07 Signed-off-by: Phil Burk <philburk@google.com>
Diffstat (limited to 'services/audioflinger/SpdifStreamOut.cpp')
-rw-r--r--services/audioflinger/SpdifStreamOut.cpp47
1 files changed, 0 insertions, 47 deletions
diff --git a/services/audioflinger/SpdifStreamOut.cpp b/services/audioflinger/SpdifStreamOut.cpp
index ac637ef..6af7bce 100644
--- a/services/audioflinger/SpdifStreamOut.cpp
+++ b/services/audioflinger/SpdifStreamOut.cpp
@@ -36,10 +36,7 @@ SpdifStreamOut::SpdifStreamOut(AudioHwDevice *dev,
audio_output_flags_t flags,
audio_format_t format)
: AudioStreamOut(dev,flags)
- , mRateMultiplier(1)
, mSpdifEncoder(this, format)
- , mRenderPositionHal(0)
- , mPreviousHalPosition32(0)
{
}
@@ -97,62 +94,18 @@ status_t SpdifStreamOut::open(
return status;
}
-// Account for possibly higher sample rate.
-status_t SpdifStreamOut::getRenderPosition(uint32_t *frames)
-{
- uint32_t halPosition = 0;
- status_t status = AudioStreamOut::getRenderPosition(&halPosition);
- if (status != NO_ERROR) {
- return status;
- }
-
- // Accumulate a 64-bit position so that we wrap at the right place.
- if (mRateMultiplier != 1) {
- // Maintain a 64-bit render position.
- int32_t deltaHalPosition = (int32_t)(halPosition - mPreviousHalPosition32);
- mPreviousHalPosition32 = halPosition;
- mRenderPositionHal += deltaHalPosition;
-
- // Scale from device sample rate to application rate.
- uint64_t renderPositionApp = mRenderPositionHal / mRateMultiplier;
- ALOGV("SpdifStreamOut::getRenderPosition() "
- "renderPositionAppRate = %llu = %llu / %u\n",
- renderPositionApp, mRenderPositionHal, mRateMultiplier);
-
- *frames = (uint32_t)renderPositionApp;
- } else {
- *frames = halPosition;
- }
- return status;
-}
-
int SpdifStreamOut::flush()
{
mSpdifEncoder.reset();
- mRenderPositionHal = 0;
- mPreviousHalPosition32 = 0;
return AudioStreamOut::flush();
}
int SpdifStreamOut::standby()
{
mSpdifEncoder.reset();
- mRenderPositionHal = 0;
- mPreviousHalPosition32 = 0;
return AudioStreamOut::standby();
}
-// Account for possibly higher sample rate.
-// This is much easier when all the values are 64-bit.
-status_t SpdifStreamOut::getPresentationPosition(uint64_t *frames,
- struct timespec *timestamp)
-{
- uint64_t halFrames = 0;
- status_t status = AudioStreamOut::getPresentationPosition(&halFrames, timestamp);
- *frames = halFrames / mRateMultiplier;
- return status;
-}
-
size_t SpdifStreamOut::getFrameSize()
{
return sizeof(int8_t);