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

Commit 05fd1503 authored by Ram Mohan's avatar Ram Mohan Committed by android-build-merger
Browse files

Merge "softFlac: handle eos buffers at any stage" into oc-mr1-dev

am: d25d4318

Change-Id: Ie7a782285876e76b172b55d10107ea5fe61c7e55
parents 64643717 d25d4318
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -302,10 +302,27 @@ void SoftFlacDecoder::onQueueFilled(OMX_U32 /* portIndex */) {
    while (!inQueue.empty() && !outQueue.empty()) {
        BufferInfo *inInfo = *inQueue.begin();
        OMX_BUFFERHEADERTYPE *inHeader = inInfo->mHeader;
        BufferInfo *outInfo = *outQueue.begin();
        OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;
        uint8_t* inBuffer = inHeader->pBuffer + inHeader->nOffset;
        uint32_t inBufferLength = inHeader->nFilledLen;
        bool endOfInput = (inHeader->nFlags & OMX_BUFFERFLAG_EOS) != 0;

        if (inHeader->nFilledLen == 0) {
            if (endOfInput) {
                outHeader->nFilledLen = 0;
                outHeader->nFlags = OMX_BUFFERFLAG_EOS;
                outInfo->mOwnedByUs = false;
                outQueue.erase(outQueue.begin());
                notifyFillBufferDone(outHeader);
            } else {
                ALOGE("onQueueFilled: emptyInputBuffer received");
            }
            inInfo->mOwnedByUs = false;
            inQueue.erase(inQueue.begin());
            notifyEmptyBufferDone(inHeader);
            return;
        }
        if (mInputBufferCount == 0 && !(inHeader->nFlags & OMX_BUFFERFLAG_CODECCONFIG)) {
            ALOGE("onQueueFilled: first buffer should have OMX_BUFFERFLAG_CODECCONFIG set");
            inHeader->nFlags |= OMX_BUFFERFLAG_CODECCONFIG;
@@ -343,8 +360,6 @@ void SoftFlacDecoder::onQueueFilled(OMX_U32 /* portIndex */) {
            return;
        }

        BufferInfo *outInfo = *outQueue.begin();
        OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;
        short *outBuffer =
                reinterpret_cast<short *>(outHeader->pBuffer + outHeader->nOffset);
        size_t outBufferSize = outHeader->nAllocLen - outHeader->nOffset;