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

Commit 4ef10801 authored by Jaideep Sharma's avatar Jaideep Sharma Committed by Automerger Merge Worker
Browse files

FlacEncoder: handle EOS properly. am: f4db8042 am: 6cf01ff3 am: 74b707d4 am: 280d355d

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/12104883

Change-Id: I75b0f182539cd067d29bf4ea67465914c55aa18c
parents ba75bf77 280d355d
Loading
Loading
Loading
Loading
+32 −39
Original line number Diff line number Diff line
@@ -399,6 +399,7 @@ void SoftFlacEncoder::onQueueFilled(OMX_U32 portIndex) {
            mEncoderWriteData = true;
            mEncoderReturnedEncodedData = false;
            mEncoderReturnedNbBytes = 0;
            if (inHeader->nFilledLen) {
                mCurrentInputTimeStamp = inHeader->nTimeStamp;

                const unsigned nbInputFrames = inHeader->nFilledLen / frameSize;
@@ -422,6 +423,7 @@ void SoftFlacEncoder::onQueueFilled(OMX_U32 portIndex) {
                                mFlacStreamEncoder,
                                mInputBufferPcm32,
                                nbInputFrames /*samples per channel*/ );
            }

            inInfo->mOwnedByUs = false;
            inQueue.erase(inQueue.begin());
@@ -434,32 +436,23 @@ void SoftFlacEncoder::onQueueFilled(OMX_U32 portIndex) {
        OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;

        if (ok) {
            if (mEncoderReturnedEncodedData && (mEncoderReturnedNbBytes != 0)) {
                ALOGV(" dequeueing buffer on output port after writing data");
                outInfo->mOwnedByUs = false;
                outQueue.erase(outQueue.begin());
                outInfo = NULL;
                notifyFillBufferDone(outHeader);
                outHeader = NULL;
                mEncoderReturnedEncodedData = false;
            } else {
                ALOGV(" encoder process_interleaved returned without data to write");
                if (mSawInputEOS) {
            ALOGV("encoded %d, bytes %lld, eos %d", mEncoderReturnedEncodedData,
                  (long long )mEncoderReturnedNbBytes, mSawInputEOS);
            if (mSawInputEOS && !mEncoderReturnedEncodedData) {
                ALOGV("finishing encoder");
                mSentOutputEOS = true;
                FLAC__stream_encoder_finish(mFlacStreamEncoder);
                    if (mEncoderReturnedEncodedData && (mEncoderReturnedNbBytes != 0)) {
                        ALOGV(" dequeueing residual buffer on output port after writing data");
                outHeader->nFlags = OMX_BUFFERFLAG_EOS;
            }
            if (mSawInputEOS || mEncoderReturnedEncodedData) {
                ALOGV(" dequeueing buffer on output port after writing data");
                outInfo->mOwnedByUs = false;
                outQueue.erase(outQueue.begin());
                outInfo = NULL;
                        outHeader->nFlags = OMX_BUFFERFLAG_EOS;
                notifyFillBufferDone(outHeader);
                outHeader = NULL;
                mEncoderReturnedEncodedData = false;
            }
                }
            }
        } else {
            ALOGE(" error encountered during encoding");
            mSignalledError = true;