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

Commit cab10da0 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "audio: fix AudioTrack and AudioRecord restore"

parents f577d69b 6ec546da
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -1300,10 +1300,7 @@ retry:
    mNewPosition = position + mUpdatePeriod;
    status_t result = createRecord_l(position, mOpPackageName);

    if (result != NO_ERROR) {
        ALOGW("%s(%d): createRecord_l failed, do not retry", __func__, mId);
        retries = 0;
    } else {
    if (result == NO_ERROR) {
        if (mActive) {
            // callback thread or sync event hasn't changed
            // FIXME this fails if we have a new AudioFlinger instance
@@ -1316,13 +1313,15 @@ retry:
    if (result != NO_ERROR) {
        ALOGW("%s(%d): failed status %d, retries %d", __func__, mId, result, retries);
        if (--retries > 0) {
            // leave time for an eventual race condition to clear before retrying
            usleep(500000);
            goto retry;
        }
        // if no retries left, set invalid bit to force restoring at next occasion
        // and avoid inconsistent active state on client and server sides
        if (mCblk != nullptr) {
            android_atomic_or(CBLK_INVALID, &mCblk->mFlags);
        }

    if (result != NO_ERROR) {
        ALOGW("%s(%d): failed status %d", __func__, mId, result);
        mActive = false;
    }

    return result;
+8 −7
Original line number Diff line number Diff line
@@ -2308,10 +2308,7 @@ retry:
    // If a new IAudioTrack cannot be created, the previous (dead) instance will be left intact.
    status_t result = createTrack_l();

    if (result != NO_ERROR) {
        ALOGW("%s(%d): createTrack_l failed, do not retry", __func__, mId);
        retries = 0;
    } else {
    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).
@@ -2358,12 +2355,16 @@ retry:
    if (result != NO_ERROR) {
        ALOGW("%s(%d): failed status %d, retries %d", __func__, mId, result, retries);
        if (--retries > 0) {
            // leave time for an eventual race condition to clear before retrying
            usleep(500000);
            goto retry;
        }
        mState = STATE_STOPPED;
        mReleased = 0;
        // if no retries left, set invalid bit to force restoring at next occasion
        // and avoid inconsistent active state on client and server sides
        if (mCblk != nullptr) {
            android_atomic_or(CBLK_INVALID, &mCblk->mFlags);
        }
    }

    return result;
}