Loading media/libstagefright/codecs/aacdec/SoftAAC.cpp +38 −12 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/hexdump.h> #include <media/stagefright/MediaErrors.h> namespace android { Loading Loading @@ -322,8 +323,13 @@ 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 = Loading @@ -331,15 +337,35 @@ void SoftAAC::onQueueFilled(OMX_U32 portIndex) { | (adtsHeader[4] << 3) | (adtsHeader[5] >> 5); CHECK_GE(inHeader->nFilledLen, aac_frame_length); 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); mConfig->pInputBuffer = (UChar *)adtsHeader + adtsHeaderSize; mConfig->inputBufferCurrentLength = aac_frame_length - adtsHeaderSize; mConfig->pInputBuffer = (UChar *)adtsHeader + adtsHeaderSize; mConfig->inputBufferCurrentLength = aac_frame_length - adtsHeaderSize; inHeader->nOffset += adtsHeaderSize; inHeader->nFilledLen -= adtsHeaderSize; } } if (signalError) { mSignalledError = true; notify(OMX_EventError, OMX_ErrorStreamCorrupt, ERROR_MALFORMED, NULL); return; } } else { mConfig->pInputBuffer = inHeader->pBuffer + inHeader->nOffset; mConfig->inputBufferCurrentLength = inHeader->nFilledLen; Loading media/libstagefright/codecs/aacdec/SoftAAC2.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -367,6 +367,7 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) { inHeader->nOffset += adtsHeaderSize; inHeader->nFilledLen -= adtsHeaderSize; } } if (signalError) { mSignalledError = true; Loading @@ -378,7 +379,6 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) { return; } } } else { inBuffer[0] = inHeader->pBuffer + inHeader->nOffset; inBufferLength[0] = inHeader->nFilledLen; Loading Loading
media/libstagefright/codecs/aacdec/SoftAAC.cpp +38 −12 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/hexdump.h> #include <media/stagefright/MediaErrors.h> namespace android { Loading Loading @@ -322,8 +323,13 @@ 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 = Loading @@ -331,15 +337,35 @@ void SoftAAC::onQueueFilled(OMX_U32 portIndex) { | (adtsHeader[4] << 3) | (adtsHeader[5] >> 5); CHECK_GE(inHeader->nFilledLen, aac_frame_length); 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); mConfig->pInputBuffer = (UChar *)adtsHeader + adtsHeaderSize; mConfig->inputBufferCurrentLength = aac_frame_length - adtsHeaderSize; mConfig->pInputBuffer = (UChar *)adtsHeader + adtsHeaderSize; mConfig->inputBufferCurrentLength = aac_frame_length - adtsHeaderSize; inHeader->nOffset += adtsHeaderSize; inHeader->nFilledLen -= adtsHeaderSize; } } if (signalError) { mSignalledError = true; notify(OMX_EventError, OMX_ErrorStreamCorrupt, ERROR_MALFORMED, NULL); return; } } else { mConfig->pInputBuffer = inHeader->pBuffer + inHeader->nOffset; mConfig->inputBufferCurrentLength = inHeader->nFilledLen; Loading
media/libstagefright/codecs/aacdec/SoftAAC2.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -367,6 +367,7 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) { inHeader->nOffset += adtsHeaderSize; inHeader->nFilledLen -= adtsHeaderSize; } } if (signalError) { mSignalledError = true; Loading @@ -378,7 +379,6 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) { return; } } } else { inBuffer[0] = inHeader->pBuffer + inHeader->nOffset; inBufferLength[0] = inHeader->nFilledLen; Loading