summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorDeva Ramasubramanian <dramasub@codeaurora.org>2010-11-01 13:20:18 -0700
committerSteve Kondik <shade@chemlab.org>2011-11-13 19:09:02 -0800
commitc241a242a31bd26ed1a9e528bbd11fb94683001b (patch)
treedff1f6f33c19cba9e5b13971b3d2321434e552eb /media
parentbc56f933dc72929795bf979b23ec6d03a87194e6 (diff)
downloadframeworks_base-c241a242a31bd26ed1a9e528bbd11fb94683001b.zip
frameworks_base-c241a242a31bd26ed1a9e528bbd11fb94683001b.tar.gz
frameworks_base-c241a242a31bd26ed1a9e528bbd11fb94683001b.tar.bz2
mediaplayer: Switch to PAUSE state on suspend and STARTED on resume
- After repeated suspend/resume, the pause button will no longer work due to state mismatch in mediaplayer. - Issue is caused due to a race condition between isPlaying() and AwesomePlayer resume. If isPlaying() is called before Awesomeplayer is ready, mediaplayer goes into a dead end Pause state. It is not possible to come out of this state unless we pause. But we can't pause because mediaplayer thinks that it is already paused. - This fix attempts to prevent the mismatch by changing the state to PAUSE on suspend and STARTED on resume. Change-Id: I24ac964efc0cd70d79cafc870ceb2422473b5555 CRs-fixed: 260443, 260600
Diffstat (limited to 'media')
-rw-r--r--media/libmedia/mediaplayer.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp
index 1340acb..4527d6f 100644
--- a/media/libmedia/mediaplayer.cpp
+++ b/media/libmedia/mediaplayer.cpp
@@ -177,12 +177,16 @@ status_t MediaPlayer::invoke(const Parcel& request, Parcel *reply)
status_t MediaPlayer::suspend() {
Mutex::Autolock _l(mLock);
- return mPlayer->suspend();
+ status_t rv = mPlayer->suspend();
+ mCurrentState = (rv == OK ? MEDIA_PLAYER_PAUSED : MEDIA_PLAYER_STATE_ERROR);
+ return rv;
}
status_t MediaPlayer::resume() {
Mutex::Autolock _l(mLock);
- return mPlayer->resume();
+ status_t rv = mPlayer->resume();
+ mCurrentState = (rv == OK ? MEDIA_PLAYER_STARTED : MEDIA_PLAYER_STATE_ERROR);
+ return rv;
}
status_t MediaPlayer::setMetadataFilter(const Parcel& filter)