Merge "MediaPlayer2Impl: fix getBufferedPosition" into pi-dev

am: 2e94d509b3

Change-Id: Iea80c12708fce69efbd5347144a486d3a881f959
This commit is contained in:
Wei Jia
2018-03-10 04:03:55 +00:00
committed by android-build-merger

View File

@@ -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;