diff options
author | Andreas Huber <andih@google.com> | 2010-04-12 10:11:32 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-04-12 10:11:32 -0700 |
commit | cdded187d20bdc6379c5a09bdd2002fa070b745d (patch) | |
tree | f04ce0e481f31f308910a5d86003d654faea7caf /media | |
parent | 040301cad17e447d760e7b7e54b79c8c294415ea (diff) | |
parent | 3f26cade6275d1a55fdae7c7b3fa44bf30a4337e (diff) | |
download | frameworks_base-cdded187d20bdc6379c5a09bdd2002fa070b745d.zip frameworks_base-cdded187d20bdc6379c5a09bdd2002fa070b745d.tar.gz frameworks_base-cdded187d20bdc6379c5a09bdd2002fa070b745d.tar.bz2 |
Merge "Ignore corrupt aac audio frames and substitute silence." into froyo
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/codecs/aacdec/AACDecoder.cpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/media/libstagefright/codecs/aacdec/AACDecoder.cpp b/media/libstagefright/codecs/aacdec/AACDecoder.cpp index 2ed8ef1..ae23691 100644 --- a/media/libstagefright/codecs/aacdec/AACDecoder.cpp +++ b/media/libstagefright/codecs/aacdec/AACDecoder.cpp @@ -203,25 +203,32 @@ status_t AACDecoder::read( Int decoderErr = PVMP4AudioDecodeFrame(mConfig, mDecoderBuf); + size_t numOutBytes = + mConfig->frameLength * sizeof(int16_t) * mConfig->desiredChannels; + if (decoderErr != MP4AUDEC_SUCCESS) { - LOGE("AAC decoder returned error %d", decoderErr); + LOGW("AAC decoder returned error %d, substituting silence", decoderErr); - buffer->release(); - buffer = NULL; + memset(buffer->data(), 0, numOutBytes); - return ERROR_MALFORMED; + // Discard input buffer. + mInputBuffer->release(); + mInputBuffer = NULL; + + // fall through } - buffer->set_range( - 0, mConfig->frameLength * sizeof(int16_t) * mConfig->desiredChannels); + buffer->set_range(0, numOutBytes); - mInputBuffer->set_range( - mInputBuffer->range_offset() + mConfig->inputBufferUsedLength, - mInputBuffer->range_length() - mConfig->inputBufferUsedLength); + if (mInputBuffer != NULL) { + mInputBuffer->set_range( + mInputBuffer->range_offset() + mConfig->inputBufferUsedLength, + mInputBuffer->range_length() - mConfig->inputBufferUsedLength); - if (mInputBuffer->range_length() == 0) { - mInputBuffer->release(); - mInputBuffer = NULL; + if (mInputBuffer->range_length() == 0) { + mInputBuffer->release(); + mInputBuffer = NULL; + } } buffer->meta_data()->setInt64( |