diff options
| author | Andreas Huber <andih@google.com> | 2010-02-24 14:32:16 -0800 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-02-24 14:32:16 -0800 |
| commit | 62be8e17b07c1db834215a66d67db001b23405b7 (patch) | |
| tree | c230d88b5265b3c3a0d5089f0ce29ed860c414e6 | |
| parent | e0e6a9c0fc4cda5ade07997d3ea4a53afb8762fd (diff) | |
| parent | ff0c5c1929f37f2b8034cd7be8831d9a06e6a322 (diff) | |
| download | frameworks_base-62be8e17b07c1db834215a66d67db001b23405b7.zip frameworks_base-62be8e17b07c1db834215a66d67db001b23405b7.tar.gz frameworks_base-62be8e17b07c1db834215a66d67db001b23405b7.tar.bz2 | |
Merge "Recover from a certain mp3 decoder error instead of signalling an error and thereby stopping decoding."
| -rw-r--r-- | media/libstagefright/codecs/mp3dec/MP3Decoder.cpp | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/media/libstagefright/codecs/mp3dec/MP3Decoder.cpp b/media/libstagefright/codecs/mp3dec/MP3Decoder.cpp index f1f7194..6d6e408 100644 --- a/media/libstagefright/codecs/mp3dec/MP3Decoder.cpp +++ b/media/libstagefright/codecs/mp3dec/MP3Decoder.cpp @@ -160,14 +160,25 @@ status_t MP3Decoder::read( mConfig->outputFrameSize = buffer->size() / sizeof(int16_t); mConfig->pOutputBuffer = static_cast<int16_t *>(buffer->data()); - if (pvmp3_framedecoder(mConfig, mDecoderBuf) != NO_DECODING_ERROR) { - buffer->release(); - buffer = NULL; + ERROR_CODE decoderErr; + if ((decoderErr = pvmp3_framedecoder(mConfig, mDecoderBuf)) + != NO_DECODING_ERROR) { + LOGV("mp3 decoder returned error %d", decoderErr); - mInputBuffer->release(); - mInputBuffer = NULL; + if (decoderErr != NO_ENOUGH_MAIN_DATA_ERROR) { + buffer->release(); + buffer = NULL; + + mInputBuffer->release(); + mInputBuffer = NULL; + + return UNKNOWN_ERROR; + } - return UNKNOWN_ERROR; + // This is recoverable, just ignore the current frame and + // play silence instead. + memset(buffer->data(), 0, mConfig->outputFrameSize); + mConfig->inputBufferUsedLength = mInputBuffer->range_length(); } buffer->set_range( |
