Merge "Ignore corrupt aac audio frames and substitute silence." into froyo

This commit is contained in:
Andreas Huber
2010-04-12 10:11:32 -07:00
committed by Android (Google) Code Review

View File

@@ -203,25 +203,32 @@ status_t AACDecoder::read(
Int decoderErr = PVMP4AudioDecodeFrame(mConfig, mDecoderBuf); Int decoderErr = PVMP4AudioDecodeFrame(mConfig, mDecoderBuf);
size_t numOutBytes =
mConfig->frameLength * sizeof(int16_t) * mConfig->desiredChannels;
if (decoderErr != MP4AUDEC_SUCCESS) { if (decoderErr != MP4AUDEC_SUCCESS) {
LOGE("AAC decoder returned error %d", decoderErr); LOGW("AAC decoder returned error %d, substituting silence", decoderErr);
buffer->release(); memset(buffer->data(), 0, numOutBytes);
buffer = NULL;
return ERROR_MALFORMED; // Discard input buffer.
}
buffer->set_range(
0, mConfig->frameLength * sizeof(int16_t) * mConfig->desiredChannels);
mInputBuffer->set_range(
mInputBuffer->range_offset() + mConfig->inputBufferUsedLength,
mInputBuffer->range_length() - mConfig->inputBufferUsedLength);
if (mInputBuffer->range_length() == 0) {
mInputBuffer->release(); mInputBuffer->release();
mInputBuffer = NULL; mInputBuffer = NULL;
// fall through
}
buffer->set_range(0, numOutBytes);
if (mInputBuffer != NULL) {
mInputBuffer->set_range(
mInputBuffer->range_offset() + mConfig->inputBufferUsedLength,
mInputBuffer->range_length() - mConfig->inputBufferUsedLength);
if (mInputBuffer->range_length() == 0) {
mInputBuffer->release();
mInputBuffer = NULL;
}
} }
buffer->meta_data()->setInt64( buffer->meta_data()->setInt64(