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

Commit 6b7b8227 authored by Andreas Huber's avatar Andreas Huber
Browse files

Make sure we restore our input buffer to its original state if we want to revisit it.

Change-Id: Iab62562c4dea13520751c37c9448c0b19c82d739
parent fc554559
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -315,6 +315,7 @@ void SoftAAC::onQueueFilled(OMX_U32 portIndex) {
            mNumSamplesOutput = 0;
        }

        size_t adtsHeaderSize = 0;
        if (mIsADTS) {
            // skip 30 bits, aac_frame_length follows.
            // ssssssss ssssiiip ppffffPc ccohCCll llllllll lll?????
@@ -332,13 +333,13 @@ void SoftAAC::onQueueFilled(OMX_U32 portIndex) {

            CHECK_GE(inHeader->nFilledLen, aac_frame_length);

            size_t headerSize = (protectionAbsent ? 7 : 9);
            adtsHeaderSize = (protectionAbsent ? 7 : 9);

            mConfig->pInputBuffer = (UChar *)adtsHeader + headerSize;
            mConfig->inputBufferCurrentLength = aac_frame_length - headerSize;
            mConfig->pInputBuffer = (UChar *)adtsHeader + adtsHeaderSize;
            mConfig->inputBufferCurrentLength = aac_frame_length - adtsHeaderSize;

            inHeader->nOffset += headerSize;
            inHeader->nFilledLen -= headerSize;
            inHeader->nOffset += adtsHeaderSize;
            inHeader->nFilledLen -= adtsHeaderSize;
        } else {
            mConfig->pInputBuffer = inHeader->pBuffer + inHeader->nOffset;
            mConfig->inputBufferCurrentLength = inHeader->nFilledLen;
@@ -387,6 +388,12 @@ void SoftAAC::onQueueFilled(OMX_U32 portIndex) {
                    // We'll hold onto the input buffer and will decode
                    // it again once the output port has been reconfigured.

                    // We're going to want to revisit this input buffer, but
                    // may have already advanced the offset. Undo that if
                    // necessary.
                    inHeader->nOffset -= adtsHeaderSize;
                    inHeader->nFilledLen += adtsHeaderSize;

                    notify(OMX_EventPortSettingsChanged, 1, 0, NULL);
                    mOutputPortSettingsChange = AWAITING_DISABLED;
                    return;
+14 −5
Original line number Diff line number Diff line
@@ -312,6 +312,7 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) {
            mNumSamplesOutput = 0;
        }

        size_t adtsHeaderSize = 0;
        if (mIsADTS) {
            // skip 30 bits, aac_frame_length follows.
            // ssssssss ssssiiip ppffffPc ccohCCll llllllll lll?????
@@ -329,13 +330,13 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) {

            CHECK_GE(inHeader->nFilledLen, aac_frame_length);

            size_t headerSize = (protectionAbsent ? 7 : 9);
            adtsHeaderSize = (protectionAbsent ? 7 : 9);

            inBuffer[0] = (UCHAR *)adtsHeader + headerSize;
            inBufferLength[0] = aac_frame_length - headerSize;
            inBuffer[0] = (UCHAR *)adtsHeader + adtsHeaderSize;
            inBufferLength[0] = aac_frame_length - adtsHeaderSize;

            inHeader->nOffset += headerSize;
            inHeader->nFilledLen -= headerSize;
            inHeader->nOffset += adtsHeaderSize;
            inHeader->nFilledLen -= adtsHeaderSize;
        } else {
            inBuffer[0] = inHeader->pBuffer + inHeader->nOffset;
            inBufferLength[0] = inHeader->nFilledLen;
@@ -352,10 +353,12 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) {
                                     inBuffer,
                                     inBufferLength,
                                     bytesValid);

        decoderErr = aacDecoder_DecodeFrame(mAACDecoder,
                                            outBuffer,
                                            outHeader->nAllocLen,
                                            flags);

        mInputDiscontinuity = false;

        /*
@@ -374,6 +377,12 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) {
         */
        if (decoderErr == AAC_DEC_OK && mInputBufferCount <= 2) {
            if (mStreamInfo->sampleRate != prevSampleRate) {
                // We're going to want to revisit this input buffer, but
                // may have already advanced the offset. Undo that if
                // necessary.
                inHeader->nOffset -= adtsHeaderSize;
                inHeader->nFilledLen += adtsHeaderSize;

                notify(OMX_EventPortSettingsChanged, 1, 0, NULL);
                mOutputPortSettingsChange = AWAITING_DISABLED;
                return;