diff options
author | Robert Shih <robertshih@google.com> | 2015-05-21 15:15:50 -0700 |
---|---|---|
committer | Robert Shih <robertshih@google.com> | 2015-05-21 16:43:10 -0700 |
commit | 410239b6bf0318d1fc8fa32da1fdedb4173e648f (patch) | |
tree | 0ad6d1d5a799a10ac202dbc480cb4245df8e45d8 /media/java | |
parent | 22c228f20360e1eb37f156182f3f0c3cac39589a (diff) | |
download | frameworks_base-410239b6bf0318d1fc8fa32da1fdedb4173e648f.zip frameworks_base-410239b6bf0318d1fc8fa32da1fdedb4173e648f.tar.gz frameworks_base-410239b6bf0318d1fc8fa32da1fdedb4173e648f.tar.bz2 |
MediaPlayer: add mPreparing to weed out unwanted prepared messages
Bug: 21266735
Change-Id: Ie4fe76533c9b7f505c57ba63df7992f2490942cc
Diffstat (limited to 'media/java')
-rw-r--r-- | media/java/android/media/MediaPlayer.java | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index f148606..c24077e 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -77,6 +77,7 @@ import java.util.Map; import java.util.Scanner; import java.util.Set; import java.util.Vector; +import java.util.concurrent.atomic.AtomicBoolean; import java.lang.ref.WeakReference; /** @@ -623,6 +624,9 @@ public class MediaPlayer implements SubtitleController.Listener private int mUsage = -1; private boolean mBypassInterruptionPolicy; + // use AtomicBoolean instead of boolean so we can use the same member both as a flag and a lock. + private AtomicBoolean mPreparing = new AtomicBoolean(); + /** * Default constructor. Consider using one of the create() methods for * synchronously instantiating a MediaPlayer from a Uri or resource. @@ -1162,6 +1166,10 @@ public class MediaPlayer implements SubtitleController.Listener * @throws IllegalStateException if it is called in an invalid state */ public void prepare() throws IOException, IllegalStateException { + // The synchronous version of prepare also recieves a MEDIA_PREPARED message. + synchronized (mPreparing) { + mPreparing.set(true); + } _prepare(); scanInternalSubtitleTracks(); } @@ -1178,7 +1186,14 @@ public class MediaPlayer implements SubtitleController.Listener * * @throws IllegalStateException if it is called in an invalid state */ - public native void prepareAsync() throws IllegalStateException; + public void prepareAsync() throws IllegalStateException { + synchronized (mPreparing) { + mPreparing.set(true); + } + _prepareAsync(); + } + + private native void _prepareAsync() throws IllegalStateException; /** * Starts or resumes playback. If playback had previously been paused, @@ -1229,6 +1244,9 @@ public class MediaPlayer implements SubtitleController.Listener * initialized. */ public void stop() throws IllegalStateException { + synchronized (mPreparing) { + mPreparing.set(false); + } stayAwake(false); _stop(); } @@ -1658,6 +1676,9 @@ public class MediaPlayer implements SubtitleController.Listener * at the same time. */ public void release() { + synchronized (mPreparing) { + mPreparing.set(false); + } stayAwake(false); updateSurfaceScreenOn(); mOnPreparedListener = null; @@ -1684,6 +1705,9 @@ public class MediaPlayer implements SubtitleController.Listener * data source and calling prepare(). */ public void reset() { + synchronized (mPreparing) { + mPreparing.set(false); + } mSelectedSubtitleTrackIndex = -1; synchronized(mOpenSubtitleSources) { for (final InputStream is: mOpenSubtitleSources) { @@ -2804,7 +2828,12 @@ public class MediaPlayer implements SubtitleController.Listener } switch(msg.what) { case MEDIA_PREPARED: - scanInternalSubtitleTracks(); + synchronized (mPreparing) { + if (mPreparing.get()) { + scanInternalSubtitleTracks(); + mPreparing.set(false); + } + } if (mOnPreparedListener != null) mOnPreparedListener.onPrepared(mMediaPlayer); return; |