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 /media | |
| 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
Diffstat (limited to 'media')
| -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;          }  | 
