summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
index 2f60072..c4bbcdf 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
@@ -287,8 +287,9 @@ status_t NuPlayerDriver::stop() {
// fall through
case STATE_PAUSED:
+ mState = STATE_STOPPED;
notifyListener_l(MEDIA_STOPPED);
- // fall through
+ break;
case STATE_PREPARED:
case STATE_STOPPED:
@@ -314,6 +315,8 @@ status_t NuPlayerDriver::pause() {
return OK;
case STATE_RUNNING:
+ setPauseStartedTimeIfNeeded();
+ mState = STATE_PAUSED;
notifyListener_l(MEDIA_PAUSED);
mPlayer->pause();
break;
@@ -322,9 +325,6 @@ status_t NuPlayerDriver::pause() {
return INVALID_OPERATION;
}
- setPauseStartedTimeIfNeeded();
- mState = STATE_PAUSED;
-
return OK;
}
@@ -675,15 +675,17 @@ void NuPlayerDriver::notifyPrepareCompleted(status_t err) {
mAsyncResult = err;
if (err == OK) {
+ // update state before notifying client, so that if client calls back into NuPlayerDriver
+ // in response, NuPlayerDriver has the right state
+ mState = STATE_PREPARED;
if (mIsAsyncPrepare) {
notifyListener_l(MEDIA_PREPARED);
}
- mState = STATE_PREPARED;
} else {
+ mState = STATE_UNPREPARED;
if (mIsAsyncPrepare) {
notifyListener_l(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, err);
}
- mState = STATE_UNPREPARED;
}
mCondition.broadcast();