- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
209 lines
8.4 KiB
Java
209 lines
8.4 KiB
Java
package com.mbridge.msdk.playercommon.exoplayer2;
|
|
|
|
import com.mbridge.msdk.playercommon.exoplayer2.source.TrackGroupArray;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.trackselection.TrackSelectionArray;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.upstream.Allocator;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.upstream.DefaultAllocator;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.util.Assertions;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.util.PriorityTaskManager;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.util.Util;
|
|
|
|
/* loaded from: classes4.dex */
|
|
public class DefaultLoadControl implements LoadControl {
|
|
public static final int DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS = 5000;
|
|
public static final int DEFAULT_BUFFER_FOR_PLAYBACK_MS = 2500;
|
|
public static final int DEFAULT_MAX_BUFFER_MS = 50000;
|
|
public static final int DEFAULT_MIN_BUFFER_MS = 15000;
|
|
public static final boolean DEFAULT_PRIORITIZE_TIME_OVER_SIZE_THRESHOLDS = true;
|
|
public static final int DEFAULT_TARGET_BUFFER_BYTES = -1;
|
|
private final DefaultAllocator allocator;
|
|
private final long bufferForPlaybackAfterRebufferUs;
|
|
private final long bufferForPlaybackUs;
|
|
private boolean isBuffering;
|
|
private final long maxBufferUs;
|
|
private final long minBufferUs;
|
|
private final boolean prioritizeTimeOverSizeThresholds;
|
|
private final PriorityTaskManager priorityTaskManager;
|
|
private final int targetBufferBytesOverwrite;
|
|
private int targetBufferSize;
|
|
|
|
@Override // com.mbridge.msdk.playercommon.exoplayer2.LoadControl
|
|
public Allocator getAllocator() {
|
|
return this.allocator;
|
|
}
|
|
|
|
@Override // com.mbridge.msdk.playercommon.exoplayer2.LoadControl
|
|
public long getBackBufferDurationUs() {
|
|
return 0L;
|
|
}
|
|
|
|
@Override // com.mbridge.msdk.playercommon.exoplayer2.LoadControl
|
|
public boolean retainBackBufferFromKeyframe() {
|
|
return false;
|
|
}
|
|
|
|
public static final class Builder {
|
|
private DefaultAllocator allocator = null;
|
|
private int minBufferMs = DefaultLoadControl.DEFAULT_MIN_BUFFER_MS;
|
|
private int maxBufferMs = 50000;
|
|
private int bufferForPlaybackMs = 2500;
|
|
private int bufferForPlaybackAfterRebufferMs = 5000;
|
|
private int targetBufferBytes = -1;
|
|
private boolean prioritizeTimeOverSizeThresholds = true;
|
|
private PriorityTaskManager priorityTaskManager = null;
|
|
|
|
public final Builder setAllocator(DefaultAllocator defaultAllocator) {
|
|
this.allocator = defaultAllocator;
|
|
return this;
|
|
}
|
|
|
|
public final Builder setBufferDurationsMs(int i, int i2, int i3, int i4) {
|
|
this.minBufferMs = i;
|
|
this.maxBufferMs = i2;
|
|
this.bufferForPlaybackMs = i3;
|
|
this.bufferForPlaybackAfterRebufferMs = i4;
|
|
return this;
|
|
}
|
|
|
|
public final Builder setPrioritizeTimeOverSizeThresholds(boolean z) {
|
|
this.prioritizeTimeOverSizeThresholds = z;
|
|
return this;
|
|
}
|
|
|
|
public final Builder setPriorityTaskManager(PriorityTaskManager priorityTaskManager) {
|
|
this.priorityTaskManager = priorityTaskManager;
|
|
return this;
|
|
}
|
|
|
|
public final Builder setTargetBufferBytes(int i) {
|
|
this.targetBufferBytes = i;
|
|
return this;
|
|
}
|
|
|
|
public final DefaultLoadControl createDefaultLoadControl() {
|
|
if (this.allocator == null) {
|
|
this.allocator = new DefaultAllocator(true, 65536);
|
|
}
|
|
return new DefaultLoadControl(this.allocator, this.minBufferMs, this.maxBufferMs, this.bufferForPlaybackMs, this.bufferForPlaybackAfterRebufferMs, this.targetBufferBytes, this.prioritizeTimeOverSizeThresholds, this.priorityTaskManager);
|
|
}
|
|
}
|
|
|
|
public DefaultLoadControl() {
|
|
this(new DefaultAllocator(true, 65536));
|
|
}
|
|
|
|
@Deprecated
|
|
public DefaultLoadControl(DefaultAllocator defaultAllocator) {
|
|
this(defaultAllocator, DEFAULT_MIN_BUFFER_MS, 50000, 2500, 5000, -1, true);
|
|
}
|
|
|
|
@Deprecated
|
|
public DefaultLoadControl(DefaultAllocator defaultAllocator, int i, int i2, int i3, int i4, int i5, boolean z) {
|
|
this(defaultAllocator, i, i2, i3, i4, i5, z, null);
|
|
}
|
|
|
|
@Deprecated
|
|
public DefaultLoadControl(DefaultAllocator defaultAllocator, int i, int i2, int i3, int i4, int i5, boolean z, PriorityTaskManager priorityTaskManager) {
|
|
assertGreaterOrEqual(i3, 0, "bufferForPlaybackMs", "0");
|
|
assertGreaterOrEqual(i4, 0, "bufferForPlaybackAfterRebufferMs", "0");
|
|
assertGreaterOrEqual(i, i3, "minBufferMs", "bufferForPlaybackMs");
|
|
assertGreaterOrEqual(i, i4, "minBufferMs", "bufferForPlaybackAfterRebufferMs");
|
|
assertGreaterOrEqual(i2, i, "maxBufferMs", "minBufferMs");
|
|
this.allocator = defaultAllocator;
|
|
this.minBufferUs = i * 1000;
|
|
this.maxBufferUs = i2 * 1000;
|
|
this.bufferForPlaybackUs = i3 * 1000;
|
|
this.bufferForPlaybackAfterRebufferUs = i4 * 1000;
|
|
this.targetBufferBytesOverwrite = i5;
|
|
this.prioritizeTimeOverSizeThresholds = z;
|
|
this.priorityTaskManager = priorityTaskManager;
|
|
}
|
|
|
|
@Override // com.mbridge.msdk.playercommon.exoplayer2.LoadControl
|
|
public void onPrepared() {
|
|
reset(false);
|
|
}
|
|
|
|
@Override // com.mbridge.msdk.playercommon.exoplayer2.LoadControl
|
|
public void onTracksSelected(Renderer[] rendererArr, TrackGroupArray trackGroupArray, TrackSelectionArray trackSelectionArray) {
|
|
int i = this.targetBufferBytesOverwrite;
|
|
if (i == -1) {
|
|
i = calculateTargetBufferSize(rendererArr, trackSelectionArray);
|
|
}
|
|
this.targetBufferSize = i;
|
|
this.allocator.setTargetBufferSize(i);
|
|
}
|
|
|
|
@Override // com.mbridge.msdk.playercommon.exoplayer2.LoadControl
|
|
public void onStopped() {
|
|
reset(true);
|
|
}
|
|
|
|
@Override // com.mbridge.msdk.playercommon.exoplayer2.LoadControl
|
|
public void onReleased() {
|
|
reset(true);
|
|
}
|
|
|
|
@Override // com.mbridge.msdk.playercommon.exoplayer2.LoadControl
|
|
public boolean shouldContinueLoading(long j, float f) {
|
|
boolean z;
|
|
boolean z2 = true;
|
|
boolean z3 = this.allocator.getTotalBytesAllocated() >= this.targetBufferSize;
|
|
boolean z4 = this.isBuffering;
|
|
long j2 = this.minBufferUs;
|
|
if (f > 1.0f) {
|
|
j2 = Math.min(Util.getMediaDurationForPlayoutDuration(j2, f), this.maxBufferUs);
|
|
}
|
|
if (j < j2) {
|
|
if (!this.prioritizeTimeOverSizeThresholds && z3) {
|
|
z2 = false;
|
|
}
|
|
this.isBuffering = z2;
|
|
} else if (j > this.maxBufferUs || z3) {
|
|
this.isBuffering = false;
|
|
}
|
|
PriorityTaskManager priorityTaskManager = this.priorityTaskManager;
|
|
if (priorityTaskManager != null && (z = this.isBuffering) != z4) {
|
|
if (z) {
|
|
priorityTaskManager.add(0);
|
|
} else {
|
|
priorityTaskManager.remove(0);
|
|
}
|
|
}
|
|
return this.isBuffering;
|
|
}
|
|
|
|
@Override // com.mbridge.msdk.playercommon.exoplayer2.LoadControl
|
|
public boolean shouldStartPlayback(long j, float f, boolean z) {
|
|
long playoutDurationForMediaDuration = Util.getPlayoutDurationForMediaDuration(j, f);
|
|
long j2 = z ? this.bufferForPlaybackAfterRebufferUs : this.bufferForPlaybackUs;
|
|
return j2 <= 0 || playoutDurationForMediaDuration >= j2 || (!this.prioritizeTimeOverSizeThresholds && this.allocator.getTotalBytesAllocated() >= this.targetBufferSize);
|
|
}
|
|
|
|
public int calculateTargetBufferSize(Renderer[] rendererArr, TrackSelectionArray trackSelectionArray) {
|
|
int i = 0;
|
|
for (int i2 = 0; i2 < rendererArr.length; i2++) {
|
|
if (trackSelectionArray.get(i2) != null) {
|
|
i += Util.getDefaultBufferSize(rendererArr[i2].getTrackType());
|
|
}
|
|
}
|
|
return i;
|
|
}
|
|
|
|
private void reset(boolean z) {
|
|
this.targetBufferSize = 0;
|
|
PriorityTaskManager priorityTaskManager = this.priorityTaskManager;
|
|
if (priorityTaskManager != null && this.isBuffering) {
|
|
priorityTaskManager.remove(0);
|
|
}
|
|
this.isBuffering = false;
|
|
if (z) {
|
|
this.allocator.reset();
|
|
}
|
|
}
|
|
|
|
private static void assertGreaterOrEqual(int i, int i2, String str, String str2) {
|
|
Assertions.checkArgument(i >= i2, str + " cannot be less than " + str2);
|
|
}
|
|
}
|