From fd866b3aa0d97375de08f8888b95669026c83361 Mon Sep 17 00:00:00 2001 From: Wei Jia Date: Tue, 7 Jul 2015 14:29:25 -0700 Subject: SimpleSoftOMXComponent: change CHECK to error notification. SoftAVCDec, SoftMPEG4: fix handling of zero-byte input buffer. ACodec: do not send empty input buffer without EOS to the omx component. Bug: 22199127 Change-Id: I0bbcf5778f969ba6e30d0db31770c4289e2b64a4 --- .../codecs/m4v_h263/dec/SoftMPEG4.cpp | 33 +++++++++++++--------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp') diff --git a/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp b/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp index ede645c..0c1a149 100644 --- a/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp +++ b/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp @@ -103,34 +103,41 @@ void SoftMPEG4::onQueueFilled(OMX_U32 /* portIndex */) { while (!inQueue.empty() && outQueue.size() == kNumOutputBuffers) { BufferInfo *inInfo = *inQueue.begin(); OMX_BUFFERHEADERTYPE *inHeader = inInfo->mHeader; + if (inHeader == NULL) { + inQueue.erase(inQueue.begin()); + inInfo->mOwnedByUs = false; + continue; + } PortInfo *port = editPortInfo(1); OMX_BUFFERHEADERTYPE *outHeader = port->mBuffers.editItemAt(mNumSamplesOutput & 1).mHeader; - if ((inHeader->nFlags & OMX_BUFFERFLAG_EOS) && inHeader->nFilledLen == 0) { + if (inHeader->nFilledLen == 0) { inQueue.erase(inQueue.begin()); inInfo->mOwnedByUs = false; notifyEmptyBufferDone(inHeader); ++mInputBufferCount; - outHeader->nFilledLen = 0; - outHeader->nFlags = OMX_BUFFERFLAG_EOS; + if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) { + outHeader->nFilledLen = 0; + outHeader->nFlags = OMX_BUFFERFLAG_EOS; - List::iterator it = outQueue.begin(); - while ((*it)->mHeader != outHeader) { - ++it; - } + List::iterator it = outQueue.begin(); + while ((*it)->mHeader != outHeader) { + ++it; + } - BufferInfo *outInfo = *it; - outInfo->mOwnedByUs = false; - outQueue.erase(it); - outInfo = NULL; + BufferInfo *outInfo = *it; + outInfo->mOwnedByUs = false; + outQueue.erase(it); + outInfo = NULL; - notifyFillBufferDone(outHeader); - outHeader = NULL; + notifyFillBufferDone(outHeader); + outHeader = NULL; + } return; } -- cgit v1.1