Merge "MediaPlayer2Impl: fix getBufferedPosition" into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2e94d509b3
@@ -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) {
|
||||
for (Pair<Executor, MediaPlayer2EventCallback> cb : mEventCallbackRecords) {
|
||||
cb.first.execute(() -> cb.second.onInfo(
|
||||
mMediaPlayer, mCurrentDSD, MEDIA_INFO_BUFFERING_UPDATE, percent));
|
||||
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));
|
||||
}
|
||||
} 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;
|
||||
|
||||
Reference in New Issue
Block a user