diff options
author | Deva Ramasubramanian <dramasub@codeaurora.org> | 2010-11-01 13:20:18 -0700 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2011-11-13 19:09:02 -0800 |
commit | c241a242a31bd26ed1a9e528bbd11fb94683001b (patch) | |
tree | dff1f6f33c19cba9e5b13971b3d2321434e552eb /media | |
parent | bc56f933dc72929795bf979b23ec6d03a87194e6 (diff) | |
download | frameworks_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.cpp | 8 |
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) |