From a31335a4ec96ba351f25f3b26fa79a78c2723a13 Mon Sep 17 00:00:00 2001 From: Andy Hung Date: Wed, 20 Aug 2014 17:37:59 -0700 Subject: Fix SoundPool and MediaPlayerService buffer overflow Overflow occurs when SoundPool sample tracks cannot fit in the MediaPlayerService AudioCache buffer. Unnecessary decoding occurred with AwesomePlayer and an assert failure occurred with NuPlayer. NuPlayerRenderer is also tweaked to handle the latter case. Bug: 17122639 Change-Id: I4d25d3e2c0c62e36a91da6bf969edabddc2ebbb0 --- media/libmediaplayerservice/MediaPlayerService.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'media/libmediaplayerservice/MediaPlayerService.h') diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h index 406e3f6..4fe7075 100644 --- a/media/libmediaplayerservice/MediaPlayerService.h +++ b/media/libmediaplayerservice/MediaPlayerService.h @@ -194,7 +194,7 @@ class MediaPlayerService : public BnMediaPlayerService virtual ssize_t bufferSize() const { return frameSize() * mFrameCount; } virtual ssize_t frameCount() const { return mFrameCount; } virtual ssize_t channelCount() const { return (ssize_t)mChannelCount; } - virtual ssize_t frameSize() const { return ssize_t(mChannelCount * ((mFormat == AUDIO_FORMAT_PCM_16_BIT)?sizeof(int16_t):sizeof(u_int8_t))); } + virtual ssize_t frameSize() const { return (ssize_t)mFrameSize; } virtual uint32_t latency() const; virtual float msecsPerFrame() const; virtual status_t getPosition(uint32_t *position) const; @@ -244,6 +244,7 @@ class MediaPlayerService : public BnMediaPlayerService ssize_t mFrameCount; uint32_t mSampleRate; uint32_t mSize; + size_t mFrameSize; int mError; bool mCommandComplete; -- cgit v1.1