Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 67ba691a authored by Robert Shih's avatar Robert Shih Committed by Android (Google) Code Review
Browse files

Merge "MediaPlayer: add mPreparing to weed out unwanted prepared messages" into mnc-dev

parents b0eb08b5 410239b6
Loading
Loading
Loading
Loading
+31 −2
Original line number Diff line number Diff line
@@ -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:
                synchronized (mPreparing) {
                    if (mPreparing.get()) {
                        scanInternalSubtitleTracks();
                        mPreparing.set(false);
                    }
                }
                if (mOnPreparedListener != null)
                    mOnPreparedListener.onPrepared(mMediaPlayer);
                return;
+1 −1
Original line number Diff line number Diff line
@@ -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},