diff options
author | Andy Hung <hunga@google.com> | 2014-12-03 11:47:36 -0800 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2014-12-03 16:13:50 -0800 |
commit | 202bce11a7f66f27e6dbb6d154ddc123aa62513d (patch) | |
tree | 390b83dacc286717243ba6e3c1173c9e2f01b376 /media/libmediaplayerservice/nuplayer/NuPlayerDecoderBase.cpp | |
parent | 9a1c8892f6835325db6931529dc74bf98cf0aee8 (diff) | |
download | frameworks_av-202bce11a7f66f27e6dbb6d154ddc123aa62513d.zip frameworks_av-202bce11a7f66f27e6dbb6d154ddc123aa62513d.tar.gz frameworks_av-202bce11a7f66f27e6dbb6d154ddc123aa62513d.tar.bz2 |
Fix NuPlayer assertion on failure to create AudioTrack
Under heavy media load or monkey/stress testing, more than
32 AudioTracks may be created or memory resources may be scarce.
Remove the assertion on failure to create AudioTrack
and signal MEDIA_ERROR.
Bug: 17319843
Change-Id: I5d4e200b5f50d800046851a33e035cdc6ff10075
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerDecoderBase.cpp')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerDecoderBase.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderBase.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderBase.cpp index 4164350..d56fc4d 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderBase.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderBase.cpp @@ -28,8 +28,10 @@ namespace android { -NuPlayer::DecoderBase::DecoderBase() - : mRequestInputBuffersPending(false) { +NuPlayer::DecoderBase::DecoderBase(const sp<AMessage> ¬ify) + : mNotify(notify), + mBufferGeneration(0), + mRequestInputBuffersPending(false) { // Every decoder has its own looper because MediaCodec operations // are blocking, but NuPlayer needs asynchronous operations. mDecoderLooper = new ALooper; @@ -180,5 +182,19 @@ void NuPlayer::DecoderBase::onMessageReceived(const sp<AMessage> &msg) { } } +void NuPlayer::DecoderBase::handleError(int32_t err) +{ + // We cannot immediately release the codec due to buffers still outstanding + // in the renderer. We signal to the player the error so it can shutdown/release the + // decoder after flushing and increment the generation to discard unnecessary messages. + + ++mBufferGeneration; + + sp<AMessage> notify = mNotify->dup(); + notify->setInt32("what", kWhatError); + notify->setInt32("err", err); + notify->post(); +} + } // namespace android |