From d7bd69e4d1e74f25413721804d5290c53ea87f2b Mon Sep 17 00:00:00 2001 From: Andy Hung Date: Fri, 24 Jul 2015 07:52:41 -0700 Subject: Fix restore position warning and static track adjustment Remove unnecessary restoreTrack_l() position warning when AudioTrack output device changes. Also, fix rare getPosition() offset error if a static track is continuously playing a long time (> 24 hours at 48khz sampling) and its output device changes. Bug: 22524122 Bug: 21699132 Change-Id: I5a35c13d62ff9f0702b09d5cd9362c730364b18c --- media/libmedia/AudioTrack.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'media/libmedia/AudioTrack.cpp') diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index ab720c6..4437638 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -483,7 +483,6 @@ status_t AudioTrack::set( mMarkerReached = false; mNewPosition = 0; mUpdatePeriod = 0; - mServer = 0; mPosition = 0; mReleased = 0; mStartUs = 0; @@ -1389,6 +1388,9 @@ status_t AudioTrack::createTrack_l() mReqFrameCount = frameCount; } + // reset server position to 0 as we have new cblk. + mServer = 0; + // update proxy if (mSharedBuffer == 0) { mStaticProxy.clear(); @@ -2109,15 +2111,13 @@ status_t AudioTrack::restoreTrack_l(const char *from) // If a new IAudioTrack cannot be created, the previous (dead) instance will be left intact. status_t result = createTrack_l(); - // take the frames that will be lost by track recreation into account in saved position - // For streaming tracks, this is the amount we obtained from the user/client - // (not the number actually consumed at the server - those are already lost). - (void) updateAndGetPosition_l(); - if (mStaticProxy == 0) { - mPosition = mReleased; - } - if (result == NO_ERROR) { + // take the frames that will be lost by track recreation into account in saved position + // For streaming tracks, this is the amount we obtained from the user/client + // (not the number actually consumed at the server - those are already lost). + if (mStaticProxy == 0) { + mPosition = mReleased; + } // Continue playback from last known position and restore loop. if (mStaticProxy != 0) { if (loopCount != 0) { -- cgit v1.1