Loading media/java/android/media/MediaPlayer2Impl.java +23 −11 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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(); Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading
media/java/android/media/MediaPlayer2Impl.java +23 −11 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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(); Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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; Loading