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

Commit 445198cc authored by Wei Jia's avatar Wei Jia Committed by android-build-merger
Browse files

Merge "MediaPlayer2Impl: fix getBufferedPosition" into pi-dev am: 2e94d509

am: 5d129b90

Change-Id: Idee279d8080e6a74cb0b080c9f89899ee1d5a17d
parents 1f703b2a 5d129b90
Loading
Loading
Loading
Loading
+23 −11
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.Vector;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger;


/**
@@ -102,8 +103,6 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
    private boolean mScreenOnWhilePlaying;
    private boolean mStayAwake;
    private int mStreamType = AudioManager.USE_DEFAULT_STREAM_TYPE;
    private int mUsage = -1;
    private boolean mBypassInterruptionPolicy;
    private final CloseGuard mGuard = CloseGuard.get();

    private final Object mSrcLock = new Object();
@@ -117,6 +116,9 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
    private boolean mNextSourcePlayPending = false;
    //--- guarded by |mSrcLock| end

    private AtomicInteger mBufferedPercentageCurrent;
    private AtomicInteger mBufferedPercentageNext;

    // Modular DRM
    private final Object mDrmLock = new Object();
    //--- guarded by |mDrmLock| start
@@ -306,9 +308,8 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
     */
    @Override
    public long getBufferedPosition() {
        // TODO: either get buffered position from native code, or cache BUFFERING_UPDATE
        // number and convert it to buffered position.
        return 0;
        // Use cached buffered percent for now.
        return getDuration() * mBufferedPercentageCurrent.get() / 100;
    }

    @Override
@@ -360,9 +361,6 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
            final String msg = "Cannot set AudioAttributes to null";
            throw new IllegalArgumentException(msg);
        }
        mUsage = attributes.getUsage();
        mBypassInterruptionPolicy = (attributes.getAllFlags()
                & AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY) != 0;
        Parcel pattributes = Parcel.obtain();
        attributes.writeToParcel(pattributes, AudioAttributes.FLATTEN_TAGS);
        setParameter(KEY_PARAMETER_AUDIO_ATTRIBUTES, pattributes);
@@ -981,8 +979,10 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
            // Switch to next source only when it's in prepared state.
            mCurrentDSD = mNextDSDs.get(0);
            mCurrentSrcId = mNextSrcId;
            mBufferedPercentageCurrent.set(mBufferedPercentageNext.get());
            mNextDSDs.remove(0);
            mNextSrcId = mSrcIdGenerator++;  // make it different from mCurrentSrcId
            mBufferedPercentageNext.set(0);
            mNextSourceState = NEXT_SOURCE_STATE_INIT;
            mNextSourcePlayPending = false;

@@ -2781,9 +2781,21 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
            {
                final int percent = msg.arg1;
                synchronized (mEventCbLock) {
                    if (srcId == mCurrentSrcId) {
                        mBufferedPercentageCurrent.set(percent);
                        for (Pair<Executor, MediaPlayer2EventCallback> cb : mEventCallbackRecords) {
                            cb.first.execute(() -> cb.second.onInfo(
                                mMediaPlayer, mCurrentDSD, MEDIA_INFO_BUFFERING_UPDATE, percent));
                                    mMediaPlayer, mCurrentDSD, MEDIA_INFO_BUFFERING_UPDATE,
                                    percent));
                        }
                    } else if (srcId == mNextSrcId && !mNextDSDs.isEmpty()) {
                        mBufferedPercentageNext.set(percent);
                        DataSourceDesc nextDSD = mNextDSDs.get(0);
                        for (Pair<Executor, MediaPlayer2EventCallback> cb : mEventCallbackRecords) {
                            cb.first.execute(() -> cb.second.onInfo(
                                    mMediaPlayer, nextDSD, MEDIA_INFO_BUFFERING_UPDATE,
                                    percent));
                        }
                    }
                }
                return;