diff options
author | Wei Jia <wjia@google.com> | 2014-06-04 16:21:56 -0700 |
---|---|---|
committer | Wei Jia <wjia@google.com> | 2014-06-10 18:50:52 +0000 |
commit | 6d96582e2310212381489da68bee74c44a0a5926 (patch) | |
tree | 754e010efb55cd5cbb07d331870cccc259b734d4 /media | |
parent | d8754e07e23eecb68068c0c392aeb0428c529e4e (diff) | |
download | frameworks_av-6d96582e2310212381489da68bee74c44a0a5926.zip frameworks_av-6d96582e2310212381489da68bee74c44a0a5926.tar.gz frameworks_av-6d96582e2310212381489da68bee74c44a0a5926.tar.bz2 |
Added paused state to NuPlayerDecoder
This prevents decoder from requesting new buffer until the decoder
is resumed, and prevents processing a potential DISCONTINUITY while
the player is still flushing.
Bug: 13133027
Change-Id: I2f9fa9f00c8583aa6908809cb7c31ddde07cfaf0
(cherry picked from commit 704e72658b1082264a26a83c50046da34f07d1a1)
Diffstat (limited to 'media')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp | 20 | ||||
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h | 2 |
2 files changed, 20 insertions, 2 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp index 469c9ca..cfbf282 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp @@ -37,6 +37,7 @@ NuPlayer::Decoder::Decoder( : mNotify(notify), mNativeWindow(nativeWindow), mBufferGeneration(0), + mPaused(true), mComponentName("decoder") { // Every decoder has its own looper because MediaCodec operations // are blocking, but NuPlayer needs asynchronous operations. @@ -112,6 +113,7 @@ void NuPlayer::Decoder::onConfigure(const sp<AMessage> &format) { mOutputBuffers.size()); requestCodecNotification(); + mPaused = false; } void NuPlayer::Decoder::requestCodecNotification() { @@ -352,6 +354,11 @@ void NuPlayer::Decoder::onFlush() { sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatFlushCompleted); notify->post(); + mPaused = true; +} + +void NuPlayer::Decoder::onResume() { + mPaused = false; } void NuPlayer::Decoder::onShutdown() { @@ -380,6 +387,7 @@ void NuPlayer::Decoder::onShutdown() { sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatShutdownCompleted); notify->post(); + mPaused = true; } void NuPlayer::Decoder::onMessageReceived(const sp<AMessage> &msg) { @@ -397,7 +405,9 @@ void NuPlayer::Decoder::onMessageReceived(const sp<AMessage> &msg) { case kWhatCodecNotify: { if (!isStaleReply(msg)) { - while (handleAnInputBuffer()) { + if (!mPaused) { + while (handleAnInputBuffer()) { + } } while (handleAnOutputBuffer()) { @@ -430,6 +440,12 @@ void NuPlayer::Decoder::onMessageReceived(const sp<AMessage> &msg) { break; } + case kWhatResume: + { + onResume(); + break; + } + case kWhatShutdown: { onShutdown(); @@ -447,7 +463,7 @@ void NuPlayer::Decoder::signalFlush() { } void NuPlayer::Decoder::signalResume() { - // nothing to do + (new AMessage(kWhatResume, id()))->post(); } void NuPlayer::Decoder::initiateShutdown() { diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h index 94243fc..2892584 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h @@ -87,11 +87,13 @@ private: void onConfigure(const sp<AMessage> &format); void onFlush(); + void onResume(); void onInputBufferFilled(const sp<AMessage> &msg); void onRenderBuffer(const sp<AMessage> &msg); void onShutdown(); int32_t mBufferGeneration; + bool mPaused; AString mComponentName; bool supportsSeamlessAudioFormatChange(const sp<AMessage> &targetFormat) const; |