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

Commit 4edf384a authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Fix SoftAAC2 flush

If there were less than a full frame worth of samples in the ring
buffer, then flush would loop forever trying to empty the ring
buffer.

Bug: 17646525
Change-Id: I68ec87352a91ce3a96d05e9b3f60a6e7975f9156
parent c0d17e34
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -974,11 +974,15 @@ void SoftAAC2::onPortFlushCompleted(OMX_U32 portIndex) {
        mDecodedSizes.clear();
        mLastInHeader = NULL;
    } else {
        while (outputDelayRingBufferSamplesAvailable() > 0) {
            int32_t ns = outputDelayRingBufferGetSamples(0,
                    mStreamInfo->frameSize * mStreamInfo->numChannels);
            if (ns != mStreamInfo->frameSize * mStreamInfo->numChannels) {
        int avail;
        while ((avail = outputDelayRingBufferSamplesAvailable()) > 0) {
            if (avail > mStreamInfo->frameSize * mStreamInfo->numChannels) {
                avail = mStreamInfo->frameSize * mStreamInfo->numChannels;
            }
            int32_t ns = outputDelayRingBufferGetSamples(0, avail);
            if (ns != avail) {
                ALOGE("not a complete frame of samples available");
                break;
            }
            mOutputBufferCount++;
        }