diff options
author | Marco Nelissen <marcone@google.com> | 2014-10-16 09:19:35 -0700 |
---|---|---|
committer | Marco Nelissen <marcone@google.com> | 2014-10-16 16:23:41 +0000 |
commit | b1f5ab447c6b44c810f5e97aeef381c93347a47a (patch) | |
tree | ec80387abcb06d813af5c32465a9708bf0c804c6 /media/libstagefright/codecs/aacdec/SoftAAC2.cpp | |
parent | 7771ebfe2457da705439b16cdb80b120a15fc619 (diff) | |
download | frameworks_av-b1f5ab447c6b44c810f5e97aeef381c93347a47a.zip frameworks_av-b1f5ab447c6b44c810f5e97aeef381c93347a47a.tar.gz frameworks_av-b1f5ab447c6b44c810f5e97aeef381c93347a47a.tar.bz2 |
Don't signal an error at the end of a short file
Just signaling EOS is sufficient
Bug: 17933838
Change-Id: I04a1af57378115731febe7cacb35af5e55d5db83
Diffstat (limited to 'media/libstagefright/codecs/aacdec/SoftAAC2.cpp')
-rw-r--r-- | media/libstagefright/codecs/aacdec/SoftAAC2.cpp | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/media/libstagefright/codecs/aacdec/SoftAAC2.cpp b/media/libstagefright/codecs/aacdec/SoftAAC2.cpp index 40925fd..351ba1e 100644 --- a/media/libstagefright/codecs/aacdec/SoftAAC2.cpp +++ b/media/libstagefright/codecs/aacdec/SoftAAC2.cpp @@ -929,33 +929,22 @@ void SoftAAC2::onQueueFilled(OMX_U32 /* portIndex */) { } if (mEndOfInput) { - if (outputDelayRingBufferSamplesAvailable() > 0 - && outputDelayRingBufferSamplesAvailable() - < mStreamInfo->frameSize * mStreamInfo->numChannels) { - ALOGE("not a complete frame of samples available"); - mSignalledError = true; - notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL); - return; - } - - if (mEndOfInput && !outQueue.empty() && outputDelayRingBufferSamplesAvailable() == 0) { + int ringBufAvail = outputDelayRingBufferSamplesAvailable(); + if (!outQueue.empty() + && ringBufAvail < mStreamInfo->frameSize * mStreamInfo->numChannels) { if (!mEndOfOutput) { - // send empty block signaling EOS + // send partial or empty block signaling EOS mEndOfOutput = true; BufferInfo *outInfo = *outQueue.begin(); OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader; - if (outHeader->nOffset != 0) { - ALOGE("outHeader->nOffset != 0 is not handled"); - mSignalledError = true; - notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL); - return; - } - INT_PCM *outBuffer = reinterpret_cast<INT_PCM *>(outHeader->pBuffer + outHeader->nOffset); - int32_t ns = 0; - outHeader->nFilledLen = 0; + int32_t ns = outputDelayRingBufferGetSamples(outBuffer, ringBufAvail); + if (ns < 0) { + ns = 0; + } + outHeader->nFilledLen = ns; outHeader->nFlags = OMX_BUFFERFLAG_EOS; outHeader->nTimeStamp = mBufferTimestamps.itemAt(0); @@ -994,7 +983,7 @@ void SoftAAC2::onPortFlushCompleted(OMX_U32 portIndex) { } int32_t ns = outputDelayRingBufferGetSamples(0, avail); if (ns != avail) { - ALOGE("not a complete frame of samples available"); + ALOGW("not a complete frame of samples available"); break; } mOutputBufferCount++; |