diff options
| author | 2011-11-30 09:55:47 -0800 | |
|---|---|---|
| committer | 2011-11-30 09:55:47 -0800 | |
| commit | 7ba11ef4a00a98068a16b8d75600886ee4a910cc (patch) | |
| tree | bbdad886e8ebaa4f848a859c5b158f01e2f4ea86 | |
| parent | cdc8a01e26d538e9fcc4e7c4dac86e30b76d70a1 (diff) | |
| parent | db85b54395c2866f07178558079cbc1813ff420c (diff) | |
Merge "resolved conflicts for merge of 3d630e86 to master"
| -rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 15 | ||||
| -rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 7 |
2 files changed, 20 insertions, 2 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index 0059dc841eb5..03aa42e99828 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -463,11 +463,24 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { { ALOGV("kWhatReset"); + if (mRenderer != NULL) { + // There's an edge case where the renderer owns all output + // buffers and is paused, therefore the decoder will not read + // more input data and will never encounter the matching + // discontinuity. To avoid this, we resume the renderer. + + if (mFlushingAudio == AWAITING_DISCONTINUITY + || mFlushingVideo == AWAITING_DISCONTINUITY) { + mRenderer->resume(); + } + } + if (mFlushingAudio != NONE || mFlushingVideo != NONE) { // We're currently flushing, postpone the reset until that's // completed. - ALOGV("postponing reset"); + ALOGV("postponing reset mFlushingAudio=%d, mFlushingVideo=%d", + mFlushingAudio, mFlushingVideo); mResetPostponed = true; break; diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 1731728e82c0..d0d9ca65fd71 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -628,11 +628,16 @@ void NuPlayer::Renderer::onPause() { mAudioSink->pause(); } + ALOGV("now paused audio queue has %d entries, video has %d entries", + mAudioQueue.size(), mVideoQueue.size()); + mPaused = true; } void NuPlayer::Renderer::onResume() { - CHECK(mPaused); + if (!mPaused) { + return; + } if (mHasAudio) { mAudioSink->start(); |