AdaptiveTrackSelection.smali
.class public Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;
.super Lcom/google/android/exoplayer2/trackselection/BaseTrackSelection;
.source "AdaptiveTrackSelection.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$DefaultBandwidthProvider;,
Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;,
Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$Factory;
}
.end annotation
# static fields
.field public static final DEFAULT_BANDWIDTH_FRACTION:F = 0.75f
.field public static final DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE:F = 0.75f
.field public static final DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS:I
.field public static final DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS:I
.field public static final DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS:I
.field public static final DEFAULT_MIN_TIME_BETWEEN_BUFFER_REEVALUTATION_MS:J = 0x7d0L
# instance fields
.field private final bandwidthProvider:Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;
.field private final bufferedFractionToLiveEdgeForQualityIncrease:F
.field private final clock:Lcom/google/android/exoplayer2/util/Clock;
.field private final formatBitrates:[I
.field private final formats:[Lcom/google/android/exoplayer2/Format;
.field private lastBufferEvaluationMs:J
.field private final maxDurationForQualityDecreaseUs:J
.field private final minDurationForQualityIncreaseUs:J
.field private final minDurationToRetainAfterDiscardUs:J
.field private final minTimeBetweenBufferReevaluationMs:J
.field private playbackSpeed:F
.field private reason:I
.field private selectedIndex:I
.field private trackBitrateEstimator:Lcom/google/android/exoplayer2/trackselection/TrackBitrateEstimator;
.field private final trackBitrates:[I
# direct methods
.method static constructor <clinit>()V
.registers 1
const v0, 0x74c7
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS:I
const v0, 0x327f
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->DEFAULT_MIN_DURATION_FOR_QUALITY_INCREASE_MS:I
const v0, 0x74c7
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS:I
return-void
.end method
.method private constructor <init>(Lcom/google/android/exoplayer2/source/TrackGroup;[ILcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;JJJFJLcom/google/android/exoplayer2/util/Clock;)V
.registers 24
.param p1, "group" # Lcom/google/android/exoplayer2/source/TrackGroup;
.param p2, "tracks" # [I
.param p3, "bandwidthProvider" # Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;
.param p4, "minDurationForQualityIncreaseMs" # J
.param p6, "maxDurationForQualityDecreaseMs" # J
.param p8, "minDurationToRetainAfterDiscardMs" # J
.param p10, "bufferedFractionToLiveEdgeForQualityIncrease" # F
.param p11, "minTimeBetweenBufferReevaluationMs" # J
.param p13, "clock" # Lcom/google/android/exoplayer2/util/Clock;
.line 384
move-object v0, p0
invoke-direct {p0, p1, p2}, Lcom/google/android/exoplayer2/trackselection/BaseTrackSelection;-><init>(Lcom/google/android/exoplayer2/source/TrackGroup;[I)V
.line 385
move-object v1, p3
iput-object v1, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->bandwidthProvider:Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;
.line 386
const-wide/16 v2, 0x3e8
mul-long v4, p4, v2
iput-wide v4, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->minDurationForQualityIncreaseUs:J
.line 387
mul-long v4, p6, v2
iput-wide v4, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->maxDurationForQualityDecreaseUs:J
.line 388
mul-long v2, v2, p8
iput-wide v2, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->minDurationToRetainAfterDiscardUs:J
.line 389
move/from16 v2, p10
iput v2, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->bufferedFractionToLiveEdgeForQualityIncrease:F
.line 391
move-wide/from16 v3, p11
iput-wide v3, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->minTimeBetweenBufferReevaluationMs:J
.line 392
move-object/from16 v5, p13
iput-object v5, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->clock:Lcom/google/android/exoplayer2/util/Clock;
.line 393
const/high16 v6, 0x3f800000 # 1.0f
iput v6, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->playbackSpeed:F
.line 394
const/4 v6, 0x0
iput v6, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->reason:I
.line 395
const-wide v6, -0x7fffffffffffffffL # -4.9E-324
iput-wide v6, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->lastBufferEvaluationMs:J
.line 396
sget-object v6, Lcom/google/android/exoplayer2/trackselection/TrackBitrateEstimator;->DEFAULT:Lcom/google/android/exoplayer2/trackselection/TrackBitrateEstimator;
iput-object v6, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->trackBitrateEstimator:Lcom/google/android/exoplayer2/trackselection/TrackBitrateEstimator;
.line 397
iget v6, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->length:I
new-array v6, v6, [Lcom/google/android/exoplayer2/Format;
iput-object v6, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->formats:[Lcom/google/android/exoplayer2/Format;
.line 398
iget v6, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->length:I
new-array v6, v6, [I
iput-object v6, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->formatBitrates:[I
.line 399
iget v6, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->length:I
new-array v6, v6, [I
iput-object v6, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->trackBitrates:[I
.line 400
const/4 v6, 0x0
.local v6, "i":I
:goto_46
iget v7, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->length:I
if-ge v6, v7, :cond_5d
.line 402
invoke-virtual {p0, v6}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->getFormat(I)Lcom/google/android/exoplayer2/Format;
move-result-object v7
.line 403
.local v7, "format":Lcom/google/android/exoplayer2/Format;
iget-object v8, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->formats:[Lcom/google/android/exoplayer2/Format;
aput-object v7, v8, v6
.line 404
iget-object v9, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->formatBitrates:[I
aget-object v8, v8, v6
iget v8, v8, Lcom/google/android/exoplayer2/Format;->bitrate:I
aput v8, v9, v6
.line 400
.end local v7 # "format":Lcom/google/android/exoplayer2/Format;
add-int/lit8 v6, v6, 0x1
goto :goto_46
.line 406
.end local v6 # "i":I
:cond_5d
return-void
.end method
.method synthetic constructor <init>(Lcom/google/android/exoplayer2/source/TrackGroup;[ILcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;JJJFJLcom/google/android/exoplayer2/util/Clock;Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$1;)V
.registers 15
.param p1, "x0" # Lcom/google/android/exoplayer2/source/TrackGroup;
.param p2, "x1" # [I
.param p3, "x2" # Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;
.param p4, "x3" # J
.param p6, "x4" # J
.param p8, "x5" # J
.param p10, "x6" # F
.param p11, "x7" # J
.param p13, "x8" # Lcom/google/android/exoplayer2/util/Clock;
.param p14, "x9" # Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$1;
.line 35
invoke-direct/range {p0 .. p13}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;-><init>(Lcom/google/android/exoplayer2/source/TrackGroup;[ILcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;JJJFJLcom/google/android/exoplayer2/util/Clock;)V
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/source/TrackGroup;[ILcom/google/android/exoplayer2/upstream/BandwidthMeter;)V
.registers 19
.param p1, "group" # Lcom/google/android/exoplayer2/source/TrackGroup;
.param p2, "tracks" # [I
.param p3, "bandwidthMeter" # Lcom/google/android/exoplayer2/upstream/BandwidthMeter;
.line 311
sget-object v14, Lcom/google/android/exoplayer2/util/Clock;->DEFAULT:Lcom/google/android/exoplayer2/util/Clock;
const-wide/16 v4, 0x2710
const-wide/16 v6, 0x61a8
const-wide/16 v8, 0x61a8
const/high16 v10, 0x3f400000 # 0.75f
const/high16 v11, 0x3f400000 # 0.75f
const-wide/16 v12, 0x7d0
move-object v0, p0
move-object/from16 v1, p1
move-object/from16 v2, p2
move-object/from16 v3, p3
invoke-direct/range {v0 .. v14}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;-><init>(Lcom/google/android/exoplayer2/source/TrackGroup;[ILcom/google/android/exoplayer2/upstream/BandwidthMeter;JJJFFJLcom/google/android/exoplayer2/util/Clock;)V
.line 322
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/source/TrackGroup;[ILcom/google/android/exoplayer2/upstream/BandwidthMeter;JJJFFJLcom/google/android/exoplayer2/util/Clock;)V
.registers 31
.param p1, "group" # Lcom/google/android/exoplayer2/source/TrackGroup;
.param p2, "tracks" # [I
.param p3, "bandwidthMeter" # Lcom/google/android/exoplayer2/upstream/BandwidthMeter;
.param p4, "minDurationForQualityIncreaseMs" # J
.param p6, "maxDurationForQualityDecreaseMs" # J
.param p8, "minDurationToRetainAfterDiscardMs" # J
.param p10, "bandwidthFraction" # F
.param p11, "bufferedFractionToLiveEdgeForQualityIncrease" # F
.param p12, "minTimeBetweenBufferReevaluationMs" # J
.param p14, "clock" # Lcom/google/android/exoplayer2/util/Clock;
.line 362
new-instance v3, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$DefaultBandwidthProvider;
move-object/from16 v14, p3
move/from16 v15, p10
invoke-direct {v3, v14, v15}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$DefaultBandwidthProvider;-><init>(Lcom/google/android/exoplayer2/upstream/BandwidthMeter;F)V
move-object/from16 v0, p0
move-object/from16 v1, p1
move-object/from16 v2, p2
move-wide/from16 v4, p4
move-wide/from16 v6, p6
move-wide/from16 v8, p8
move/from16 v10, p11
move-wide/from16 v11, p12
move-object/from16 v13, p14
invoke-direct/range {v0 .. v13}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;-><init>(Lcom/google/android/exoplayer2/source/TrackGroup;[ILcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;JJJFJLcom/google/android/exoplayer2/util/Clock;)V
.line 372
return-void
.end method
.method private determineIdealSelectedIndex(J[I)I
.registers 15
.param p1, "nowMs" # J
.param p3, "trackBitrates" # [I
.line 594
iget-object v0, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->bandwidthProvider:Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;
invoke-interface {v0}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;->getAllocatedBandwidth()J
move-result-wide v7
.line 595
.local v7, "effectiveBitrate":J
const/4 v0, 0x0
.line 596
.local v0, "lowestBitrateNonBlacklistedIndex":I
const/4 v1, 0x0
move v9, v1
.local v9, "i":I
:goto_9
iget v1, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->length:I
if-ge v9, v1, :cond_2f
.line 597
const-wide/high16 v1, -0x8000000000000000L
cmp-long v3, p1, v1
if-eqz v3, :cond_19
invoke-virtual {p0, v9, p1, p2}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->isBlacklisted(IJ)Z
move-result v1
if-nez v1, :cond_2c
.line 598
:cond_19
invoke-virtual {p0, v9}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->getFormat(I)Lcom/google/android/exoplayer2/Format;
move-result-object v10
.line 599
.local v10, "format":Lcom/google/android/exoplayer2/Format;
aget v3, p3, v9
iget v4, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->playbackSpeed:F
move-object v1, p0
move-object v2, v10
move-wide v5, v7
invoke-virtual/range {v1 .. v6}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->canSelectFormat(Lcom/google/android/exoplayer2/Format;IFJ)Z
move-result v1
if-eqz v1, :cond_2b
.line 600
return v9
.line 602
:cond_2b
move v0, v9
.line 596
.end local v10 # "format":Lcom/google/android/exoplayer2/Format;
:cond_2c
add-int/lit8 v9, v9, 0x1
goto :goto_9
.line 606
.end local v9 # "i":I
:cond_2f
return v0
.end method
.method private minDurationForQualityIncreaseUs(J)J
.registers 6
.param p1, "availableDurationUs" # J
.line 610
const-wide v0, -0x7fffffffffffffffL # -4.9E-324
cmp-long v2, p1, v0
if-eqz v2, :cond_11
iget-wide v0, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->minDurationForQualityIncreaseUs:J
cmp-long v2, p1, v0
if-gtz v2, :cond_11
const/4 v0, 0x1
goto :goto_12
:cond_11
const/4 v0, 0x0
.line 612
.local v0, "isAvailableDurationTooShort":Z
:goto_12
if-eqz v0, :cond_1b
long-to-float v1, p1
iget v2, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->bufferedFractionToLiveEdgeForQualityIncrease:F
mul-float v1, v1, v2
float-to-long v1, v1
goto :goto_1d
:cond_1b
iget-wide v1, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->minDurationForQualityIncreaseUs:J
:goto_1d
return-wide v1
.end method
# virtual methods
.method protected canSelectFormat(Lcom/google/android/exoplayer2/Format;IFJ)Z
.registers 9
.param p1, "format" # Lcom/google/android/exoplayer2/Format;
.param p2, "trackBitrate" # I
.param p3, "playbackSpeed" # F
.param p4, "effectiveBitrate" # J
.line 560
int-to-float v0, p2
mul-float v0, v0, p3
invoke-static {v0}, Ljava/lang/Math;->round(F)I
move-result v0
int-to-long v0, v0
cmp-long v2, v0, p4
if-gtz v2, :cond_e
const/4 v0, 0x1
goto :goto_f
:cond_e
const/4 v0, 0x0
:goto_f
return v0
.end method
.method public enable()V
.registers 3
.line 433
const-wide v0, -0x7fffffffffffffffL # -4.9E-324
iput-wide v0, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->lastBufferEvaluationMs:J
.line 434
return-void
.end method
.method public evaluateQueueSize(JLjava/util/List;)I
.registers 23
.param p1, "playbackPositionUs" # J
.annotation system Ldalvik/annotation/Signature;
value = {
"(J",
"Ljava/util/List<",
"+",
"Lcom/google/android/exoplayer2/source/chunk/MediaChunk;",
">;)I"
}
.end annotation
.line 506
.local p3, "queue":Ljava/util/List;, "Ljava/util/List<+Lcom/google/android/exoplayer2/source/chunk/MediaChunk;>;"
move-object/from16 v0, p0
move-object/from16 v1, p3
iget-object v2, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->clock:Lcom/google/android/exoplayer2/util/Clock;
invoke-interface {v2}, Lcom/google/android/exoplayer2/util/Clock;->elapsedRealtime()J
move-result-wide v2
.line 507
.local v2, "nowMs":J
invoke-virtual {v0, v2, v3}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->shouldEvaluateQueueSize(J)Z
move-result v4
if-nez v4, :cond_15
.line 508
invoke-interface/range {p3 .. p3}, Ljava/util/List;->size()I
move-result v4
return v4
.line 511
:cond_15
iput-wide v2, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->lastBufferEvaluationMs:J
.line 512
invoke-interface/range {p3 .. p3}, Ljava/util/List;->isEmpty()Z
move-result v4
if-eqz v4, :cond_1f
.line 513
const/4 v4, 0x0
return v4
.line 516
:cond_1f
invoke-interface/range {p3 .. p3}, Ljava/util/List;->size()I
move-result v4
.line 517
.local v4, "queueSize":I
add-int/lit8 v5, v4, -0x1
invoke-interface {v1, v5}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v5
check-cast v5, Lcom/google/android/exoplayer2/source/chunk/MediaChunk;
.line 518
.local v5, "lastChunk":Lcom/google/android/exoplayer2/source/chunk/MediaChunk;
iget-wide v6, v5, Lcom/google/android/exoplayer2/source/chunk/MediaChunk;->startTimeUs:J
sub-long v6, v6, p1
iget v8, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->playbackSpeed:F
.line 519
invoke-static {v6, v7, v8}, Lcom/google/android/exoplayer2/util/Util;->getPlayoutDurationForMediaDuration(JF)J
move-result-wide v6
.line 521
.local v6, "playoutBufferedDurationBeforeLastChunkUs":J
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->getMinDurationToRetainAfterDiscardUs()J
move-result-wide v8
.line 522
.local v8, "minDurationToRetainAfterDiscardUs":J
cmp-long v10, v6, v8
if-gez v10, :cond_3e
.line 523
return v4
.line 525
:cond_3e
iget-object v10, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->formatBitrates:[I
invoke-direct {v0, v2, v3, v10}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->determineIdealSelectedIndex(J[I)I
move-result v10
.line 526
.local v10, "idealSelectedIndex":I
invoke-virtual {v0, v10}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->getFormat(I)Lcom/google/android/exoplayer2/Format;
move-result-object v11
.line 530
.local v11, "idealFormat":Lcom/google/android/exoplayer2/Format;
const/4 v12, 0x0
.local v12, "i":I
:goto_49
if-ge v12, v4, :cond_8d
.line 531
invoke-interface {v1, v12}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v13
check-cast v13, Lcom/google/android/exoplayer2/source/chunk/MediaChunk;
.line 532
.local v13, "chunk":Lcom/google/android/exoplayer2/source/chunk/MediaChunk;
iget-object v14, v13, Lcom/google/android/exoplayer2/source/chunk/MediaChunk;->trackFormat:Lcom/google/android/exoplayer2/Format;
.line 533
.local v14, "format":Lcom/google/android/exoplayer2/Format;
move-wide v15, v2
.end local v2 # "nowMs":J
.local v15, "nowMs":J
iget-wide v1, v13, Lcom/google/android/exoplayer2/source/chunk/MediaChunk;->startTimeUs:J
sub-long v1, v1, p1
.line 534
.local v1, "mediaDurationBeforeThisChunkUs":J
iget v3, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->playbackSpeed:F
.line 535
invoke-static {v1, v2, v3}, Lcom/google/android/exoplayer2/util/Util;->getPlayoutDurationForMediaDuration(JF)J
move-result-wide v17
.line 536
.local v17, "playoutDurationBeforeThisChunkUs":J
cmp-long v3, v17, v8
if-ltz v3, :cond_85
iget v3, v14, Lcom/google/android/exoplayer2/Format;->bitrate:I
iget v0, v11, Lcom/google/android/exoplayer2/Format;->bitrate:I
if-ge v3, v0, :cond_85
iget v0, v14, Lcom/google/android/exoplayer2/Format;->height:I
const/4 v3, -0x1
if-eq v0, v3, :cond_85
iget v0, v14, Lcom/google/android/exoplayer2/Format;->height:I
const/16 v3, 0x2d0
if-ge v0, v3, :cond_85
iget v0, v14, Lcom/google/android/exoplayer2/Format;->width:I
const/4 v3, -0x1
if-eq v0, v3, :cond_85
iget v0, v14, Lcom/google/android/exoplayer2/Format;->width:I
const/16 v3, 0x500
if-ge v0, v3, :cond_85
iget v0, v14, Lcom/google/android/exoplayer2/Format;->height:I
iget v3, v11, Lcom/google/android/exoplayer2/Format;->height:I
if-ge v0, v3, :cond_85
.line 541
return v12
.line 530
.end local v1 # "mediaDurationBeforeThisChunkUs":J
.end local v13 # "chunk":Lcom/google/android/exoplayer2/source/chunk/MediaChunk;
.end local v14 # "format":Lcom/google/android/exoplayer2/Format;
.end local v17 # "playoutDurationBeforeThisChunkUs":J
:cond_85
add-int/lit8 v12, v12, 0x1
move-object/from16 v0, p0
move-object/from16 v1, p3
move-wide v2, v15
goto :goto_49
.line 544
.end local v12 # "i":I
.end local v15 # "nowMs":J
.restart local v2 # "nowMs":J
:cond_8d
return v4
.end method
.method public experimental_setNonAllocatableBandwidth(J)V
.registers 4
.param p1, "nonAllocatableBandwidth" # J
.line 427
iget-object v0, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->bandwidthProvider:Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$BandwidthProvider;
check-cast v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$DefaultBandwidthProvider;
.line 428
invoke-virtual {v0, p1, p2}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection$DefaultBandwidthProvider;->experimental_setNonAllocatableBandwidth(J)V
.line 429
return-void
.end method
.method public experimental_setTrackBitrateEstimator(Lcom/google/android/exoplayer2/trackselection/TrackBitrateEstimator;)V
.registers 2
.param p1, "trackBitrateEstimator" # Lcom/google/android/exoplayer2/trackselection/TrackBitrateEstimator;
.line 416
iput-object p1, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->trackBitrateEstimator:Lcom/google/android/exoplayer2/trackselection/TrackBitrateEstimator;
.line 417
return-void
.end method
.method protected getMinDurationToRetainAfterDiscardUs()J
.registers 3
.line 582
iget-wide v0, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->minDurationToRetainAfterDiscardUs:J
return-wide v0
.end method
.method public getSelectedIndex()I
.registers 2
.line 491
iget v0, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->selectedIndex:I
return v0
.end method
.method public getSelectionData()Ljava/lang/Object;
.registers 2
.line 501
const/4 v0, 0x0
return-object v0
.end method
.method public getSelectionReason()I
.registers 2
.line 496
iget v0, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->reason:I
return v0
.end method
.method public onPlaybackSpeed(F)V
.registers 2
.param p1, "playbackSpeed" # F
.line 438
iput p1, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->playbackSpeed:F
.line 439
return-void
.end method
.method protected shouldEvaluateQueueSize(J)Z
.registers 8
.param p1, "nowMs" # J
.line 571
iget-wide v0, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->lastBufferEvaluationMs:J
const-wide v2, -0x7fffffffffffffffL # -4.9E-324
cmp-long v4, v0, v2
if-eqz v4, :cond_16
sub-long v0, p1, v0
iget-wide v2, p0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->minTimeBetweenBufferReevaluationMs:J
cmp-long v4, v0, v2
if-ltz v4, :cond_14
goto :goto_16
:cond_14
const/4 v0, 0x0
goto :goto_17
:cond_16
:goto_16
const/4 v0, 0x1
:goto_17
return v0
.end method
.method public updateSelectedTrack(JJJLjava/util/List;[Lcom/google/android/exoplayer2/source/chunk/MediaChunkIterator;)V
.registers 22
.param p1, "playbackPositionUs" # J
.param p3, "bufferedDurationUs" # J
.param p5, "availableDurationUs" # J
.param p8, "mediaChunkIterators" # [Lcom/google/android/exoplayer2/source/chunk/MediaChunkIterator;
.annotation system Ldalvik/annotation/Signature;
value = {
"(JJJ",
"Ljava/util/List<",
"+",
"Lcom/google/android/exoplayer2/source/chunk/MediaChunk;",
">;[",
"Lcom/google/android/exoplayer2/source/chunk/MediaChunkIterator;",
")V"
}
.end annotation
.line 448
.local p7, "queue":Ljava/util/List;, "Ljava/util/List<+Lcom/google/android/exoplayer2/source/chunk/MediaChunk;>;"
move-object v0, p0
iget-object v1, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->clock:Lcom/google/android/exoplayer2/util/Clock;
invoke-interface {v1}, Lcom/google/android/exoplayer2/util/Clock;->elapsedRealtime()J
move-result-wide v1
.line 451
.local v1, "nowMs":J
iget-object v3, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->trackBitrateEstimator:Lcom/google/android/exoplayer2/trackselection/TrackBitrateEstimator;
iget-object v4, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->formats:[Lcom/google/android/exoplayer2/Format;
iget-object v5, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->trackBitrates:[I
move-object/from16 v6, p7
move-object/from16 v7, p8
invoke-interface {v3, v4, v6, v7, v5}, Lcom/google/android/exoplayer2/trackselection/TrackBitrateEstimator;->getBitrates([Lcom/google/android/exoplayer2/Format;Ljava/util/List;[Lcom/google/android/exoplayer2/source/chunk/MediaChunkIterator;[I)[I
.line 454
iget v3, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->reason:I
if-nez v3, :cond_24
.line 455
const/4 v3, 0x1
iput v3, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->reason:I
.line 456
iget-object v3, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->trackBitrates:[I
invoke-direct {p0, v1, v2, v3}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->determineIdealSelectedIndex(J[I)I
move-result v3
iput v3, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->selectedIndex:I
.line 457
return-void
.line 461
:cond_24
iget v3, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->selectedIndex:I
.line 462
.local v3, "currentSelectedIndex":I
iget-object v4, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->trackBitrates:[I
invoke-direct {p0, v1, v2, v4}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->determineIdealSelectedIndex(J[I)I
move-result v4
iput v4, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->selectedIndex:I
.line 463
if-ne v4, v3, :cond_31
.line 464
return-void
.line 467
:cond_31
invoke-virtual {p0, v3, v1, v2}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->isBlacklisted(IJ)Z
move-result v4
if-nez v4, :cond_65
.line 469
invoke-virtual {p0, v3}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->getFormat(I)Lcom/google/android/exoplayer2/Format;
move-result-object v4
.line 470
.local v4, "currentFormat":Lcom/google/android/exoplayer2/Format;
iget v5, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->selectedIndex:I
invoke-virtual {p0, v5}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->getFormat(I)Lcom/google/android/exoplayer2/Format;
move-result-object v5
.line 471
.local v5, "selectedFormat":Lcom/google/android/exoplayer2/Format;
iget v8, v5, Lcom/google/android/exoplayer2/Format;->bitrate:I
iget v9, v4, Lcom/google/android/exoplayer2/Format;->bitrate:I
if-le v8, v9, :cond_54
.line 472
move-wide/from16 v8, p5
invoke-direct {p0, v8, v9}, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->minDurationForQualityIncreaseUs(J)J
move-result-wide v10
cmp-long v12, p3, v10
if-gez v12, :cond_56
.line 475
iput v3, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->selectedIndex:I
goto :goto_67
.line 471
:cond_54
move-wide/from16 v8, p5
.line 476
:cond_56
iget v10, v5, Lcom/google/android/exoplayer2/Format;->bitrate:I
iget v11, v4, Lcom/google/android/exoplayer2/Format;->bitrate:I
if-ge v10, v11, :cond_67
iget-wide v10, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->maxDurationForQualityDecreaseUs:J
cmp-long v12, p3, v10
if-ltz v12, :cond_67
.line 480
iput v3, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->selectedIndex:I
goto :goto_67
.line 467
.end local v4 # "currentFormat":Lcom/google/android/exoplayer2/Format;
.end local v5 # "selectedFormat":Lcom/google/android/exoplayer2/Format;
:cond_65
move-wide/from16 v8, p5
.line 484
:cond_67
:goto_67
iget v4, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->selectedIndex:I
if-eq v4, v3, :cond_6e
.line 485
const/4 v4, 0x3
iput v4, v0, Lcom/google/android/exoplayer2/trackselection/AdaptiveTrackSelection;->reason:I
.line 487
:cond_6e
return-void
.end method