Loading media/java/android/media/MediaPlayer.java +31 −2 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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. Loading Loading @@ -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(); } Loading @@ -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, Loading Loading @@ -1229,6 +1244,9 @@ public class MediaPlayer implements SubtitleController.Listener * initialized. */ public void stop() throws IllegalStateException { synchronized (mPreparing) { mPreparing.set(false); } stayAwake(false); _stop(); } Loading Loading @@ -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; Loading @@ -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) { Loading Loading @@ -2804,7 +2828,12 @@ public class MediaPlayer implements SubtitleController.Listener } switch(msg.what) { case MEDIA_PREPARED: synchronized (mPreparing) { if (mPreparing.get()) { scanInternalSubtitleTracks(); mPreparing.set(false); } } if (mOnPreparedListener != null) mOnPreparedListener.onPrepared(mMediaPlayer); return; Loading media/jni/android_media_MediaPlayer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1045,7 +1045,7 @@ static JNINativeMethod gMethods[] = { {"_setDataSource", "(Landroid/media/MediaDataSource;)V",(void *)android_media_MediaPlayer_setDataSourceCallback }, {"_setVideoSurface", "(Landroid/view/Surface;)V", (void *)android_media_MediaPlayer_setVideoSurface}, {"_prepare", "()V", (void *)android_media_MediaPlayer_prepare}, {"prepareAsync", "()V", (void *)android_media_MediaPlayer_prepareAsync}, {"_prepareAsync", "()V", (void *)android_media_MediaPlayer_prepareAsync}, {"_start", "()V", (void *)android_media_MediaPlayer_start}, {"_stop", "()V", (void *)android_media_MediaPlayer_stop}, {"getVideoWidth", "()I", (void *)android_media_MediaPlayer_getVideoWidth}, Loading Loading
media/java/android/media/MediaPlayer.java +31 −2 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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. Loading Loading @@ -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(); } Loading @@ -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, Loading Loading @@ -1229,6 +1244,9 @@ public class MediaPlayer implements SubtitleController.Listener * initialized. */ public void stop() throws IllegalStateException { synchronized (mPreparing) { mPreparing.set(false); } stayAwake(false); _stop(); } Loading Loading @@ -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; Loading @@ -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) { Loading Loading @@ -2804,7 +2828,12 @@ public class MediaPlayer implements SubtitleController.Listener } switch(msg.what) { case MEDIA_PREPARED: synchronized (mPreparing) { if (mPreparing.get()) { scanInternalSubtitleTracks(); mPreparing.set(false); } } if (mOnPreparedListener != null) mOnPreparedListener.onPrepared(mMediaPlayer); return; Loading
media/jni/android_media_MediaPlayer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1045,7 +1045,7 @@ static JNINativeMethod gMethods[] = { {"_setDataSource", "(Landroid/media/MediaDataSource;)V",(void *)android_media_MediaPlayer_setDataSourceCallback }, {"_setVideoSurface", "(Landroid/view/Surface;)V", (void *)android_media_MediaPlayer_setVideoSurface}, {"_prepare", "()V", (void *)android_media_MediaPlayer_prepare}, {"prepareAsync", "()V", (void *)android_media_MediaPlayer_prepareAsync}, {"_prepareAsync", "()V", (void *)android_media_MediaPlayer_prepareAsync}, {"_start", "()V", (void *)android_media_MediaPlayer_start}, {"_stop", "()V", (void *)android_media_MediaPlayer_stop}, {"getVideoWidth", "()I", (void *)android_media_MediaPlayer_getVideoWidth}, Loading