HlsChunkSource.smali
.class Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;
.super Ljava/lang/Object;
.source "SourceFile"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;,
Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$InitializationTrackSelection;,
Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$HlsChunkHolder;
}
.end annotation
# instance fields
.field private final encryptionDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.field private encryptionIv:[B
.field private encryptionIvString:Ljava/lang/String;
.field private encryptionKey:[B
.field private encryptionKeyUri:Landroid/net/Uri;
.field private expectedPlaylistUrl:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
.field private final extractorFactory:Lcom/google/android/exoplayer2/source/hls/HlsExtractorFactory;
.field private fatalError:Ljava/io/IOException;
.field private independentSegments:Z
.field private isTimestampMaster:Z
.field private liveEdgeTimeUs:J
.field private final mediaDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.field private final muxedCaptionFormats:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/Format;",
">;"
}
.end annotation
.end field
.field private final playlistTracker:Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;
.field private scratchSpace:[B
.field private final timestampAdjusterProvider:Lcom/google/android/exoplayer2/source/hls/TimestampAdjusterProvider;
.field private final trackGroup:Lcom/google/android/exoplayer2/source/TrackGroup;
.field private trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
.field private final variants:[Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/source/hls/HlsExtractorFactory;Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;[Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;Lcom/google/android/exoplayer2/source/hls/HlsDataSourceFactory;Lcom/google/android/exoplayer2/source/hls/TimestampAdjusterProvider;Ljava/util/List;)V
.registers 7
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/source/hls/HlsExtractorFactory;",
"Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;",
"[",
"Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;",
"Lcom/google/android/exoplayer2/source/hls/HlsDataSourceFactory;",
"Lcom/google/android/exoplayer2/source/hls/TimestampAdjusterProvider;",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/Format;",
">;)V"
}
.end annotation
.line 124
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 125
iput-object p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->extractorFactory:Lcom/google/android/exoplayer2/source/hls/HlsExtractorFactory;
.line 126
iput-object p2, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->playlistTracker:Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;
.line 127
iput-object p3, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->variants:[Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
.line 128
iput-object p5, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->timestampAdjusterProvider:Lcom/google/android/exoplayer2/source/hls/TimestampAdjusterProvider;
.line 129
iput-object p6, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->muxedCaptionFormats:Ljava/util/List;
const-wide p1, -0x7fffffffffffffffL # -4.9E-324
.line 130
iput-wide p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->liveEdgeTimeUs:J
.line 131
array-length p1, p3
new-array p1, p1, [Lcom/google/android/exoplayer2/Format;
.line 132
array-length p2, p3
new-array p2, p2, [I
const/4 p5, 0x0
.line 133
:goto_1b
array-length p6, p3
if-ge p5, p6, :cond_29
.line 134
aget-object p6, p3, p5
iget-object p6, p6, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;->format:Lcom/google/android/exoplayer2/Format;
aput-object p6, p1, p5
.line 135
aput p5, p2, p5
add-int/lit8 p5, p5, 0x1
goto :goto_1b
:cond_29
const/4 p3, 0x1
.line 137
invoke-interface {p4, p3}, Lcom/google/android/exoplayer2/source/hls/HlsDataSourceFactory;->createDataSource(I)Lcom/google/android/exoplayer2/upstream/DataSource;
move-result-object p3
iput-object p3, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->mediaDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
const/4 p3, 0x3
.line 138
invoke-interface {p4, p3}, Lcom/google/android/exoplayer2/source/hls/HlsDataSourceFactory;->createDataSource(I)Lcom/google/android/exoplayer2/upstream/DataSource;
move-result-object p3
iput-object p3, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 139
new-instance p3, Lcom/google/android/exoplayer2/source/TrackGroup;
invoke-direct {p3, p1}, Lcom/google/android/exoplayer2/source/TrackGroup;-><init>([Lcom/google/android/exoplayer2/Format;)V
iput-object p3, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackGroup:Lcom/google/android/exoplayer2/source/TrackGroup;
.line 140
new-instance p1, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$InitializationTrackSelection;
invoke-direct {p1, p3, p2}, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$InitializationTrackSelection;-><init>(Lcom/google/android/exoplayer2/source/TrackGroup;[I)V
iput-object p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
return-void
.end method
.method private clearEncryptionData()V
.registers 2
const/4 v0, 0x0
.line 424
iput-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionKeyUri:Landroid/net/Uri;
.line 425
iput-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionKey:[B
.line 426
iput-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionIvString:Ljava/lang/String;
.line 427
iput-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionIv:[B
return-void
.end method
.method private newEncryptionKeyChunk(Landroid/net/Uri;Ljava/lang/String;IILjava/lang/Object;)Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;
.registers 15
.line 398
new-instance v8, Lcom/google/android/exoplayer2/upstream/DataSpec;
const-wide/16 v2, 0x0
const-wide/16 v4, -0x1
const/4 v6, 0x0
const/4 v7, 0x1
move-object v0, v8
move-object v1, p1
invoke-direct/range {v0 .. v7}, Lcom/google/android/exoplayer2/upstream/DataSpec;-><init>(Landroid/net/Uri;JJLjava/lang/String;I)V
.line 399
new-instance p1, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;
iget-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->variants:[Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
aget-object p3, v0, p3
iget-object v3, p3, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;->format:Lcom/google/android/exoplayer2/Format;
iget-object v6, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->scratchSpace:[B
move-object v0, p1
move-object v2, v8
move v4, p4
move-object v5, p5
move-object v7, p2
invoke-direct/range {v0 .. v7}, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;-><init>(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSpec;Lcom/google/android/exoplayer2/Format;ILjava/lang/Object;[BLjava/lang/String;)V
return-object p1
.end method
.method private resolveTimeToLiveEdgeUs(J)J
.registers 8
.line 388
iget-wide v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->liveEdgeTimeUs:J
const-wide v2, -0x7fffffffffffffffL # -4.9E-324
cmp-long v4, v0, v2
if-eqz v4, :cond_d
const/4 v0, 0x1
goto :goto_e
:cond_d
const/4 v0, 0x0
:goto_e
if-eqz v0, :cond_14
.line 389
iget-wide v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->liveEdgeTimeUs:J
sub-long/2addr v0, p1
return-wide v0
:cond_14
return-wide v2
.end method
.method private setEncryptionData(Landroid/net/Uri;Ljava/lang/String;[B)V
.registers 9
.line 405
invoke-static {p2}, Lcom/google/android/exoplayer2/util/Util;->toLowerInvariant(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
const-string v1, "0x"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_12
const/4 v0, 0x2
.line 406
invoke-virtual {p2, v0}, Ljava/lang/String;->substring(I)Ljava/lang/String;
move-result-object v0
goto :goto_13
:cond_12
move-object v0, p2
.line 411
:goto_13
new-instance v1, Ljava/math/BigInteger;
const/16 v2, 0x10
invoke-direct {v1, v0, v2}, Ljava/math/BigInteger;-><init>(Ljava/lang/String;I)V
invoke-virtual {v1}, Ljava/math/BigInteger;->toByteArray()[B
move-result-object v0
new-array v1, v2, [B
.line 413
array-length v3, v0
if-le v3, v2, :cond_26
array-length v3, v0
sub-int/2addr v3, v2
goto :goto_27
:cond_26
const/4 v3, 0x0
.line 414
:goto_27
array-length v4, v0
sub-int/2addr v2, v4
add-int/2addr v2, v3
array-length v4, v0
sub-int/2addr v4, v3
invoke-static {v0, v3, v1, v2, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 417
iput-object p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionKeyUri:Landroid/net/Uri;
.line 418
iput-object p3, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionKey:[B
.line 419
iput-object p2, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionIvString:Ljava/lang/String;
.line 420
iput-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionIv:[B
return-void
.end method
.method private updateLiveEdgeTimeUs(Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;)V
.registers 4
.line 393
iget-boolean v0, p1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->hasEndTag:Z
if-eqz v0, :cond_a
const-wide v0, -0x7fffffffffffffffL # -4.9E-324
goto :goto_e
:cond_a
invoke-virtual {p1}, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->getEndTimeUs()J
move-result-wide v0
:goto_e
iput-wide v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->liveEdgeTimeUs:J
return-void
.end method
# virtual methods
.method public getNextChunk(Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;JJLcom/google/android/exoplayer2/source/hls/HlsChunkSource$HlsChunkHolder;)V
.registers 39
move-object/from16 v6, p0
move-object/from16 v0, p1
move-wide/from16 v1, p2
move-object/from16 v15, p6
if-nez v0, :cond_c
const/4 v3, -0x1
goto :goto_14
.line 218
:cond_c
iget-object v3, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackGroup:Lcom/google/android/exoplayer2/source/TrackGroup;
iget-object v4, v0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->trackFormat:Lcom/google/android/exoplayer2/Format;
.line 219
invoke-virtual {v3, v4}, Lcom/google/android/exoplayer2/source/TrackGroup;->indexOf(Lcom/google/android/exoplayer2/Format;)I
move-result v3
:goto_14
const/4 v4, 0x0
.line 220
iput-object v4, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->expectedPlaylistUrl:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
sub-long v7, p4, v1
.line 223
invoke-direct {v6, v1, v2}, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->resolveTimeToLiveEdgeUs(J)J
move-result-wide v9
if-eqz v0, :cond_3c
.line 224
iget-boolean v5, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->independentSegments:Z
if-nez v5, :cond_3c
.line 231
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->getDurationUs()J
move-result-wide v11
sub-long/2addr v7, v11
const-wide/16 v13, 0x0
.line 232
invoke-static {v13, v14, v7, v8}, Ljava/lang/Math;->max(JJ)J
move-result-wide v7
const-wide v16, -0x7fffffffffffffffL # -4.9E-324
cmp-long v5, v9, v16
if-eqz v5, :cond_3c
sub-long/2addr v9, v11
.line 234
invoke-static {v13, v14, v9, v10}, Ljava/lang/Math;->max(JJ)J
move-result-wide v9
:cond_3c
move-wide v12, v9
move-wide v10, v7
.line 239
iget-object v7, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
move-wide/from16 v8, p2
invoke-interface/range {v7 .. v13}, Lcom/google/android/exoplayer2/trackselection/TrackSelection;->updateSelectedTrack(JJJ)V
.line 240
iget-object v1, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
invoke-interface {v1}, Lcom/google/android/exoplayer2/trackselection/TrackSelection;->getSelectedIndexInTrackGroup()I
move-result v1
const/4 v2, 0x0
const/4 v5, 0x1
if-eq v3, v1, :cond_51
const/4 v7, 0x1
goto :goto_52
:cond_51
const/4 v7, 0x0
.line 243
:goto_52
iget-object v8, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->variants:[Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
aget-object v8, v8, v1
.line 244
iget-object v9, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->playlistTracker:Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;
invoke-virtual {v9, v8}, Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;->isSnapshotValid(Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;)Z
move-result v9
if-nez v9, :cond_63
.line 245
iput-object v8, v15, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$HlsChunkHolder;->playlist:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
.line 246
iput-object v8, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->expectedPlaylistUrl:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
return-void
.line 250
:cond_63
iget-object v9, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->playlistTracker:Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;
invoke-virtual {v9, v8}, Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;->getPlaylistSnapshot(Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;)Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;
move-result-object v9
.line 251
iget-boolean v10, v9, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->hasIndependentSegmentsTag:Z
iput-boolean v10, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->independentSegments:Z
.line 253
invoke-direct {v6, v9}, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->updateLiveEdgeTimeUs(Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;)V
if-eqz v0, :cond_7d
if-eqz v7, :cond_75
goto :goto_7d
.line 277
:cond_75
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->getNextChunkIndex()I
move-result v2
:cond_79
:goto_79
move v3, v1
:goto_7a
move-object v12, v8
move-object v1, v9
goto :goto_d0
:cond_7d
:goto_7d
if-eqz v0, :cond_87
.line 258
iget-boolean v7, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->independentSegments:Z
if-eqz v7, :cond_84
goto :goto_87
:cond_84
iget-wide v10, v0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->startTimeUs:J
goto :goto_89
:cond_87
:goto_87
move-wide/from16 v10, p4
.line 260
:goto_89
iget-boolean v7, v9, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->hasEndTag:Z
if-nez v7, :cond_9f
invoke-virtual {v9}, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->getEndTimeUs()J
move-result-wide v12
cmp-long v7, v10, v12
if-ltz v7, :cond_9f
.line 262
iget v2, v9, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->mediaSequence:I
iget-object v3, v9, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->segments:Ljava/util/List;
invoke-interface {v3}, Ljava/util/List;->size()I
move-result v3
add-int/2addr v2, v3
goto :goto_79
.line 264
:cond_9f
iget-object v7, v9, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->segments:Ljava/util/List;
iget-wide v12, v9, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->startTimeUs:J
sub-long/2addr v10, v12
.line 265
invoke-static {v10, v11}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v10
iget-object v11, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->playlistTracker:Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;
.line 266
invoke-virtual {v11}, Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;->isLive()Z
move-result v11
if-eqz v11, :cond_b2
if-nez v0, :cond_b3
:cond_b2
const/4 v2, 0x1
.line 264
:cond_b3
invoke-static {v7, v10, v5, v2}, Lcom/google/android/exoplayer2/util/Util;->binarySearchFloor(Ljava/util/List;Ljava/lang/Object;ZZ)I
move-result v2
iget v7, v9, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->mediaSequence:I
add-int/2addr v2, v7
.line 267
iget v7, v9, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->mediaSequence:I
if-ge v2, v7, :cond_79
if-eqz v0, :cond_79
.line 271
iget-object v1, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->variants:[Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
aget-object v8, v1, v3
.line 272
iget-object v1, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->playlistTracker:Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;
invoke-virtual {v1, v8}, Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;->getPlaylistSnapshot(Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;)Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;
move-result-object v1
.line 273
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->getNextChunkIndex()I
move-result v2
move-object v9, v1
goto :goto_7a
.line 279
:goto_d0
iget v7, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->mediaSequence:I
if-ge v2, v7, :cond_dc
.line 280
new-instance v0, Lcom/google/android/exoplayer2/source/BehindLiveWindowException;
invoke-direct {v0}, Lcom/google/android/exoplayer2/source/BehindLiveWindowException;-><init>()V
iput-object v0, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->fatalError:Ljava/io/IOException;
return-void
.line 284
:cond_dc
iget v7, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->mediaSequence:I
sub-int v7, v2, v7
.line 285
iget-object v8, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->segments:Ljava/util/List;
invoke-interface {v8}, Ljava/util/List;->size()I
move-result v8
if-lt v7, v8, :cond_f4
.line 286
iget-boolean v0, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->hasEndTag:Z
if-eqz v0, :cond_ef
.line 287
iput-boolean v5, v15, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$HlsChunkHolder;->endOfStream:Z
return-void
.line 289
:cond_ef
iput-object v12, v15, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$HlsChunkHolder;->playlist:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
.line 290
iput-object v12, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->expectedPlaylistUrl:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
return-void
.line 296
:cond_f4
iget-object v5, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->segments:Ljava/util/List;
invoke-interface {v5, v7}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v5
check-cast v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
.line 299
iget-object v7, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->fullSegmentEncryptionKeyUri:Ljava/lang/String;
if-eqz v7, :cond_13a
.line 300
iget-object v7, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->baseUri:Ljava/lang/String;
iget-object v8, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->fullSegmentEncryptionKeyUri:Ljava/lang/String;
invoke-static {v7, v8}, Lcom/google/android/exoplayer2/util/UriUtil;->resolveToUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
move-result-object v7
.line 301
iget-object v8, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionKeyUri:Landroid/net/Uri;
invoke-virtual {v7, v8}, Landroid/net/Uri;->equals(Ljava/lang/Object;)Z
move-result v8
if-nez v8, :cond_128
.line 303
iget-object v2, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->encryptionIV:Ljava/lang/String;
iget-object v0, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
.line 304
invoke-interface {v0}, Lcom/google/android/exoplayer2/trackselection/TrackSelection;->getSelectionReason()I
move-result v4
iget-object v0, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
invoke-interface {v0}, Lcom/google/android/exoplayer2/trackselection/TrackSelection;->getSelectionData()Ljava/lang/Object;
move-result-object v5
move-object/from16 v0, p0
move-object v1, v7
.line 303
invoke-direct/range {v0 .. v5}, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->newEncryptionKeyChunk(Landroid/net/Uri;Ljava/lang/String;IILjava/lang/Object;)Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;
move-result-object v0
iput-object v0, v15, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$HlsChunkHolder;->chunk:Lcom/google/android/exoplayer2/source/chunk/Chunk;
return-void
.line 307
:cond_128
iget-object v3, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->encryptionIV:Ljava/lang/String;
iget-object v8, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionIvString:Ljava/lang/String;
invoke-static {v3, v8}, Lcom/google/android/exoplayer2/util/Util;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v3
if-nez v3, :cond_13d
.line 308
iget-object v3, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->encryptionIV:Ljava/lang/String;
iget-object v8, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionKey:[B
invoke-direct {v6, v7, v3, v8}, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->setEncryptionData(Landroid/net/Uri;Ljava/lang/String;[B)V
goto :goto_13d
.line 311
:cond_13a
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->clearEncryptionData()V
.line 315
:cond_13d
:goto_13d
iget-object v3, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->initializationSegment:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
if-eqz v3, :cond_15a
.line 317
iget-object v4, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->baseUri:Ljava/lang/String;
iget-object v7, v3, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->url:Ljava/lang/String;
invoke-static {v4, v7}, Lcom/google/android/exoplayer2/util/UriUtil;->resolveToUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
move-result-object v17
.line 318
new-instance v4, Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-wide v7, v3, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->byterangeOffset:J
iget-wide v9, v3, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->byterangeLength:J
const/16 v22, 0x0
move-object/from16 v16, v4
move-wide/from16 v18, v7
move-wide/from16 v20, v9
invoke-direct/range {v16 .. v22}, Lcom/google/android/exoplayer2/upstream/DataSpec;-><init>(Landroid/net/Uri;JJLjava/lang/String;)V
:cond_15a
move-object v11, v4
.line 323
iget-wide v3, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->startTimeUs:J
iget-wide v7, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->relativeStartTimeUs:J
add-long/2addr v3, v7
move-wide/from16 v16, v3
.line 324
iget v7, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->discontinuitySequence:I
iget v8, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->relativeDiscontinuitySequence:I
add-int/2addr v7, v8
move/from16 v21, v7
.line 326
iget-object v8, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->timestampAdjusterProvider:Lcom/google/android/exoplayer2/source/hls/TimestampAdjusterProvider;
invoke-virtual {v8, v7}, Lcom/google/android/exoplayer2/source/hls/TimestampAdjusterProvider;->getAdjuster(I)Lcom/google/android/exoplayer2/util/TimestampAdjuster;
move-result-object v23
.line 330
iget-object v7, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->baseUri:Ljava/lang/String;
iget-object v8, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->url:Ljava/lang/String;
invoke-static {v7, v8}, Lcom/google/android/exoplayer2/util/UriUtil;->resolveToUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
move-result-object v25
.line 331
new-instance v24, Lcom/google/android/exoplayer2/upstream/DataSpec;
move-object/from16 v10, v24
iget-wide v7, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->byterangeOffset:J
iget-wide v13, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->byterangeLength:J
const/16 v30, 0x0
move-wide/from16 v26, v7
move-wide/from16 v28, v13
invoke-direct/range {v24 .. v30}, Lcom/google/android/exoplayer2/upstream/DataSpec;-><init>(Landroid/net/Uri;JJLjava/lang/String;)V
.line 333
new-instance v14, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;
move-object v7, v14
iget-object v8, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->extractorFactory:Lcom/google/android/exoplayer2/source/hls/HlsExtractorFactory;
iget-object v9, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->mediaDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
iget-object v13, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->muxedCaptionFormats:Ljava/util/List;
iget-object v0, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
.line 334
invoke-interface {v0}, Lcom/google/android/exoplayer2/trackselection/TrackSelection;->getSelectionReason()I
move-result v0
move-object/from16 v31, v14
move v14, v0
iget-object v0, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
.line 335
invoke-interface {v0}, Lcom/google/android/exoplayer2/trackselection/TrackSelection;->getSelectionData()Ljava/lang/Object;
move-result-object v0
move-object v15, v0
move-object/from16 p2, v7
move-object/from16 p3, v8
iget-wide v7, v5, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->durationUs:J
add-long v18, v3, v7
iget-boolean v0, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->isTimestampMaster:Z
move/from16 v22, v0
iget-object v0, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->drmInitData:Lcom/google/android/exoplayer2/drm/DrmInitData;
move-object/from16 v25, v0
iget-object v0, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionKey:[B
move-object/from16 v26, v0
iget-object v0, v6, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->encryptionIv:[B
move-object/from16 v27, v0
move/from16 v20, v2
move-object/from16 v24, p1
move-object/from16 v7, p2
move-object/from16 v8, p3
invoke-direct/range {v7 .. v27}, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;-><init>(Lcom/google/android/exoplayer2/source/hls/HlsExtractorFactory;Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSpec;Lcom/google/android/exoplayer2/upstream/DataSpec;Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;Ljava/util/List;ILjava/lang/Object;JJIIZLcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;Lcom/google/android/exoplayer2/drm/DrmInitData;[B[B)V
move-object/from16 v0, p6
move-object/from16 v1, v31
iput-object v1, v0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$HlsChunkHolder;->chunk:Lcom/google/android/exoplayer2/source/chunk/Chunk;
return-void
.end method
.method public getTrackGroup()Lcom/google/android/exoplayer2/source/TrackGroup;
.registers 2
.line 162
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackGroup:Lcom/google/android/exoplayer2/source/TrackGroup;
return-object v0
.end method
.method public getTrackSelection()Lcom/google/android/exoplayer2/trackselection/TrackSelection;
.registers 2
.line 178
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
return-object v0
.end method
.method public maybeThrowError()V
.registers 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 150
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->fatalError:Ljava/io/IOException;
if-nez v0, :cond_e
.line 153
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->expectedPlaylistUrl:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
if-eqz v0, :cond_d
.line 154
iget-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->playlistTracker:Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;
invoke-virtual {v1, v0}, Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker;->maybeThrowPlaylistRefreshError(Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;)V
:cond_d
return-void
.line 151
:cond_e
throw v0
.end method
.method public onChunkLoadCompleted(Lcom/google/android/exoplayer2/source/chunk/Chunk;)V
.registers 4
.line 347
instance-of v0, p1, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;
if-eqz v0, :cond_19
.line 348
check-cast p1, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;
.line 349
invoke-virtual {p1}, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;->getDataHolder()[B
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->scratchSpace:[B
.line 350
iget-object v0, p1, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;->dataSpec:Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-object v0, v0, Lcom/google/android/exoplayer2/upstream/DataSpec;->uri:Landroid/net/Uri;
iget-object v1, p1, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;->iv:Ljava/lang/String;
.line 351
invoke-virtual {p1}, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource$EncryptionKeyChunk;->getResult()[B
move-result-object p1
.line 350
invoke-direct {p0, v0, v1, p1}, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->setEncryptionData(Landroid/net/Uri;Ljava/lang/String;[B)V
:cond_19
return-void
.end method
.method public onChunkLoadError(Lcom/google/android/exoplayer2/source/chunk/Chunk;ZLjava/io/IOException;)Z
.registers 5
if-eqz p2, :cond_18
.line 365
iget-object p2, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackGroup:Lcom/google/android/exoplayer2/source/TrackGroup;
iget-object p1, p1, Lcom/google/android/exoplayer2/source/chunk/Chunk;->trackFormat:Lcom/google/android/exoplayer2/Format;
.line 366
invoke-virtual {v0, p1}, Lcom/google/android/exoplayer2/source/TrackGroup;->indexOf(Lcom/google/android/exoplayer2/Format;)I
move-result p1
invoke-interface {p2, p1}, Lcom/google/android/exoplayer2/trackselection/TrackSelection;->indexOf(I)I
move-result p1
.line 365
invoke-static {p2, p1, p3}, Lcom/google/android/exoplayer2/source/chunk/ChunkedTrackBlacklistUtil;->maybeBlacklistTrack(Lcom/google/android/exoplayer2/trackselection/TrackSelection;ILjava/lang/Exception;)Z
move-result p1
if-eqz p1, :cond_18
const/4 p1, 0x1
return p1
:cond_18
const/4 p1, 0x0
return p1
.end method
.method public onPlaylistBlacklisted(Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;J)V
.registers 6
.line 376
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackGroup:Lcom/google/android/exoplayer2/source/TrackGroup;
iget-object p1, p1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;->format:Lcom/google/android/exoplayer2/Format;
invoke-virtual {v0, p1}, Lcom/google/android/exoplayer2/source/TrackGroup;->indexOf(Lcom/google/android/exoplayer2/Format;)I
move-result p1
const/4 v0, -0x1
if-eq p1, v0, :cond_18
.line 378
iget-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
invoke-interface {v1, p1}, Lcom/google/android/exoplayer2/trackselection/TrackSelection;->indexOf(I)I
move-result p1
if-eq p1, v0, :cond_18
.line 380
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
invoke-interface {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/trackselection/TrackSelection;->blacklist(IJ)Z
:cond_18
return-void
.end method
.method public reset()V
.registers 2
const/4 v0, 0x0
.line 185
iput-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->fatalError:Ljava/io/IOException;
return-void
.end method
.method public selectTracks(Lcom/google/android/exoplayer2/trackselection/TrackSelection;)V
.registers 2
.line 171
iput-object p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->trackSelection:Lcom/google/android/exoplayer2/trackselection/TrackSelection;
return-void
.end method
.method public setIsTimestampMaster(Z)V
.registers 2
.line 195
iput-boolean p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsChunkSource;->isTimestampMaster:Z
return-void
.end method