NuPlayer: fix behavior of setPlaybackParams.
setPlaybackParams with zero speed is equivalent to pause().
setPlaybackParams with non-zero speed should start playback when player has
been prepared.
Bug: 29032949
Change-Id: Ib7738da653208f4fe5a8f1d7cf98b8479b3dc798
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index 9f63027..eb77af5 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -188,6 +188,7 @@
mPlaybackSettings(AUDIO_PLAYBACK_RATE_DEFAULT),
mVideoFpsHint(-1.f),
mStarted(false),
+ mPrepared(false),
mResetting(false),
mSourceStarted(false),
mPaused(false),
@@ -768,9 +769,17 @@
newRate.mSpeed = mPlaybackSettings.mSpeed;
mPlaybackSettings = newRate;
} else { /* rate.mSpeed != 0.f */
- onResume();
- mPausedByClient = false;
mPlaybackSettings = rate;
+ if (mStarted) {
+ // do not resume yet if the source is still buffering
+ if (!mPausedForBuffering) {
+ onResume();
+ }
+ } else if (mPrepared) {
+ onStart();
+ }
+
+ mPausedByClient = false;
}
}
@@ -2012,6 +2021,7 @@
}
mStarted = false;
+ mPrepared = false;
mResetting = false;
mSourceStarted = false;
}
@@ -2124,6 +2134,8 @@
new FlushDecoderAction(FLUSH_CMD_SHUTDOWN /* audio */,
FLUSH_CMD_SHUTDOWN /* video */));
processDeferredActions();
+ } else {
+ mPrepared = true;
}
sp<NuPlayerDriver> driver = mDriver.promote();