summaryrefslogtreecommitdiffstats
path: root/media/java
diff options
context:
space:
mode:
authorRobert Shih <robertshih@google.com>2015-05-21 15:15:50 -0700
committerRobert Shih <robertshih@google.com>2015-05-21 16:43:10 -0700
commit410239b6bf0318d1fc8fa32da1fdedb4173e648f (patch)
tree0ad6d1d5a799a10ac202dbc480cb4245df8e45d8 /media/java
parent22c228f20360e1eb37f156182f3f0c3cac39589a (diff)
downloadframeworks_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.java33
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;