Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd8a36fd authored by Andreas Huber's avatar Andreas Huber Committed by Android (Google) Code Review
Browse files

Merge "Add more verbose ADTS error logging to SoftAAC." into jb-dev

parents 91bfadb4 e35ac286
Loading
Loading
Loading
Loading
+38 −12
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@

#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/hexdump.h>
#include <media/stagefright/MediaErrors.h>

namespace android {

@@ -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 =
@@ -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;
+8 −8
Original line number Diff line number Diff line
@@ -367,6 +367,7 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) {
                    inHeader->nOffset += adtsHeaderSize;
                    inHeader->nFilledLen -= adtsHeaderSize;
                }
            }

            if (signalError) {
                mSignalledError = true;
@@ -378,7 +379,6 @@ void SoftAAC2::onQueueFilled(OMX_U32 portIndex) {

                return;
            }
            }
        } else {
            inBuffer[0] = inHeader->pBuffer + inHeader->nOffset;
            inBufferLength[0] = inHeader->nFilledLen;