Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7bd69e4 authored by Andy Hung's avatar Andy Hung
Browse files

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
parent 240577a4
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -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();

    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).
    (void) updateAndGetPosition_l();
        if (mStaticProxy == 0) {
            mPosition = mReleased;
        }

    if (result == NO_ERROR) {
        // Continue playback from last known position and restore loop.
        if (mStaticProxy != 0) {
            if (loopCount != 0) {