summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
diff options
context:
space:
mode:
authorChong Zhang <chz@google.com>2014-11-26 15:08:34 -0800
committerChong Zhang <chz@google.com>2014-12-01 10:54:55 -0800
commitf8d717772f6d185cb07720cd5091df9b7d612e0b (patch)
tree290eabe4ea61e269b21df477521c4ac211d4b364 /media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
parentbc0f452b9a76dd8c8244e775bc9c5aa85cae3ddf (diff)
downloadframeworks_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.cpp25
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