diff options
author | Chong Zhang <chz@google.com> | 2014-11-26 15:08:34 -0800 |
---|---|---|
committer | Chong Zhang <chz@google.com> | 2014-12-01 10:54:55 -0800 |
commit | f8d717772f6d185cb07720cd5091df9b7d612e0b (patch) | |
tree | 290eabe4ea61e269b21df477521c4ac211d4b364 /media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp | |
parent | bc0f452b9a76dd8c8244e775bc9c5aa85cae3ddf (diff) | |
download | frameworks_av-f8d717772f6d185cb07720cd5091df9b7d612e0b.zip frameworks_av-f8d717772f6d185cb07720cd5091df9b7d612e0b.tar.gz frameworks_av-f8d717772f6d185cb07720cd5091df9b7d612e0b.tar.bz2 |
notify seek complete upon first video output frame
Bug: 18541814
Change-Id: Ie4e0976885f26eb253460eab371cb181ea85f2db
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp index 0439a9a..012d33e 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp @@ -58,6 +58,7 @@ NuPlayer::Decoder::Decoder( mFormatChangePending(false), mBufferGeneration(0), mPaused(true), + mResumePending(false), mComponentName("decoder") { mCodecLooper = new ALooper; mCodecLooper->setName("NPDecoder-CL"); @@ -208,6 +209,7 @@ void NuPlayer::Decoder::onConfigure(const sp<AMessage> &format) { requestCodecNotification(); } mPaused = false; + mResumePending = false; } void NuPlayer::Decoder::onSetRenderer(const sp<Renderer> &renderer) { @@ -226,8 +228,12 @@ void NuPlayer::Decoder::onGetInputBuffers( } } -void NuPlayer::Decoder::onResume() { +void NuPlayer::Decoder::onResume(bool notifyComplete) { mPaused = false; + + if (notifyComplete) { + mResumePending = true; + } } void NuPlayer::Decoder::onFlush(bool notifyComplete) { @@ -265,6 +271,10 @@ void NuPlayer::Decoder::onFlush(bool notifyComplete) { void NuPlayer::Decoder::onShutdown(bool notifyComplete) { status_t err = OK; + + // if there is a pending resume request, notify complete now + notifyResumeCompleteIfNecessary(); + if (mCodec != NULL) { err = mCodec->release(); mCodec = NULL; @@ -494,6 +504,9 @@ bool NuPlayer::Decoder::handleAnOutputBuffer() { mSkipRenderingUntilMediaTimeUs = -1; } + // wait until 1st frame comes out to signal resume complete + notifyResumeCompleteIfNecessary(); + if (mRenderer != NULL) { // send the buffer to renderer. mRenderer->queueBuffer(mIsAudio, buffer, reply); @@ -884,5 +897,15 @@ void NuPlayer::Decoder::rememberCodecSpecificData(const sp<AMessage> &format) { } } +void NuPlayer::Decoder::notifyResumeCompleteIfNecessary() { + if (mResumePending) { + mResumePending = false; + + sp<AMessage> notify = mNotify->dup(); + notify->setInt32("what", kWhatResumeCompleted); + notify->post(); + } +} + } // namespace android |