From 1699fbfa74f127a5b4cef5770db8d71e23e0d43c Mon Sep 17 00:00:00 2001 From: tonihei Date: Wed, 21 Nov 2018 03:24:54 -0800 Subject: [PATCH] Add experimental option to subtract non-allocatable bandwidth. This allows to account for bandwidth used by fixed track selections. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=222383736 --- .../AdaptiveTrackSelection.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/trackselection/AdaptiveTrackSelection.java b/library/core/src/main/java/com/google/android/exoplayer2/trackselection/AdaptiveTrackSelection.java index bd2b3f1a05..f7188fbf72 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/trackselection/AdaptiveTrackSelection.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/trackselection/AdaptiveTrackSelection.java @@ -380,6 +380,18 @@ public class AdaptiveTrackSelection extends BaseTrackSelection { this.trackBitrateEstimator = trackBitrateEstimator; } + /** + * Sets the non-allocatable bandwidth, which shouldn't be considered available. + * + *

This method is experimental, and will be renamed or removed in a future release. + * + * @param nonAllocatableBandwidth The non-allocatable bandwidth in bits per second. + */ + public void experimental_setNonAllocatableBandwidth(long nonAllocatableBandwidth) { + ((DefaultBandwidthProvider) bandwidthProvider) + .experimental_setNonAllocatableBandwidth(nonAllocatableBandwidth); + } + @Override public void enable() { lastBufferEvaluationMs = C.TIME_UNSET; @@ -571,6 +583,8 @@ public class AdaptiveTrackSelection extends BaseTrackSelection { private final BandwidthMeter bandwidthMeter; private final float bandwidthFraction; + private long nonAllocatableBandwidth; + /* package */ DefaultBandwidthProvider(BandwidthMeter bandwidthMeter, float bandwidthFraction) { this.bandwidthMeter = bandwidthMeter; this.bandwidthFraction = bandwidthFraction; @@ -578,7 +592,12 @@ public class AdaptiveTrackSelection extends BaseTrackSelection { @Override public long getAllocatedBandwidth() { - return (long) (bandwidthMeter.getBitrateEstimate() * bandwidthFraction); + long totalBandwidth = (long) (bandwidthMeter.getBitrateEstimate() * bandwidthFraction); + return Math.max(0L, totalBandwidth - nonAllocatableBandwidth); + } + + /* package */ void experimental_setNonAllocatableBandwidth(long nonAllocatableBandwidth) { + this.nonAllocatableBandwidth = nonAllocatableBandwidth; } } }