From 90eea7631b07117e46ae8b84889a2baa3eee7aea Mon Sep 17 00:00:00 2001 From: Phil Burk Date: Mon, 6 Jul 2015 16:24:14 -0700 Subject: 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 --- services/audioflinger/SpdifStreamOut.cpp | 47 -------------------------------- 1 file changed, 47 deletions(-) (limited to 'services/audioflinger/SpdifStreamOut.cpp') 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); -- cgit v1.1