From b6209a3d4c29bbb88de5a77546f4d545883cc484 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Fri, 30 Aug 2013 19:22:29 -0700 Subject: Revert "Fix decoder EOS handling" This reverts commit 9da36a6c8df70a5c8179ac78fab33cfbb5078cb2. Bug: 10571297. Change-Id: I76f20fe34872ea54fce626077462fb86c8c3f02e --- .../codecs/vorbis/dec/SoftVorbis.cpp | 73 ++++++++++------------ 1 file changed, 34 insertions(+), 39 deletions(-) (limited to 'media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp') diff --git a/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp b/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp index a377b23..51bb958 100644 --- a/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp +++ b/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp @@ -54,8 +54,6 @@ SoftVorbis::SoftVorbis( mAnchorTimeUs(0), mNumFramesOutput(0), mNumFramesLeftOnPage(-1), - mSawInputEos(false), - mSignalledOutputEos(false), mOutputPortSettingsChange(NONE) { initPorts(); CHECK_EQ(initDecoder(), (status_t)OK); @@ -292,47 +290,48 @@ void SoftVorbis::onQueueFilled(OMX_U32 portIndex) { return; } - while ((!inQueue.empty() || (mSawInputEos && !mSignalledOutputEos)) && !outQueue.empty()) { - BufferInfo *inInfo = NULL; - OMX_BUFFERHEADERTYPE *inHeader = NULL; - if (!inQueue.empty()) { - inInfo = *inQueue.begin(); - inHeader = inInfo->mHeader; - } + while (!inQueue.empty() && !outQueue.empty()) { + BufferInfo *inInfo = *inQueue.begin(); + OMX_BUFFERHEADERTYPE *inHeader = inInfo->mHeader; BufferInfo *outInfo = *outQueue.begin(); OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader; - int32_t numPageSamples = 0; - - if (inHeader) { - if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) { - mSawInputEos = true; - } - - if (inHeader->nFilledLen || !mSawInputEos) { - CHECK_GE(inHeader->nFilledLen, sizeof(numPageSamples)); - memcpy(&numPageSamples, - inHeader->pBuffer - + inHeader->nOffset + inHeader->nFilledLen - 4, - sizeof(numPageSamples)); + if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) { + inQueue.erase(inQueue.begin()); + inInfo->mOwnedByUs = false; + notifyEmptyBufferDone(inHeader); - if (inHeader->nOffset == 0) { - mAnchorTimeUs = inHeader->nTimeStamp; - mNumFramesOutput = 0; - } + outHeader->nFilledLen = 0; + outHeader->nFlags = OMX_BUFFERFLAG_EOS; - inHeader->nFilledLen -= sizeof(numPageSamples);; - } + outQueue.erase(outQueue.begin()); + outInfo->mOwnedByUs = false; + notifyFillBufferDone(outHeader); + return; } + int32_t numPageSamples; + CHECK_GE(inHeader->nFilledLen, sizeof(numPageSamples)); + memcpy(&numPageSamples, + inHeader->pBuffer + + inHeader->nOffset + inHeader->nFilledLen - 4, + sizeof(numPageSamples)); + if (numPageSamples >= 0) { mNumFramesLeftOnPage = numPageSamples; } + if (inHeader->nOffset == 0) { + mAnchorTimeUs = inHeader->nTimeStamp; + mNumFramesOutput = 0; + } + + inHeader->nFilledLen -= sizeof(numPageSamples);; + ogg_buffer buf; - buf.data = inHeader ? inHeader->pBuffer + inHeader->nOffset : NULL; - buf.size = inHeader ? inHeader->nFilledLen : 0; + buf.data = inHeader->pBuffer + inHeader->nOffset; + buf.size = inHeader->nFilledLen; buf.refcount = 1; buf.ptr.owner = NULL; @@ -385,13 +384,11 @@ void SoftVorbis::onQueueFilled(OMX_U32 portIndex) { mNumFramesOutput += numFrames; - if (inHeader) { - inInfo->mOwnedByUs = false; - inQueue.erase(inQueue.begin()); - inInfo = NULL; - notifyEmptyBufferDone(inHeader); - inHeader = NULL; - } + inInfo->mOwnedByUs = false; + inQueue.erase(inQueue.begin()); + inInfo = NULL; + notifyEmptyBufferDone(inHeader); + inHeader = NULL; outInfo->mOwnedByUs = false; outQueue.erase(outQueue.begin()); @@ -428,8 +425,6 @@ void SoftVorbis::onReset() { mVi = NULL; } - mSawInputEos = false; - mSignalledOutputEos = false; mOutputPortSettingsChange = NONE; } -- cgit v1.1