summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/aacdec
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2012-05-21 10:02:14 -0700
committerAndreas Huber <andih@google.com>2012-05-21 10:06:42 -0700
commite35ac2860e99d809a2ccca59bd4eb2f8c02d15ad (patch)
treede93d3a9fafe23a6d7f9e97ffa0e0a1148c74cf3 /media/libstagefright/codecs/aacdec
parent8370c7ad4136ad7e0787d5a91ccfa3d63cfbe5cc (diff)
downloadframeworks_av-e35ac2860e99d809a2ccca59bd4eb2f8c02d15ad.zip
frameworks_av-e35ac2860e99d809a2ccca59bd4eb2f8c02d15ad.tar.gz
frameworks_av-e35ac2860e99d809a2ccca59bd4eb2f8c02d15ad.tar.bz2
Add more verbose ADTS error logging to SoftAAC.
and fix the corresponding code in SoftAAC2. Change-Id: I6c745fb6e8e093708fdfe2861963b0a35fa7b912 related-to-bug: 6519161
Diffstat (limited to 'media/libstagefright/codecs/aacdec')
-rw-r--r--media/libstagefright/codecs/aacdec/SoftAAC.cpp50
-rw-r--r--media/libstagefright/codecs/aacdec/SoftAAC2.cpp16
2 files changed, 46 insertions, 20 deletions
diff --git a/media/libstagefright/codecs/aacdec/SoftAAC.cpp b/media/libstagefright/codecs/aacdec/SoftAAC.cpp
index 65aa2ad..7c82484 100644
--- a/media/libstagefright/codecs/aacdec/SoftAAC.cpp
+++ b/media/libstagefright/codecs/aacdec/SoftAAC.cpp
@@ -24,6 +24,7 @@
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/hexdump.h>
+#include <media/stagefright/MediaErrors.h>
namespace android {
@@ -322,24 +323,49 @@ void SoftAAC::onQueueFilled(OMX_U32 portIndex) {
const uint8_t *adtsHeader = inHeader->pBuffer + inHeader->nOffset;
- CHECK_GE(inHeader->nFilledLen, 7);
+ bool signalError = false;
+ if (inHeader->nFilledLen < 7) {
+ ALOGE("Audio data too short to contain even the ADTS header. "
+ "Got %ld bytes.", inHeader->nFilledLen);
+ hexdump(adtsHeader, inHeader->nFilledLen);
+ signalError = true;
+ } else {
+ bool protectionAbsent = (adtsHeader[1] & 1);
+
+ unsigned aac_frame_length =
+ ((adtsHeader[3] & 3) << 11)
+ | (adtsHeader[4] << 3)
+ | (adtsHeader[5] >> 5);
+
+ if (inHeader->nFilledLen < aac_frame_length) {
+ ALOGE("Not enough audio data for the complete frame. "
+ "Got %ld bytes, frame size according to the ADTS "
+ "header is %u bytes.",
+ inHeader->nFilledLen, aac_frame_length);
+ hexdump(adtsHeader, inHeader->nFilledLen);
+ signalError = true;
+ } else {
+ adtsHeaderSize = (protectionAbsent ? 7 : 9);
- bool protectionAbsent = (adtsHeader[1] & 1);
+ mConfig->pInputBuffer =
+ (UChar *)adtsHeader + adtsHeaderSize;
- unsigned aac_frame_length =
- ((adtsHeader[3] & 3) << 11)
- | (adtsHeader[4] << 3)
- | (adtsHeader[5] >> 5);
+ mConfig->inputBufferCurrentLength =
+ aac_frame_length - adtsHeaderSize;
- CHECK_GE(inHeader->nFilledLen, aac_frame_length);
+ inHeader->nOffset += adtsHeaderSize;
+ inHeader->nFilledLen -= adtsHeaderSize;
+ }
+ }
- adtsHeaderSize = (protectionAbsent ? 7 : 9);
+ if (signalError) {
+ mSignalledError = true;
- mConfig->pInputBuffer = (UChar *)adtsHeader + adtsHeaderSize;
- mConfig->inputBufferCurrentLength = aac_frame_length - adtsHeaderSize;
+ notify(OMX_EventError, OMX_ErrorStreamCorrupt,
+ ERROR_MALFORMED, NULL);
- inHeader->nOffset += adtsHeaderSize;
- inHeader->nFilledLen -= adtsHeaderSize;
+ return;
+ }
} else {
mConfig->pInputBuffer = inHeader->pBuffer + inHeader->nOffset;
mConfig->inputBufferCurrentLength = inHeader->nFilledLen;
diff --git a/media/libstagefright/codecs/aacdec/SoftAAC2.cpp b/media/libstagefright/codecs/aacdec/SoftAAC2.cpp
index 9f6db4c..76c3854 100644
--- a/media/libstagefright/codecs/aacdec/SoftAAC2.cpp
+++ b/media/libstagefright/codecs/aacdec/SoftAAC2.cpp
@@ -367,17 +367,17 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) {
inHeader->nOffset += adtsHeaderSize;
inHeader->nFilledLen -= adtsHeaderSize;
}
+ }
- if (signalError) {
- mSignalledError = true;
+ if (signalError) {
+ mSignalledError = true;
- notify(OMX_EventError,
- OMX_ErrorStreamCorrupt,
- ERROR_MALFORMED,
- NULL);
+ notify(OMX_EventError,
+ OMX_ErrorStreamCorrupt,
+ ERROR_MALFORMED,
+ NULL);
- return;
- }
+ return;
}
} else {
inBuffer[0] = inHeader->pBuffer + inHeader->nOffset;