diff options
author | Eric Laurent <elaurent@google.com> | 2011-09-27 09:48:56 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2011-09-27 10:23:38 -0700 |
commit | 9cb839a0fcc98fe4278b39afb8b6d664c04f1673 (patch) | |
tree | f5847d0d1994489a829368b12c4998dcf229c926 /media | |
parent | ece731de0c0af30917316d55313f25c56f91960d (diff) | |
download | frameworks_av-9cb839a0fcc98fe4278b39afb8b6d664c04f1673.zip frameworks_av-9cb839a0fcc98fe4278b39afb8b6d664c04f1673.tar.gz frameworks_av-9cb839a0fcc98fe4278b39afb8b6d664c04f1673.tar.bz2 |
Fix issue 5373048: AudioCache decode errors
When decoding a file for the SoundPool, do not
reject the entire file in case of error but
return what was decoded so far instead.
Change-Id: Iff199a1b6a4c8e064e42a0dfe0704e0ae36a27fd
Diffstat (limited to 'media')
-rw-r--r-- | media/libmediaplayerservice/MediaPlayerService.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index 0386d4b..b5eef94 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -52,6 +52,7 @@ #include <media/Metadata.h> #include <media/AudioTrack.h> #include <media/MemoryLeakTrackUtil.h> +#include <media/stagefright/MediaErrors.h> #include <system/audio.h> @@ -1132,7 +1133,11 @@ sp<IMemory> MediaPlayerService::decode(const char* url, uint32_t *pSampleRate, i player->start(); LOGV("wait for playback complete"); - if (cache->wait() != NO_ERROR) goto Exit; + cache->wait(); + // in case of error, return what was successfully decoded. + if (cache->size() == 0) { + goto Exit; + } mem = new MemoryBase(cache->getHeap(), 0, cache->size()); *pSampleRate = cache->sampleRate(); @@ -1175,7 +1180,11 @@ sp<IMemory> MediaPlayerService::decode(int fd, int64_t offset, int64_t length, u player->start(); LOGV("wait for playback complete"); - if (cache->wait() != NO_ERROR) goto Exit; + cache->wait(); + // in case of error, return what was successfully decoded. + if (cache->size() == 0) { + goto Exit; + } mem = new MemoryBase(cache->getHeap(), 0, cache->size()); *pSampleRate = cache->sampleRate(); |