diff options
author | Andreas Huber <andih@google.com> | 2011-08-23 10:21:34 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2011-08-23 10:22:49 -0700 |
commit | eca1762d92c43f2b7836941d14e453d4c0f9ed99 (patch) | |
tree | 883a5c050322b2c1954917ec4d50729321c8780a | |
parent | 8c32b164d00d3e4d73764d06956331f09693ef43 (diff) | |
download | frameworks_av-eca1762d92c43f2b7836941d14e453d4c0f9ed99.zip frameworks_av-eca1762d92c43f2b7836941d14e453d4c0f9ed99.tar.gz frameworks_av-eca1762d92c43f2b7836941d14e453d4c0f9ed99.tar.bz2 |
We were accidentally sending out an output buffer before the final port settings change
Change-Id: I4de0d3c377bb12e59524ed370ab3ed0b9a9b70a6
related-to-bug: 5122512
-rw-r--r-- | media/libstagefright/codecs/aacdec/SoftAAC.cpp | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/media/libstagefright/codecs/aacdec/SoftAAC.cpp b/media/libstagefright/codecs/aacdec/SoftAAC.cpp index f0a330f..2abdb56 100644 --- a/media/libstagefright/codecs/aacdec/SoftAAC.cpp +++ b/media/libstagefright/codecs/aacdec/SoftAAC.cpp @@ -378,23 +378,35 @@ void SoftAAC::onQueueFilled(OMX_U32 portIndex) { // fall through } - if (mUpsamplingFactor == 2) { - if (mConfig->desiredChannels == 1) { - memcpy(&mConfig->pOutputBuffer[1024], - &mConfig->pOutputBuffer[2048], - numOutBytes * 2); + if (decoderErr == MP4AUDEC_SUCCESS || mNumSamplesOutput > 0) { + // We'll only output data if we successfully decoded it or + // we've previously decoded valid data, in the latter case + // (decode failed) we'll output a silent frame. + + if (mUpsamplingFactor == 2) { + if (mConfig->desiredChannels == 1) { + memcpy(&mConfig->pOutputBuffer[1024], + &mConfig->pOutputBuffer[2048], + numOutBytes * 2); + } + numOutBytes *= 2; } - numOutBytes *= 2; - } - outHeader->nFilledLen = numOutBytes; - outHeader->nFlags = 0; + outHeader->nFilledLen = numOutBytes; + outHeader->nFlags = 0; - outHeader->nTimeStamp = - mAnchorTimeUs - + (mNumSamplesOutput * 1000000ll) / mConfig->samplingRate; + outHeader->nTimeStamp = + mAnchorTimeUs + + (mNumSamplesOutput * 1000000ll) / mConfig->samplingRate; - mNumSamplesOutput += mConfig->frameLength * mUpsamplingFactor; + mNumSamplesOutput += mConfig->frameLength * mUpsamplingFactor; + + outInfo->mOwnedByUs = false; + outQueue.erase(outQueue.begin()); + outInfo = NULL; + notifyFillBufferDone(outHeader); + outHeader = NULL; + } if (inHeader->nFilledLen == 0) { inInfo->mOwnedByUs = false; @@ -404,12 +416,6 @@ void SoftAAC::onQueueFilled(OMX_U32 portIndex) { inHeader = NULL; } - outInfo->mOwnedByUs = false; - outQueue.erase(outQueue.begin()); - outInfo = NULL; - notifyFillBufferDone(outHeader); - outHeader = NULL; - if (decoderErr == MP4AUDEC_SUCCESS) { ++mInputBufferCount; } |