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

Commit 3f26cade authored by Andreas Huber's avatar Andreas Huber
Browse files

Ignore corrupt aac audio frames and substitute silence.

Change-Id: I544f98a5c00d912061db7921fc4518435209b168
related-to-bug: 2575976
parent 63284ede
Loading
Loading
Loading
Loading
+19 −12
Original line number Diff line number Diff line
@@ -203,18 +203,24 @@ 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);

    if (mInputBuffer != NULL) {
        mInputBuffer->set_range(
                mInputBuffer->range_offset() + mConfig->inputBufferUsedLength,
                mInputBuffer->range_length() - mConfig->inputBufferUsedLength);
@@ -223,6 +229,7 @@ status_t AACDecoder::read(
            mInputBuffer->release();
            mInputBuffer = NULL;
        }
    }

    buffer->meta_data()->setInt64(
            kKeyTime,