HlsMediaChunk.smali
.class final Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;
.super Lcom/google/android/exoplayer2/source/chunk/MediaChunk;
.source "HlsMediaChunk.java"
# static fields
.field private static final AAC_FILE_EXTENSION:Ljava/lang/String; = ".aac"
.field private static final AC3_FILE_EXTENSION:Ljava/lang/String; = ".ac3"
.field private static final EC3_FILE_EXTENSION:Ljava/lang/String; = ".ec3"
.field private static final MP3_FILE_EXTENSION:Ljava/lang/String; = ".mp3"
.field private static final MP4_FILE_EXTENSION:Ljava/lang/String; = ".mp4"
.field private static final PRIV_TIMESTAMP_FRAME_OWNER:Ljava/lang/String; = "com.apple.streaming.transportStreamTimestamp"
.field private static final UID_SOURCE:Ljava/util/concurrent/atomic/AtomicInteger;
.field private static final VTT_FILE_EXTENSION:Ljava/lang/String; = ".vtt"
.field private static final WEBVTT_FILE_EXTENSION:Ljava/lang/String; = ".webvtt"
# instance fields
.field private bytesLoaded:I
.field public final discontinuitySequenceNumber:I
.field private extractor:Lcom/google/android/exoplayer2/extractor/Extractor;
.field private extractorOutput:Lcom/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper;
.field public final hlsUrl:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
.field private final id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final id3Decoder:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;
.field private final initDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.field private final initDataSpec:Lcom/google/android/exoplayer2/upstream/DataSpec;
.field private initLoadCompleted:Z
.field private initSegmentBytesLoaded:I
.field private final isEncrypted:Z
.field private final isMasterTimestampSource:Z
.field private final isPackedAudio:Z
.field private final lastPathSegment:Ljava/lang/String;
.field private volatile loadCanceled:Z
.field private volatile loadCompleted:Z
.field private final needNewExtractor:Z
.field private final previousExtractor:Lcom/google/android/exoplayer2/extractor/Extractor;
.field private final shouldSpliceIn:Z
.field private final timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
.field public final uid:I
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 49
new-instance v0, Ljava/util/concurrent/atomic/AtomicInteger;
invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicInteger;-><init>()V
sput-object v0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->UID_SOURCE:Ljava/util/concurrent/atomic/AtomicInteger;
return-void
.end method
.method public constructor <init>(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;ILjava/lang/Object;JJIIZLcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;[B[B)V
.registers 34
move-object/from16 v11, p0
move-object/from16 v12, p1
move-object/from16 v13, p4
move/from16 v14, p12
move-object/from16 v15, p15
move-object/from16 v0, p16
move-object/from16 v1, p17
.line 121
invoke-static {v12, v0, v1}, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->buildDataSource(Lcom/google/android/exoplayer2/upstream/DataSource;[B[B)Lcom/google/android/exoplayer2/upstream/DataSource;
move-result-object v1
iget-object v3, v13, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;->format:Lcom/google/android/exoplayer2/Format;
move-object/from16 v0, p0
move-object/from16 v2, p2
move/from16 v4, p5
move-object/from16 v5, p6
move-wide/from16 v6, p7
move-wide/from16 v8, p9
move/from16 v10, p11
invoke-direct/range {v0 .. v10}, Lcom/google/android/exoplayer2/source/chunk/MediaChunk;-><init>(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSpec;Lcom/google/android/exoplayer2/Format;ILjava/lang/Object;JJI)V
move-object/from16 v0, p3
.line 123
iput-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initDataSpec:Lcom/google/android/exoplayer2/upstream/DataSpec;
.line 124
iput-object v13, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->hlsUrl:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
move/from16 v0, p13
.line 125
iput-boolean v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->isMasterTimestampSource:Z
move-object/from16 v0, p14
.line 126
iput-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
.line 127
iput v14, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->discontinuitySequenceNumber:I
.line 129
iget-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
instance-of v0, v0, Lcom/google/android/exoplayer2/source/hls/Aes128DataSource;
iput-boolean v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->isEncrypted:Z
move-object/from16 v0, p2
.line 130
iget-object v0, v0, Lcom/google/android/exoplayer2/upstream/DataSpec;->uri:Landroid/net/Uri;
invoke-virtual {v0}, Landroid/net/Uri;->getLastPathSegment()Ljava/lang/String;
move-result-object v0
iput-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v1, ".aac"
.line 131
invoke-virtual {v0, v1}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
const/4 v1, 0x0
const/4 v2, 0x1
if-nez v0, :cond_70
iget-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v3, ".ac3"
.line 132
invoke-virtual {v0, v3}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-nez v0, :cond_70
iget-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v3, ".ec3"
.line 133
invoke-virtual {v0, v3}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-nez v0, :cond_70
iget-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v3, ".mp3"
.line 134
invoke-virtual {v0, v3}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_6e
goto :goto_70
:cond_6e
const/4 v0, 0x0
goto :goto_71
:cond_70
:goto_70
const/4 v0, 0x1
:goto_71
iput-boolean v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->isPackedAudio:Z
if-eqz v15, :cond_94
.line 136
iget-object v0, v15, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Decoder:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;
iput-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Decoder:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;
.line 137
iget-object v0, v15, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iput-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 138
iget-object v0, v15, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractor:Lcom/google/android/exoplayer2/extractor/Extractor;
iput-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->previousExtractor:Lcom/google/android/exoplayer2/extractor/Extractor;
.line 139
iget-object v0, v15, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->hlsUrl:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
if-eq v0, v13, :cond_87
const/4 v0, 0x1
goto :goto_88
:cond_87
const/4 v0, 0x0
:goto_88
iput-boolean v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->shouldSpliceIn:Z
.line 140
iget v3, v15, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->discontinuitySequenceNumber:I
if-ne v3, v14, :cond_90
if-eqz v0, :cond_91
:cond_90
const/4 v1, 0x1
:cond_91
iput-boolean v1, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->needNewExtractor:Z
goto :goto_b5
:cond_94
const/4 v3, 0x0
if-eqz v0, :cond_9d
.line 143
new-instance v0, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;
invoke-direct {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;-><init>()V
goto :goto_9e
:cond_9d
move-object v0, v3
:goto_9e
iput-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Decoder:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;
.line 144
iget-boolean v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->isPackedAudio:Z
if-eqz v0, :cond_ac
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v4, 0xa
invoke-direct {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
goto :goto_ad
:cond_ac
move-object v0, v3
:goto_ad
iput-object v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 145
iput-object v3, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->previousExtractor:Lcom/google/android/exoplayer2/extractor/Extractor;
.line 146
iput-boolean v1, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->shouldSpliceIn:Z
.line 147
iput-boolean v2, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->needNewExtractor:Z
.line 149
:goto_b5
iput-object v12, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 150
sget-object v0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->UID_SOURCE:Ljava/util/concurrent/atomic/AtomicInteger;
invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->getAndIncrement()I
move-result v0
iput v0, v11, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->uid:I
return-void
.end method
.method private static buildDataSource(Lcom/google/android/exoplayer2/upstream/DataSource;[B[B)Lcom/google/android/exoplayer2/upstream/DataSource;
.registers 4
if-eqz p1, :cond_b
if-nez p2, :cond_5
goto :goto_b
.line 329
:cond_5
new-instance v0, Lcom/google/android/exoplayer2/source/hls/Aes128DataSource;
invoke-direct {v0, p0, p1, p2}, Lcom/google/android/exoplayer2/source/hls/Aes128DataSource;-><init>(Lcom/google/android/exoplayer2/upstream/DataSource;[B[B)V
return-object v0
:cond_b
:goto_b
return-object p0
.end method
.method private buildPackedAudioExtractor(J)Lcom/google/android/exoplayer2/extractor/Extractor;
.registers 5
.line 374
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v1, ".aac"
invoke-virtual {v0, v1}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_10
.line 375
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;
invoke-direct {v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;-><init>(J)V
goto :goto_53
.line 376
:cond_10
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v1, ".ac3"
invoke-virtual {v0, v1}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-nez v0, :cond_4e
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v1, ".ec3"
.line 377
invoke-virtual {v0, v1}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_25
goto :goto_4e
.line 379
:cond_25
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v1, ".mp3"
invoke-virtual {v0, v1}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_35
.line 380
new-instance v0, Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor;
invoke-direct {v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor;-><init>(J)V
goto :goto_53
.line 382
:cond_35
new-instance p1, Ljava/lang/IllegalArgumentException;
new-instance p2, Ljava/lang/StringBuilder;
invoke-direct {p2}, Ljava/lang/StringBuilder;-><init>()V
const-string v0, "Unkown extension for audio file: "
invoke-virtual {p2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
invoke-virtual {p2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p2
invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw p1
.line 378
:cond_4e
:goto_4e
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;
invoke-direct {v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;-><init>(J)V
.line 384
:goto_53
iget-object p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractorOutput:Lcom/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper;
invoke-interface {v0, p1}, Lcom/google/android/exoplayer2/extractor/Extractor;->init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
return-object v0
.end method
.method private createExtractor()Lcom/google/android/exoplayer2/extractor/Extractor;
.registers 6
.line 336
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->hlsUrl:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
iget-object v0, v0, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;->format:Lcom/google/android/exoplayer2/Format;
iget-object v0, v0, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String;
const-string v1, "text/vtt"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
const/4 v1, 0x0
const/4 v2, 0x1
if-nez v0, :cond_75
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v3, ".webvtt"
.line 337
invoke-virtual {v0, v3}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-nez v0, :cond_75
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v3, ".vtt"
.line 338
invoke-virtual {v0, v3}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_25
goto :goto_75
.line 340
:cond_25
iget-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->needNewExtractor:Z
if-nez v0, :cond_2c
.line 343
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->previousExtractor:Lcom/google/android/exoplayer2/extractor/Extractor;
goto :goto_81
.line 344
:cond_2c
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->lastPathSegment:Ljava/lang/String;
const-string v3, ".mp4"
invoke-virtual {v0, v3}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_3e
.line 345
new-instance v0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor;
iget-object v3, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-direct {v0, v1, v3}, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor;-><init>(ILcom/google/android/exoplayer2/util/TimestampAdjuster;)V
goto :goto_80
:cond_3e
const/16 v0, 0x10
.line 351
iget-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->trackFormat:Lcom/google/android/exoplayer2/Format;
iget-object v1, v1, Lcom/google/android/exoplayer2/Format;->codecs:Ljava/lang/String;
.line 352
invoke-static {v1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v3
if-nez v3, :cond_67
.line 356
invoke-static {v1}, Lcom/google/android/exoplayer2/util/MimeTypes;->getAudioMediaMimeType(Ljava/lang/String;)Ljava/lang/String;
move-result-object v3
const-string v4, "audio/mp4a-latm"
invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v3
if-nez v3, :cond_58
const/16 v0, 0x12
.line 359
:cond_58
invoke-static {v1}, Lcom/google/android/exoplayer2/util/MimeTypes;->getVideoMediaMimeType(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
const-string/jumbo v3, "video/avc"
invoke-virtual {v3, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_67
or-int/lit8 v0, v0, 0x4
.line 363
:cond_67
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
iget-object v3, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
new-instance v4, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;
invoke-direct {v4, v0}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;-><init>(I)V
invoke-direct {v1, v3, v4, v2}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;-><init>(Lcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;Z)V
move-object v0, v1
goto :goto_80
.line 339
:cond_75
:goto_75
new-instance v0, Lcom/google/android/exoplayer2/source/hls/WebvttExtractor;
iget-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->trackFormat:Lcom/google/android/exoplayer2/Format;
iget-object v1, v1, Lcom/google/android/exoplayer2/Format;->language:Ljava/lang/String;
iget-object v3, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-direct {v0, v1, v3}, Lcom/google/android/exoplayer2/source/hls/WebvttExtractor;-><init>(Ljava/lang/String;Lcom/google/android/exoplayer2/util/TimestampAdjuster;)V
:goto_80
const/4 v1, 0x1
:goto_81
if-eqz v1, :cond_88
.line 367
iget-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractorOutput:Lcom/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper;
invoke-interface {v0, v1}, Lcom/google/android/exoplayer2/extractor/Extractor;->init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
:cond_88
return-object v0
.end method
.method private loadMedia()V
.registers 12
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 230
iget-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->isEncrypted:Z
const/4 v1, 0x1
const/4 v2, 0x0
if-eqz v0, :cond_e
.line 231
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSpec:Lcom/google/android/exoplayer2/upstream/DataSpec;
.line 232
iget v3, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->bytesLoaded:I
if-eqz v3, :cond_16
const/4 v3, 0x1
goto :goto_17
.line 234
:cond_e
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSpec:Lcom/google/android/exoplayer2/upstream/DataSpec;
iget v3, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->bytesLoaded:I
invoke-static {v0, v3}, Lcom/google/android/exoplayer2/util/Util;->getRemainderDataSpec(Lcom/google/android/exoplayer2/upstream/DataSpec;I)Lcom/google/android/exoplayer2/upstream/DataSpec;
move-result-object v0
:cond_16
const/4 v3, 0x0
.line 237
:goto_17
iget-boolean v4, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->isMasterTimestampSource:Z
if-nez v4, :cond_20
.line 238
iget-object v4, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->waitUntilInitialized()V
.line 241
:cond_20
:try_start_20
new-instance v4, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;
iget-object v6, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
iget-wide v7, v0, Lcom/google/android/exoplayer2/upstream/DataSpec;->absoluteStreamPosition:J
iget-object v5, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 242
invoke-interface {v5, v0}, Lcom/google/android/exoplayer2/upstream/DataSource;->open(Lcom/google/android/exoplayer2/upstream/DataSpec;)J
move-result-wide v9
move-object v5, v4
invoke-direct/range {v5 .. v10}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;-><init>(Lcom/google/android/exoplayer2/upstream/DataSource;JJ)V
.line 243
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractor:Lcom/google/android/exoplayer2/extractor/Extractor;
if-nez v0, :cond_56
.line 245
invoke-direct {p0, v4}, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->peekId3PrivTimestamp(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
move-result-wide v5
const-wide v7, -0x7fffffffffffffffL # -4.9E-324
cmp-long v0, v5, v7
if-eqz v0, :cond_4e
.line 249
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {v0, v5, v6}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->adjustTsTimestamp(J)J
move-result-wide v5
invoke-direct {p0, v5, v6}, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->buildPackedAudioExtractor(J)Lcom/google/android/exoplayer2/extractor/Extractor;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractor:Lcom/google/android/exoplayer2/extractor/Extractor;
goto :goto_56
.line 247
:cond_4e
new-instance v0, Lcom/google/android/exoplayer2/ParserException;
const-string v1, "ID3 PRIV timestamp missing."
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw v0
:cond_56
:goto_56
if-eqz v3, :cond_5d
.line 252
iget v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->bytesLoaded:I
invoke-interface {v4, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
:try_end_5d
.catchall {:try_start_20 .. :try_end_5d} :catchall_8d
:cond_5d
:goto_5d
if-nez v2, :cond_79
.line 256
:try_start_5f
iget-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->loadCanceled:Z
if-nez v0, :cond_79
.line 257
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractor:Lcom/google/android/exoplayer2/extractor/Extractor;
const/4 v2, 0x0
invoke-interface {v0, v4, v2}, Lcom/google/android/exoplayer2/extractor/Extractor;->read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
move-result v2
:try_end_6a
.catchall {:try_start_5f .. :try_end_6a} :catchall_6b
goto :goto_5d
:catchall_6b
move-exception v0
.line 260
:try_start_6c
invoke-interface {v4}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v1
iget-object v3, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSpec:Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-wide v3, v3, Lcom/google/android/exoplayer2/upstream/DataSpec;->absoluteStreamPosition:J
sub-long/2addr v1, v3
long-to-int v2, v1
iput v2, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->bytesLoaded:I
throw v0
:cond_79
invoke-interface {v4}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v2
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSpec:Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-wide v4, v0, Lcom/google/android/exoplayer2/upstream/DataSpec;->absoluteStreamPosition:J
sub-long/2addr v2, v4
long-to-int v0, v2
iput v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->bytesLoaded:I
:try_end_85
.catchall {:try_start_6c .. :try_end_85} :catchall_8d
.line 263
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->closeQuietly(Lcom/google/android/exoplayer2/upstream/DataSource;)V
.line 265
iput-boolean v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->loadCompleted:Z
return-void
:catchall_8d
move-exception v0
.line 263
iget-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->closeQuietly(Lcom/google/android/exoplayer2/upstream/DataSource;)V
throw v0
.end method
.method private maybeLoadInitData()V
.registers 9
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 201
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->previousExtractor:Lcom/google/android/exoplayer2/extractor/Extractor;
iget-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractor:Lcom/google/android/exoplayer2/extractor/Extractor;
if-eq v0, v1, :cond_5e
iget-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initLoadCompleted:Z
if-nez v0, :cond_5e
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initDataSpec:Lcom/google/android/exoplayer2/upstream/DataSpec;
if-nez v0, :cond_f
goto :goto_5e
.line 205
:cond_f
iget v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initSegmentBytesLoaded:I
invoke-static {v0, v1}, Lcom/google/android/exoplayer2/util/Util;->getRemainderDataSpec(Lcom/google/android/exoplayer2/upstream/DataSpec;I)Lcom/google/android/exoplayer2/upstream/DataSpec;
move-result-object v0
.line 207
:try_start_15
new-instance v7, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;
iget-object v2, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
iget-wide v3, v0, Lcom/google/android/exoplayer2/upstream/DataSpec;->absoluteStreamPosition:J
iget-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initDataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 208
invoke-interface {v1, v0}, Lcom/google/android/exoplayer2/upstream/DataSource;->open(Lcom/google/android/exoplayer2/upstream/DataSpec;)J
move-result-wide v5
move-object v1, v7
invoke-direct/range {v1 .. v6}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;-><init>(Lcom/google/android/exoplayer2/upstream/DataSource;JJ)V
:try_end_25
.catchall {:try_start_15 .. :try_end_25} :catchall_57
const/4 v0, 0x0
:goto_26
if-nez v0, :cond_42
.line 211
:try_start_28
iget-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->loadCanceled:Z
if-nez v0, :cond_42
.line 212
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractor:Lcom/google/android/exoplayer2/extractor/Extractor;
const/4 v1, 0x0
invoke-interface {v0, v7, v1}, Lcom/google/android/exoplayer2/extractor/Extractor;->read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
move-result v0
:try_end_33
.catchall {:try_start_28 .. :try_end_33} :catchall_34
goto :goto_26
:catchall_34
move-exception v0
.line 215
:try_start_35
invoke-interface {v7}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v1
iget-object v3, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initDataSpec:Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-wide v3, v3, Lcom/google/android/exoplayer2/upstream/DataSpec;->absoluteStreamPosition:J
sub-long/2addr v1, v3
long-to-int v2, v1
iput v2, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initSegmentBytesLoaded:I
throw v0
:cond_42
invoke-interface {v7}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v0
iget-object v2, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initDataSpec:Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-wide v2, v2, Lcom/google/android/exoplayer2/upstream/DataSpec;->absoluteStreamPosition:J
sub-long/2addr v0, v2
long-to-int v1, v0
iput v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initSegmentBytesLoaded:I
:try_end_4e
.catchall {:try_start_35 .. :try_end_4e} :catchall_57
.line 218
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->closeQuietly(Lcom/google/android/exoplayer2/upstream/DataSource;)V
const/4 v0, 0x1
.line 220
iput-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->initLoadCompleted:Z
return-void
:catchall_57
move-exception v0
.line 218
iget-object v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->dataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->closeQuietly(Lcom/google/android/exoplayer2/upstream/DataSource;)V
throw v0
:cond_5e
:goto_5e
return-void
.end method
.method private peekId3PrivTimestamp(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
.registers 11
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 279
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->resetPeekPosition()V
.line 280
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v1, 0x0
const/16 v2, 0xa
const/4 v3, 0x1
invoke-interface {p1, v0, v1, v2, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BIIZ)Z
move-result v0
const-wide v4, -0x7fffffffffffffffL # -4.9E-324
if-nez v0, :cond_17
return-wide v4
.line 283
:cond_17
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 284
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v0
.line 285
sget v6, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->ID3_TAG:I
if-eq v0, v6, :cond_27
return-wide v4
.line 288
:cond_27
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v6, 0x3
invoke-virtual {v0, v6}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 289
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readSynchSafeInt()I
move-result v0
add-int/lit8 v6, v0, 0xa
.line 291
iget-object v7, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v7}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->capacity()I
move-result v7
if-le v6, v7, :cond_4d
.line 292
iget-object v7, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v7, v7, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 293
iget-object v8, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v8, v6}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 294
iget-object v6, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v6, v6, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-static {v7, v1, v6, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 296
:cond_4d
iget-object v6, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v6, v6, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v6, v2, v0, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BIIZ)Z
move-result p1
if-nez p1, :cond_58
return-wide v4
.line 299
:cond_58
iget-object p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Decoder:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;
iget-object v2, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v2, v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {p1, v2, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decode([BI)Lcom/google/android/exoplayer2/metadata/Metadata;
move-result-object p1
if-nez p1, :cond_65
return-wide v4
.line 303
:cond_65
invoke-virtual {p1}, Lcom/google/android/exoplayer2/metadata/Metadata;->length()I
move-result v0
const/4 v2, 0x0
:goto_6a
if-ge v2, v0, :cond_9a
.line 305
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/metadata/Metadata;->get(I)Lcom/google/android/exoplayer2/metadata/Metadata$Entry;
move-result-object v3
.line 306
instance-of v6, v3, Lcom/google/android/exoplayer2/metadata/id3/PrivFrame;
if-eqz v6, :cond_97
.line 307
check-cast v3, Lcom/google/android/exoplayer2/metadata/id3/PrivFrame;
.line 308
iget-object v6, v3, Lcom/google/android/exoplayer2/metadata/id3/PrivFrame;->owner:Ljava/lang/String;
const-string v7, "com.apple.streaming.transportStreamTimestamp"
invoke-virtual {v7, v6}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v6
if-eqz v6, :cond_97
.line 309
iget-object p1, v3, Lcom/google/android/exoplayer2/metadata/id3/PrivFrame;->privateData:[B
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v2, 0x8
invoke-static {p1, v1, v0, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 310
iget-object p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 311
iget-object p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->id3Data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLong()J
move-result-wide v0
return-wide v0
:cond_97
add-int/lit8 v2, v2, 0x1
goto :goto_6a
:cond_9a
return-wide v4
.end method
# virtual methods
.method public bytesLoaded()J
.registers 3
.line 171
iget v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->bytesLoaded:I
int-to-long v0, v0
return-wide v0
.end method
.method public cancelLoad()V
.registers 2
const/4 v0, 0x1
.line 178
iput-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->loadCanceled:Z
return-void
.end method
.method public init(Lcom/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper;)V
.registers 4
.line 160
iput-object p1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractorOutput:Lcom/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper;
.line 161
iget v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->uid:I
iget-boolean v1, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->shouldSpliceIn:Z
invoke-virtual {p1, v0, v1}, Lcom/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper;->init(IZ)V
return-void
.end method
.method public isLoadCanceled()Z
.registers 2
.line 183
iget-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->loadCanceled:Z
return v0
.end method
.method public isLoadCompleted()Z
.registers 2
.line 166
iget-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->loadCompleted:Z
return v0
.end method
.method public load()V
.registers 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 188
iget-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractor:Lcom/google/android/exoplayer2/extractor/Extractor;
if-nez v0, :cond_e
iget-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->isPackedAudio:Z
if-nez v0, :cond_e
.line 190
invoke-direct {p0}, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->createExtractor()Lcom/google/android/exoplayer2/extractor/Extractor;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->extractor:Lcom/google/android/exoplayer2/extractor/Extractor;
.line 192
:cond_e
invoke-direct {p0}, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->maybeLoadInitData()V
.line 193
iget-boolean v0, p0, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->loadCanceled:Z
if-nez v0, :cond_18
.line 194
invoke-direct {p0}, Lcom/google/android/exoplayer2/source/hls/HlsMediaChunk;->loadMedia()V
:cond_18
return-void
.end method