summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp
diff options
context:
space:
mode:
authorWei Jia <wjia@google.com>2015-07-07 14:29:25 -0700
committerWei Jia <wjia@google.com>2015-07-08 15:04:51 -0700
commitfd866b3aa0d97375de08f8888b95669026c83361 (patch)
tree8eeac1f0b7874d5c1daaea951134ccbcd2b151f9 /media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp
parent065f6572752dca646b7d60df8e80b6d4ac159281 (diff)
downloadframeworks_av-fd866b3aa0d97375de08f8888b95669026c83361.zip
frameworks_av-fd866b3aa0d97375de08f8888b95669026c83361.tar.gz
frameworks_av-fd866b3aa0d97375de08f8888b95669026c83361.tar.bz2
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
Diffstat (limited to 'media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp')
-rw-r--r--media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp33
1 files changed, 20 insertions, 13 deletions
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<BufferInfo *>::iterator it = outQueue.begin();
- while ((*it)->mHeader != outHeader) {
- ++it;
- }
+ List<BufferInfo *>::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;
}