summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-04-12 10:11:32 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-04-12 10:11:32 -0700
commitcdded187d20bdc6379c5a09bdd2002fa070b745d (patch)
treef04ce0e481f31f308910a5d86003d654faea7caf /media
parent040301cad17e447d760e7b7e54b79c8c294415ea (diff)
parent3f26cade6275d1a55fdae7c7b3fa44bf30a4337e (diff)
downloadframeworks_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.cpp31
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(