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

Commit b1f5ab44 authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Don't signal an error at the end of a short file

Just signaling EOS is sufficient

Bug: 17933838
Change-Id: I04a1af57378115731febe7cacb35af5e55d5db83
parent 7771ebfe
Loading
Loading
Loading
Loading
+10 −21
Original line number Original line Diff line number Diff line
@@ -929,33 +929,22 @@ void SoftAAC2::onQueueFilled(OMX_U32 /* portIndex */) {
        }
        }


        if (mEndOfInput) {
        if (mEndOfInput) {
            if (outputDelayRingBufferSamplesAvailable() > 0
            int ringBufAvail = outputDelayRingBufferSamplesAvailable();
                    && outputDelayRingBufferSamplesAvailable()
            if (!outQueue.empty()
                            < mStreamInfo->frameSize * mStreamInfo->numChannels) {
                    && ringBufAvail < mStreamInfo->frameSize * mStreamInfo->numChannels) {
                ALOGE("not a complete frame of samples available");
                mSignalledError = true;
                notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL);
                return;
            }

            if (mEndOfInput && !outQueue.empty() && outputDelayRingBufferSamplesAvailable() == 0) {
                if (!mEndOfOutput) {
                if (!mEndOfOutput) {
                    // send empty block signaling EOS
                    // send partial or empty block signaling EOS
                    mEndOfOutput = true;
                    mEndOfOutput = true;
                    BufferInfo *outInfo = *outQueue.begin();
                    BufferInfo *outInfo = *outQueue.begin();
                    OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;
                    OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;


                    if (outHeader->nOffset != 0) {
                        ALOGE("outHeader->nOffset != 0 is not handled");
                        mSignalledError = true;
                        notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL);
                        return;
                    }

                    INT_PCM *outBuffer = reinterpret_cast<INT_PCM *>(outHeader->pBuffer
                    INT_PCM *outBuffer = reinterpret_cast<INT_PCM *>(outHeader->pBuffer
                            + outHeader->nOffset);
                            + outHeader->nOffset);
                    int32_t ns = 0;
                    int32_t ns = outputDelayRingBufferGetSamples(outBuffer, ringBufAvail);
                    outHeader->nFilledLen = 0;
                    if (ns < 0) {
                        ns = 0;
                    }
                    outHeader->nFilledLen = ns;
                    outHeader->nFlags = OMX_BUFFERFLAG_EOS;
                    outHeader->nFlags = OMX_BUFFERFLAG_EOS;


                    outHeader->nTimeStamp = mBufferTimestamps.itemAt(0);
                    outHeader->nTimeStamp = mBufferTimestamps.itemAt(0);
@@ -994,7 +983,7 @@ void SoftAAC2::onPortFlushCompleted(OMX_U32 portIndex) {
            }
            }
            int32_t ns = outputDelayRingBufferGetSamples(0, avail);
            int32_t ns = outputDelayRingBufferGetSamples(0, avail);
            if (ns != avail) {
            if (ns != avail) {
                ALOGE("not a complete frame of samples available");
                ALOGW("not a complete frame of samples available");
                break;
                break;
            }
            }
            mOutputBufferCount++;
            mOutputBufferCount++;