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

Commit e35ac286 authored by Andreas Huber's avatar Andreas Huber
Browse files

Add more verbose ADTS error logging to SoftAAC.

and fix the corresponding code in SoftAAC2.

Change-Id: I6c745fb6e8e093708fdfe2861963b0a35fa7b912
related-to-bug: 6519161
parent 8370c7ad
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;