From 9968a36f297e299578b4f4726832ac8323a08c6f Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Tue, 27 Sep 2011 09:48:56 -0700 Subject: 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 --- media/libmediaplayerservice/MediaPlayerService.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index 0386d4b65987..b5eef94a4c00 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include @@ -1132,7 +1133,11 @@ sp 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 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(); -- cgit v1.2.3-59-g8ed1b