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

Commit 6d62669e authored by Andy Hung's avatar Andy Hung
Browse files

TimestretchBufferProvider: getNextBuffer should follow API

If no data, should return 0 frame count and NULL ptr.

Bug: 23293002
Change-Id: Ib5364e5bceb15c2dddc4a16e85299b409cf4e137
parent 4327df2a
Loading
Loading
Loading
Loading
+26 −23
Original line number Diff line number Diff line
@@ -386,6 +386,8 @@ status_t TimestretchBufferProvider::getNextBuffer(

    // need to fetch more data
    const size_t outputDesired = pBuffer->frameCount - mRemaining;
    size_t dstAvailable;
    do {
        mBuffer.frameCount = mPlaybackRate.mSpeed == AUDIO_TIMESTRETCH_SPEED_NORMAL
                ? outputDesired : outputDesired * mPlaybackRate.mSpeed + 1;

@@ -393,7 +395,7 @@ status_t TimestretchBufferProvider::getNextBuffer(

        ALOG_ASSERT(res == OK || mBuffer.frameCount == 0);
        if (res != OK || mBuffer.frameCount == 0) { // not needed by API spec, but to be safe.
        ALOGD("buffer error");
            ALOGV("upstream provider cannot provide data");
            if (mRemaining == 0) {
                pBuffer->raw = NULL;
                pBuffer->frameCount = 0;
@@ -406,7 +408,7 @@ status_t TimestretchBufferProvider::getNextBuffer(
        }

        // time-stretch the data
    size_t dstAvailable = min(mLocalBufferFrameCount - mRemaining, outputDesired);
        dstAvailable = min(mLocalBufferFrameCount - mRemaining, outputDesired);
        size_t srcAvailable = mBuffer.frameCount;
        processFrames((uint8_t*)mLocalBufferData + mRemaining * mFrameSize, &dstAvailable,
                mBuffer.raw, &srcAvailable);
@@ -414,6 +416,7 @@ status_t TimestretchBufferProvider::getNextBuffer(
        // release all data consumed
        mBuffer.frameCount = srcAvailable;
        mTrackBufferProvider->releaseBuffer(&mBuffer);
    } while (dstAvailable == 0); // try until we get output data or upstream provider fails.

    // update buffer vars with the actual data processed and return with buffer
    mRemaining += dstAvailable;