Mp4Extractor.smali
.class public final Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;
.super Ljava/lang/Object;
.source "Mp4Extractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/Extractor;
.implements Lcom/google/android/exoplayer2/extractor/SeekMap;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;,
Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$State;,
Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Flags;
}
.end annotation
# static fields
.field private static final BRAND_QUICKTIME:I
.field public static final FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
.field public static final FLAG_WORKAROUND_IGNORE_EDIT_LISTS:I = 0x1
.field private static final MAXIMUM_READ_AHEAD_BYTES_STREAM:J = 0x100000L
.field private static final RELOAD_MINIMUM_SEEK_DISTANCE:J = 0x40000L
.field private static final STATE_READING_ATOM_HEADER:I = 0x0
.field private static final STATE_READING_ATOM_PAYLOAD:I = 0x1
.field private static final STATE_READING_SAMPLE:I = 0x2
# instance fields
.field private accumulatedSampleSizes:[[J
.field private atomData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final atomHeader:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private atomHeaderBytesRead:I
.field private atomSize:J
.field private atomType:I
.field private final containerAtoms:Ljava/util/ArrayDeque;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/ArrayDeque<",
"Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;",
">;"
}
.end annotation
.end field
.field private durationUs:J
.field private extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.field private firstVideoTrackIndex:I
.field private final flags:I
.field private isQuickTime:Z
.field private final nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final nalStartCode:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private parserState:I
.field private sampleBytesWritten:I
.field private sampleCurrentNalBytesRemaining:I
.field private sampleTrackIndex:I
.field private tracks:[Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 51
sget-object v0, Lcom/google/android/exoplayer2/extractor/mp4/-$$Lambda$Mp4Extractor$quy71uYOGsneho91FZy1d2UGE1Q;->INSTANCE:Lcom/google/android/exoplayer2/extractor/mp4/-$$Lambda$Mp4Extractor$quy71uYOGsneho91FZy1d2UGE1Q;
sput-object v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
.line 79
const-string v0, "qt "
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->BRAND_QUICKTIME:I
return-void
.end method
.method public constructor <init>()V
.registers 2
.line 124
const/4 v0, 0x0
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;-><init>(I)V
.line 125
return-void
.end method
.method public constructor <init>(I)V
.registers 4
.param p1, "flags" # I
.line 133
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 134
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->flags:I
.line 135
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0x10
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeader:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 136
new-instance v0, Ljava/util/ArrayDeque;
invoke-direct {v0}, Ljava/util/ArrayDeque;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
.line 137
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
sget-object v1, Lcom/google/android/exoplayer2/util/NalUnitUtil;->NAL_START_CODE:[B
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([B)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->nalStartCode:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 138
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v1, 0x4
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 139
const/4 v0, -0x1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleTrackIndex:I
.line 140
return-void
.end method
.method private static calculateAccumulatedSampleSizes([Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;)[[J
.registers 15
.param p0, "tracks" # [Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
.line 625
array-length v0, p0
new-array v0, v0, [[J
.line 626
.local v0, "accumulatedSampleSizes":[[J
array-length v1, p0
new-array v1, v1, [I
.line 627
.local v1, "nextSampleIndex":[I
array-length v2, p0
new-array v2, v2, [J
.line 628
.local v2, "nextSampleTimesUs":[J
array-length v3, p0
new-array v3, v3, [Z
.line 629
.local v3, "tracksFinished":[Z
const/4 v4, 0x0
.local v4, "i":I
:goto_d
array-length v5, p0
if-ge v4, v5, :cond_28
.line 630
aget-object v5, p0, v4
iget-object v5, v5, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget v5, v5, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->sampleCount:I
new-array v5, v5, [J
aput-object v5, v0, v4
.line 631
aget-object v5, p0, v4
iget-object v5, v5, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget-object v5, v5, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->timestampsUs:[J
const/4 v6, 0x0
aget-wide v6, v5, v6
aput-wide v6, v2, v4
.line 629
add-int/lit8 v4, v4, 0x1
goto :goto_d
.line 633
.end local v4 # "i":I
:cond_28
const-wide/16 v4, 0x0
.line 634
.local v4, "accumulatedSampleSize":J
const/4 v6, 0x0
.line 635
.local v6, "finishedTracks":I
:goto_2b
array-length v7, p0
if-ge v6, v7, :cond_71
.line 636
const-wide v7, 0x7fffffffffffffffL
.line 637
.local v7, "minTimeUs":J
const/4 v9, -0x1
.line 638
.local v9, "minTimeTrackIndex":I
const/4 v10, 0x0
.local v10, "i":I
:goto_35
array-length v11, p0
if-ge v10, v11, :cond_48
.line 639
aget-boolean v11, v3, v10
if-nez v11, :cond_45
aget-wide v11, v2, v10
cmp-long v13, v11, v7
if-gtz v13, :cond_45
.line 640
move v9, v10
.line 641
aget-wide v7, v2, v10
.line 638
:cond_45
add-int/lit8 v10, v10, 0x1
goto :goto_35
.line 644
.end local v10 # "i":I
:cond_48
aget v10, v1, v9
.line 645
.local v10, "trackSampleIndex":I
aget-object v11, v0, v9
aput-wide v4, v11, v10
.line 646
aget-object v11, p0, v9
iget-object v11, v11, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget-object v11, v11, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->sizes:[I
aget v11, v11, v10
int-to-long v11, v11
add-long/2addr v4, v11
.line 647
const/4 v11, 0x1
add-int/2addr v10, v11
aput v10, v1, v9
.line 648
aget-object v12, v0, v9
array-length v12, v12
if-ge v10, v12, :cond_6c
.line 649
aget-object v11, p0, v9
iget-object v11, v11, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget-object v11, v11, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->timestampsUs:[J
aget-wide v12, v11, v10
aput-wide v12, v2, v9
goto :goto_70
.line 652
:cond_6c
aput-boolean v11, v3, v9
.line 653
add-int/lit8 v6, v6, 0x1
.line 655
.end local v7 # "minTimeUs":J
.end local v9 # "minTimeTrackIndex":I
.end local v10 # "trackSampleIndex":I
:goto_70
goto :goto_2b
.line 656
:cond_71
return-object v0
.end method
.method private enterReadingAtomHeaderState()V
.registers 2
.line 262
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->parserState:I
.line 263
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
.line 264
return-void
.end method
.method private static getSynchronizationSampleIndex(Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;J)I
.registers 5
.param p0, "sampleTable" # Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.param p1, "timeUs" # J
.line 690
invoke-virtual {p0, p1, p2}, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->getIndexOfEarlierOrEqualSynchronizationSample(J)I
move-result v0
.line 691
.local v0, "sampleIndex":I
const/4 v1, -0x1
if-ne v0, v1, :cond_b
.line 693
invoke-virtual {p0, p1, p2}, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->getIndexOfLaterOrEqualSynchronizationSample(J)I
move-result v0
.line 695
:cond_b
return v0
.end method
.method private getTrackIndexOfNextReadSample(J)I
.registers 26
.param p1, "inputPosition" # J
.line 568
move-object/from16 v0, p0
const-wide v1, 0x7fffffffffffffffL
.line 569
.local v1, "preferredSkipAmount":J
const/4 v3, 0x1
.line 570
.local v3, "preferredRequiresReload":Z
const/4 v4, -0x1
.line 571
.local v4, "preferredTrackIndex":I
const-wide v5, 0x7fffffffffffffffL
.line 572
.local v5, "preferredAccumulatedBytes":J
const-wide v7, 0x7fffffffffffffffL
.line 573
.local v7, "minAccumulatedBytes":J
const/4 v9, 0x1
.line 574
.local v9, "minAccumulatedBytesRequiresReload":Z
const/4 v10, -0x1
.line 575
.local v10, "minAccumulatedBytesTrackIndex":I
const/4 v11, 0x0
.local v11, "trackIndex":I
:goto_16
iget-object v12, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->tracks:[Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
array-length v13, v12
if-ge v11, v13, :cond_60
.line 576
aget-object v12, v12, v11
.line 577
.local v12, "track":Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
iget v13, v12, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleIndex:I
.line 578
.local v13, "sampleIndex":I
iget-object v14, v12, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget v14, v14, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->sampleCount:I
if-ne v13, v14, :cond_26
.line 579
goto :goto_5d
.line 581
:cond_26
iget-object v14, v12, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget-object v14, v14, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->offsets:[J
aget-wide v15, v14, v13
.line 582
.local v15, "sampleOffset":J
iget-object v14, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->accumulatedSampleSizes:[[J
aget-object v14, v14, v11
aget-wide v17, v14, v13
.line 583
.local v17, "sampleAccumulatedBytes":J
sub-long v19, v15, p1
.line 584
.local v19, "skipAmount":J
const-wide/16 v21, 0x0
cmp-long v14, v19, v21
if-ltz v14, :cond_44
const-wide/32 v21, 0x40000
cmp-long v14, v19, v21
if-ltz v14, :cond_42
goto :goto_44
:cond_42
const/4 v14, 0x0
goto :goto_45
:cond_44
:goto_44
const/4 v14, 0x1
.line 585
.local v14, "requiresReload":Z
:goto_45
if-nez v14, :cond_49
if-nez v3, :cond_4f
:cond_49
if-ne v14, v3, :cond_55
cmp-long v21, v19, v1
if-gez v21, :cond_55
.line 587
:cond_4f
move v3, v14
.line 588
move-wide/from16 v1, v19
.line 589
move v4, v11
.line 590
move-wide/from16 v5, v17
.line 592
:cond_55
cmp-long v21, v17, v7
if-gez v21, :cond_5d
.line 593
move-wide/from16 v7, v17
.line 594
move v9, v14
.line 595
move v10, v11
.line 575
.end local v12 # "track":Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
.end local v13 # "sampleIndex":I
.end local v14 # "requiresReload":Z
.end local v15 # "sampleOffset":J
.end local v17 # "sampleAccumulatedBytes":J
.end local v19 # "skipAmount":J
:cond_5d
:goto_5d
add-int/lit8 v11, v11, 0x1
goto :goto_16
.line 598
.end local v11 # "trackIndex":I
:cond_60
const-wide v11, 0x7fffffffffffffffL
cmp-long v13, v7, v11
if-eqz v13, :cond_76
if-eqz v9, :cond_76
const-wide/32 v11, 0x100000
add-long/2addr v11, v7
cmp-long v13, v5, v11
if-gez v13, :cond_74
goto :goto_76
:cond_74
move v11, v10
goto :goto_77
:cond_76
:goto_76
move v11, v4
:goto_77
return v11
.end method
.method private getTrackSampleTables(Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;Z)Ljava/util/ArrayList;
.registers 14
.param p1, "moov" # Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.param p2, "gaplessInfoHolder" # Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;
.param p3, "ignoreEditLists" # Z
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;",
"Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;",
"Z)",
"Ljava/util/ArrayList<",
"Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;",
">;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 436
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 437
.local v0, "trackSampleTables":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;>;"
const/4 v1, 0x0
.local v1, "i":I
:goto_6
iget-object v2, p1, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->containerChildren:Ljava/util/List;
invoke-interface {v2}, Ljava/util/List;->size()I
move-result v2
if-ge v1, v2, :cond_55
.line 438
iget-object v2, p1, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->containerChildren:Ljava/util/List;
invoke-interface {v2, v1}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v2
check-cast v2, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.line 439
.local v2, "atom":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
iget v3, v2, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->type:I
sget v4, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_trak:I
if-eq v3, v4, :cond_1d
.line 440
goto :goto_52
.line 442
:cond_1d
sget v3, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_mvhd:I
.line 445
invoke-virtual {p1, v3}, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->getLeafAtomOfType(I)Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
move-result-object v4
const-wide v5, -0x7fffffffffffffffL # -4.9E-324
const/4 v7, 0x0
iget-boolean v9, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->isQuickTime:Z
.line 443
move-object v3, v2
move v8, p3
invoke-static/range {v3 .. v9}, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers;->parseTrak(Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;JLcom/google/android/exoplayer2/drm/DrmInitData;ZZ)Lcom/google/android/exoplayer2/extractor/mp4/Track;
move-result-object v3
.line 450
.local v3, "track":Lcom/google/android/exoplayer2/extractor/mp4/Track;
if-nez v3, :cond_34
.line 451
goto :goto_52
.line 453
:cond_34
sget v4, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_mdia:I
.line 454
invoke-virtual {v2, v4}, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->getContainerAtomOfType(I)Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
move-result-object v4
sget v5, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_minf:I
.line 455
invoke-virtual {v4, v5}, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->getContainerAtomOfType(I)Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
move-result-object v4
sget v5, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_stbl:I
.line 456
invoke-virtual {v4, v5}, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->getContainerAtomOfType(I)Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
move-result-object v4
.line 457
.local v4, "stblAtom":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
invoke-static {v3, v4, p2}, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers;->parseStbl(Lcom/google/android/exoplayer2/extractor/mp4/Track;Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;)Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
move-result-object v5
.line 458
.local v5, "trackSampleTable":Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget v6, v5, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->sampleCount:I
if-nez v6, :cond_4f
.line 459
goto :goto_52
.line 461
:cond_4f
invoke-virtual {v0, v5}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 437
.end local v2 # "atom":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.end local v3 # "track":Lcom/google/android/exoplayer2/extractor/mp4/Track;
.end local v4 # "stblAtom":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.end local v5 # "trackSampleTable":Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
:goto_52
add-int/lit8 v1, v1, 0x1
goto :goto_6
.line 463
.end local v1 # "i":I
:cond_55
return-object v0
.end method
.method static synthetic lambda$static$0()[Lcom/google/android/exoplayer2/extractor/Extractor;
.registers 3
.line 51
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
new-instance v1, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
.method private static maybeAdjustSeekOffset(Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;JJ)J
.registers 11
.param p0, "sampleTable" # Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.param p1, "seekTimeUs" # J
.param p3, "offset" # J
.line 670
invoke-static {p0, p1, p2}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->getSynchronizationSampleIndex(Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;J)I
move-result v0
.line 671
.local v0, "sampleIndex":I
const/4 v1, -0x1
if-ne v0, v1, :cond_8
.line 672
return-wide p3
.line 674
:cond_8
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->offsets:[J
aget-wide v2, v1, v0
.line 675
.local v2, "sampleOffset":J
invoke-static {v2, v3, p3, p4}, Ljava/lang/Math;->min(JJ)J
move-result-wide v4
return-wide v4
.end method
.method private processAtomEnded(J)V
.registers 7
.param p1, "atomEndPosition" # J
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 356
:goto_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v0}, Ljava/util/ArrayDeque;->isEmpty()Z
move-result v0
const/4 v1, 0x2
if-nez v0, :cond_44
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v0}, Ljava/util/ArrayDeque;->peek()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
iget-wide v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->endPosition:J
cmp-long v0, v2, p1
if-nez v0, :cond_44
.line 357
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v0}, Ljava/util/ArrayDeque;->pop()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.line 358
.local v0, "containerAtom":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
iget v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->type:I
sget v3, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_moov:I
if-ne v2, v3, :cond_30
.line 360
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->processMoovAtom(Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;)V
.line 361
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v2}, Ljava/util/ArrayDeque;->clear()V
.line 362
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->parserState:I
goto :goto_43
.line 363
:cond_30
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v1}, Ljava/util/ArrayDeque;->isEmpty()Z
move-result v1
if-nez v1, :cond_43
.line 364
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v1}, Ljava/util/ArrayDeque;->peek()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
invoke-virtual {v1, v0}, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->add(Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;)V
.line 366
.end local v0 # "containerAtom":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
:cond_43
:goto_43
goto :goto_0
.line 367
:cond_44
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->parserState:I
if-eq v0, v1, :cond_4b
.line 368
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->enterReadingAtomHeaderState()V
.line 370
:cond_4b
return-void
.end method
.method private static processFtypAtom(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.registers 5
.param p0, "atomData" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 705
const/16 v0, 0x8
invoke-virtual {p0, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 706
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v0
.line 707
.local v0, "majorBrand":I
sget v1, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->BRAND_QUICKTIME:I
const/4 v2, 0x1
if-ne v0, v1, :cond_f
.line 708
return v2
.line 710
:cond_f
const/4 v1, 0x4
invoke-virtual {p0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 711
:cond_13
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v1
if-lez v1, :cond_22
.line 712
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v1
sget v3, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->BRAND_QUICKTIME:I
if-ne v1, v3, :cond_13
.line 713
return v2
.line 716
:cond_22
const/4 v1, 0x0
return v1
.end method
.method private processMoovAtom(Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;)V
.registers 26
.param p1, "moov" # Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 376
move-object/from16 v0, p0
move-object/from16 v1, p1
const/4 v2, -0x1
.line 377
.local v2, "firstVideoTrackIndex":I
const-wide v3, -0x7fffffffffffffffL # -4.9E-324
.line 378
.local v3, "durationUs":J
new-instance v5, Ljava/util/ArrayList;
invoke-direct {v5}, Ljava/util/ArrayList;-><init>()V
.line 381
.local v5, "tracks":Ljava/util/List;, "Ljava/util/List<Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;>;"
const/4 v6, 0x0
.line 382
.local v6, "udtaMetadata":Lcom/google/android/exoplayer2/metadata/Metadata;
new-instance v7, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;
invoke-direct {v7}, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;-><init>()V
.line 383
.local v7, "gaplessInfoHolder":Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;
sget v8, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_udta:I
invoke-virtual {v1, v8}, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->getLeafAtomOfType(I)Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
move-result-object v8
.line 384
.local v8, "udta":Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
if-eqz v8, :cond_28
.line 385
iget-boolean v9, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->isQuickTime:Z
invoke-static {v8, v9}, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers;->parseUdta(Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;Z)Lcom/google/android/exoplayer2/metadata/Metadata;
move-result-object v6
.line 386
if-eqz v6, :cond_28
.line 387
invoke-virtual {v7, v6}, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->setFromMetadata(Lcom/google/android/exoplayer2/metadata/Metadata;)Z
.line 390
:cond_28
const/4 v9, 0x0
.line 391
.local v9, "mdtaMetadata":Lcom/google/android/exoplayer2/metadata/Metadata;
sget v10, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_meta:I
invoke-virtual {v1, v10}, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->getContainerAtomOfType(I)Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
move-result-object v10
.line 392
.local v10, "meta":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
if-eqz v10, :cond_35
.line 393
invoke-static {v10}, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers;->parseMdtaFromMeta(Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;)Lcom/google/android/exoplayer2/metadata/Metadata;
move-result-object v9
.line 396
:cond_35
iget v11, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->flags:I
const/4 v12, 0x1
and-int/2addr v11, v12
if-eqz v11, :cond_3c
goto :goto_3d
:cond_3c
const/4 v12, 0x0
:goto_3d
move v11, v12
.line 397
.local v11, "ignoreEditLists":Z
nop
.line 398
invoke-direct {v0, v1, v7, v11}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->getTrackSampleTables(Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;Z)Ljava/util/ArrayList;
move-result-object v12
.line 400
.local v12, "trackSampleTables":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;>;"
invoke-virtual {v12}, Ljava/util/ArrayList;->size()I
move-result v14
.line 401
.local v14, "trackCount":I
const/4 v15, 0x0
.local v15, "i":I
:goto_48
if-ge v15, v14, :cond_b2
.line 402
invoke-virtual {v12, v15}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
move-result-object v16
move-object/from16 v13, v16
check-cast v13, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.line 403
.local v13, "trackSampleTable":Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget-object v1, v13, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->track:Lcom/google/android/exoplayer2/extractor/mp4/Track;
.line 404
.local v1, "track":Lcom/google/android/exoplayer2/extractor/mp4/Track;
move-object/from16 v16, v8
.end local v8 # "udta":Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
.local v16, "udta":Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
new-instance v8, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
move-object/from16 v17, v10
.end local v10 # "meta":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.local v17, "meta":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
iget-object v10, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
move/from16 v18, v11
.end local v11 # "ignoreEditLists":Z
.local v18, "ignoreEditLists":Z
iget v11, v1, Lcom/google/android/exoplayer2/extractor/mp4/Track;->type:I
.line 405
invoke-interface {v10, v15, v11}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object v10
invoke-direct {v8, v1, v13, v10}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;-><init>(Lcom/google/android/exoplayer2/extractor/mp4/Track;Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
.line 408
.local v8, "mp4Track":Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
iget v10, v13, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->maximumSize:I
add-int/lit8 v10, v10, 0x1e
.line 409
.local v10, "maxInputSize":I
iget-object v11, v1, Lcom/google/android/exoplayer2/extractor/mp4/Track;->format:Lcom/google/android/exoplayer2/Format;
invoke-virtual {v11, v10}, Lcom/google/android/exoplayer2/Format;->copyWithMaxInputSize(I)Lcom/google/android/exoplayer2/Format;
move-result-object v11
.line 410
.local v11, "format":Lcom/google/android/exoplayer2/Format;
move/from16 v19, v10
.end local v10 # "maxInputSize":I
.local v19, "maxInputSize":I
iget v10, v1, Lcom/google/android/exoplayer2/extractor/mp4/Track;->type:I
.line 411
invoke-static {v10, v11, v6, v9, v7}, Lcom/google/android/exoplayer2/extractor/mp4/MetadataUtil;->getFormatWithMetadata(ILcom/google/android/exoplayer2/Format;Lcom/google/android/exoplayer2/metadata/Metadata;Lcom/google/android/exoplayer2/metadata/Metadata;Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;)Lcom/google/android/exoplayer2/Format;
move-result-object v10
.line 413
.end local v11 # "format":Lcom/google/android/exoplayer2/Format;
.local v10, "format":Lcom/google/android/exoplayer2/Format;
iget-object v11, v8, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v11, v10}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 415
move-object/from16 v20, v6
move-object v11, v7
.end local v6 # "udtaMetadata":Lcom/google/android/exoplayer2/metadata/Metadata;
.end local v7 # "gaplessInfoHolder":Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;
.local v11, "gaplessInfoHolder":Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;
.local v20, "udtaMetadata":Lcom/google/android/exoplayer2/metadata/Metadata;
iget-wide v6, v1, Lcom/google/android/exoplayer2/extractor/mp4/Track;->durationUs:J
const-wide v21, -0x7fffffffffffffffL # -4.9E-324
cmp-long v23, v6, v21
if-eqz v23, :cond_8f
iget-wide v6, v1, Lcom/google/android/exoplayer2/extractor/mp4/Track;->durationUs:J
goto :goto_91
:cond_8f
iget-wide v6, v13, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->durationUs:J
.line 416
:goto_91
invoke-static {v3, v4, v6, v7}, Ljava/lang/Math;->max(JJ)J
move-result-wide v3
.line 419
iget v6, v1, Lcom/google/android/exoplayer2/extractor/mp4/Track;->type:I
const/4 v7, 0x2
if-ne v6, v7, :cond_a1
const/4 v6, -0x1
if-ne v2, v6, :cond_a1
.line 420
invoke-interface {v5}, Ljava/util/List;->size()I
move-result v2
.line 422
:cond_a1
invoke-interface {v5, v8}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 401
.end local v1 # "track":Lcom/google/android/exoplayer2/extractor/mp4/Track;
.end local v8 # "mp4Track":Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
.end local v10 # "format":Lcom/google/android/exoplayer2/Format;
.end local v13 # "trackSampleTable":Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.end local v19 # "maxInputSize":I
add-int/lit8 v15, v15, 0x1
move-object/from16 v1, p1
move-object v7, v11
move-object/from16 v8, v16
move-object/from16 v10, v17
move/from16 v11, v18
move-object/from16 v6, v20
goto :goto_48
.line 424
.end local v15 # "i":I
.end local v16 # "udta":Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
.end local v17 # "meta":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.end local v18 # "ignoreEditLists":Z
.end local v20 # "udtaMetadata":Lcom/google/android/exoplayer2/metadata/Metadata;
.restart local v6 # "udtaMetadata":Lcom/google/android/exoplayer2/metadata/Metadata;
.restart local v7 # "gaplessInfoHolder":Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;
.local v8, "udta":Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
.local v10, "meta":Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.local v11, "ignoreEditLists":Z
:cond_b2
iput v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->firstVideoTrackIndex:I
.line 425
iput-wide v3, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->durationUs:J
.line 426
const/4 v1, 0x0
new-array v1, v1, [Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
invoke-interface {v5, v1}, Ljava/util/List;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
move-result-object v1
check-cast v1, [Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
iput-object v1, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->tracks:[Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
.line 427
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->calculateAccumulatedSampleSizes([Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;)[[J
move-result-object v1
iput-object v1, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->accumulatedSampleSizes:[[J
.line 429
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
invoke-interface {v1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->endTracks()V
.line 430
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
invoke-interface {v1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->seekMap(Lcom/google/android/exoplayer2/extractor/SeekMap;)V
.line 431
return-void
.end method
.method private readAtomHeader(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.registers 12
.param p1, "input" # Lcom/google/android/exoplayer2/extractor/ExtractorInput;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 267
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
const/16 v1, 0x8
const/4 v2, 0x1
const/4 v3, 0x0
if-nez v0, :cond_2a
.line 269
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeader:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v0, v3, v1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BIIZ)Z
move-result v0
if-nez v0, :cond_13
.line 270
return v3
.line 272
:cond_13
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
.line 273
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeader:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 274
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeader:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v4
iput-wide v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomSize:J
.line 275
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeader:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomType:I
.line 278
:cond_2a
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomSize:J
const-wide/16 v6, 0x1
cmp-long v0, v4, v6
if-nez v0, :cond_49
.line 280
const/16 v0, 0x8
.line 281
.local v0, "headerBytesRemaining":I
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeader:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v4, v4, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v4, v1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BII)V
.line 282
iget v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
add-int/2addr v4, v0
iput v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
.line 283
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeader:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedLongToLong()J
move-result-wide v4
iput-wide v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomSize:J
.end local v0 # "headerBytesRemaining":I
goto :goto_7c
.line 284
:cond_49
const-wide/16 v6, 0x0
cmp-long v0, v4, v6
if-nez v0, :cond_7c
.line 287
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getLength()J
move-result-wide v4
.line 288
.local v4, "endPosition":J
const-wide/16 v6, -0x1
cmp-long v0, v4, v6
if-nez v0, :cond_6b
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v0}, Ljava/util/ArrayDeque;->isEmpty()Z
move-result v0
if-nez v0, :cond_6b
.line 289
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v0}, Ljava/util/ArrayDeque;->peek()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
iget-wide v4, v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->endPosition:J
.line 291
:cond_6b
cmp-long v0, v4, v6
if-eqz v0, :cond_7d
.line 292
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v6
sub-long v6, v4, v6
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
int-to-long v8, v0
add-long/2addr v6, v8
iput-wide v6, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomSize:J
goto :goto_7d
.line 284
.end local v4 # "endPosition":J
:cond_7c
:goto_7c
nop
.line 296
:cond_7d
:goto_7d
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomSize:J
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
int-to-long v6, v0
cmp-long v0, v4, v6
if-ltz v0, :cond_f5
.line 300
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomType:I
invoke-static {v0}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->shouldParseContainerAtom(I)Z
move-result v0
if-eqz v0, :cond_b6
.line 301
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v0
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomSize:J
add-long/2addr v0, v3
iget v3, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
int-to-long v3, v3
sub-long/2addr v0, v3
.line 302
.local v0, "endPosition":J
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
new-instance v4, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
iget v5, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomType:I
invoke-direct {v4, v5, v0, v1}, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;-><init>(IJ)V
invoke-virtual {v3, v4}, Ljava/util/ArrayDeque;->push(Ljava/lang/Object;)V
.line 303
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomSize:J
iget v5, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
int-to-long v5, v5
cmp-long v7, v3, v5
if-nez v7, :cond_b2
.line 304
invoke-direct {p0, v0, v1}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->processAtomEnded(J)V
goto :goto_b5
.line 307
:cond_b2
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->enterReadingAtomHeaderState()V
.line 309
.end local v0 # "endPosition":J
:goto_b5
goto :goto_f4
:cond_b6
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomType:I
invoke-static {v0}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->shouldParseLeafAtom(I)Z
move-result v0
if-eqz v0, :cond_ef
.line 312
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
if-ne v0, v1, :cond_c4
const/4 v0, 0x1
goto :goto_c5
:cond_c4
const/4 v0, 0x0
:goto_c5
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 313
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomSize:J
const-wide/32 v6, 0x7fffffff
cmp-long v0, v4, v6
if-gtz v0, :cond_d3
const/4 v0, 0x1
goto :goto_d4
:cond_d3
const/4 v0, 0x0
:goto_d4
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 314
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomSize:J
long-to-int v5, v4
invoke-direct {v0, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 315
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeader:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v4, v4, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-static {v0, v3, v4, v3, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 316
iput v2, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->parserState:I
goto :goto_f4
.line 318
:cond_ef
const/4 v0, 0x0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 319
iput v2, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->parserState:I
.line 322
:goto_f4
return v2
.line 297
:cond_f5
new-instance v0, Lcom/google/android/exoplayer2/ParserException;
const-string v1, "Atom size less than header length (unsupported)."
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private readAtomPayload(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)Z
.registers 12
.param p1, "input" # Lcom/google/android/exoplayer2/extractor/ExtractorInput;
.param p2, "positionHolder" # Lcom/google/android/exoplayer2/extractor/PositionHolder;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 332
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomSize:J
iget v2, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
int-to-long v2, v2
sub-long/2addr v0, v2
.line 333
.local v0, "atomPayloadSize":J
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v2
add-long/2addr v2, v0
.line 334
.local v2, "atomEndPosition":J
const/4 v4, 0x0
.line 335
.local v4, "seekRequired":Z
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
if-eqz v5, :cond_44
.line 336
iget-object v5, v5, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v6, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
long-to-int v7, v0
invoke-interface {p1, v5, v6, v7}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BII)V
.line 337
iget v5, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomType:I
sget v6, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_ftyp:I
if-ne v5, v6, :cond_27
.line 338
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-static {v5}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->processFtypAtom(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
move-result v5
iput-boolean v5, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->isQuickTime:Z
goto :goto_58
.line 339
:cond_27
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v5}, Ljava/util/ArrayDeque;->isEmpty()Z
move-result v5
if-nez v5, :cond_58
.line 340
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v5}, Ljava/util/ArrayDeque;->peek()Ljava/lang/Object;
move-result-object v5
check-cast v5, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
new-instance v6, Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
iget v7, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomType:I
iget-object v8, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-direct {v6, v7, v8}, Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;-><init>(ILcom/google/android/exoplayer2/util/ParsableByteArray;)V
invoke-virtual {v5, v6}, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->add(Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;)V
goto :goto_58
.line 344
:cond_44
const-wide/32 v5, 0x40000
cmp-long v7, v0, v5
if-gez v7, :cond_50
.line 345
long-to-int v5, v0
invoke-interface {p1, v5}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
goto :goto_58
.line 347
:cond_50
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v5
add-long/2addr v5, v0
iput-wide v5, p2, Lcom/google/android/exoplayer2/extractor/PositionHolder;->position:J
.line 348
const/4 v4, 0x1
.line 351
:cond_58
:goto_58
invoke-direct {p0, v2, v3}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->processAtomEnded(J)V
.line 352
if-eqz v4, :cond_64
iget v5, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->parserState:I
const/4 v6, 0x2
if-eq v5, v6, :cond_64
const/4 v5, 0x1
goto :goto_65
:cond_64
const/4 v5, 0x0
:goto_65
return v5
.end method
.method private readSample(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.registers 27
.param p1, "input" # Lcom/google/android/exoplayer2/extractor/ExtractorInput;
.param p2, "positionHolder" # Lcom/google/android/exoplayer2/extractor/PositionHolder;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 484
move-object/from16 v0, p0
move-object/from16 v1, p1
invoke-interface/range {p1 .. p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v2
.line 485
.local v2, "inputPosition":J
iget v4, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleTrackIndex:I
const/4 v5, -0x1
if-ne v4, v5, :cond_16
.line 486
invoke-direct {v0, v2, v3}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->getTrackIndexOfNextReadSample(J)I
move-result v4
iput v4, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleTrackIndex:I
.line 487
if-ne v4, v5, :cond_16
.line 488
return v5
.line 491
:cond_16
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->tracks:[Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
iget v6, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleTrackIndex:I
aget-object v4, v4, v6
.line 492
.local v4, "track":Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
iget-object v13, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 493
.local v13, "trackOutput":Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget v14, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleIndex:I
.line 494
.local v14, "sampleIndex":I
iget-object v6, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget-object v6, v6, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->offsets:[J
aget-wide v11, v6, v14
.line 495
.local v11, "position":J
iget-object v6, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget-object v6, v6, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->sizes:[I
aget v6, v6, v14
.line 496
.local v6, "sampleSize":I
sub-long v7, v11, v2
iget v9, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
int-to-long v9, v9
add-long/2addr v7, v9
.line 497
.local v7, "skipAmount":J
const-wide/16 v9, 0x0
const/4 v15, 0x1
cmp-long v16, v7, v9
if-ltz v16, :cond_109
const-wide/32 v9, 0x40000
cmp-long v16, v7, v9
if-ltz v16, :cond_46
move-wide/from16 v18, v2
move-wide/from16 v22, v11
goto/16 :goto_10d
.line 501
:cond_46
iget-object v9, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->track:Lcom/google/android/exoplayer2/extractor/mp4/Track;
iget v9, v9, Lcom/google/android/exoplayer2/extractor/mp4/Track;->sampleTransformation:I
if-ne v9, v15, :cond_53
.line 504
const-wide/16 v9, 0x8
add-long/2addr v7, v9
.line 505
add-int/lit8 v6, v6, -0x8
move-wide v9, v7
goto :goto_54
.line 501
:cond_53
move-wide v9, v7
.line 507
.end local v7 # "skipAmount":J
.local v9, "skipAmount":J
:goto_54
long-to-int v7, v9
invoke-interface {v1, v7}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
.line 508
iget-object v7, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->track:Lcom/google/android/exoplayer2/extractor/mp4/Track;
iget v7, v7, Lcom/google/android/exoplayer2/extractor/mp4/Track;->nalUnitLengthFieldLength:I
const/4 v8, 0x0
if-eqz v7, :cond_c5
.line 511
iget-object v7, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v7, v7, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 512
.local v7, "nalLengthData":[B
aput-byte v8, v7, v8
.line 513
aput-byte v8, v7, v15
.line 514
const/16 v16, 0x2
aput-byte v8, v7, v16
.line 515
iget-object v5, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->track:Lcom/google/android/exoplayer2/extractor/mp4/Track;
iget v5, v5, Lcom/google/android/exoplayer2/extractor/mp4/Track;->nalUnitLengthFieldLength:I
.line 516
.local v5, "nalUnitLengthFieldLength":I
iget-object v15, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->track:Lcom/google/android/exoplayer2/extractor/mp4/Track;
iget v15, v15, Lcom/google/android/exoplayer2/extractor/mp4/Track;->nalUnitLengthFieldLength:I
const/4 v8, 0x4
rsub-int/lit8 v15, v15, 0x4
.line 520
.local v15, "nalUnitLengthFieldLengthDiff":I
:goto_76
iget v8, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
if-ge v8, v6, :cond_c0
.line 521
iget v8, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleCurrentNalBytesRemaining:I
if-nez v8, :cond_aa
.line 523
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v8, v8, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {v1, v8, v15, v5}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BII)V
.line 524
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
move-wide/from16 v18, v2
const/4 v2, 0x0
.end local v2 # "inputPosition":J
.local v18, "inputPosition":J
invoke-virtual {v8, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 525
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v3
iput v3, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleCurrentNalBytesRemaining:I
.line 527
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->nalStartCode:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v3, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 528
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->nalStartCode:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v3, 0x4
invoke-interface {v13, v2, v3}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 529
iget v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
add-int/2addr v2, v3
iput v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
.line 530
add-int/2addr v6, v15
move-wide/from16 v2, v18
const/4 v8, 0x4
goto :goto_76
.line 533
.end local v18 # "inputPosition":J
.restart local v2 # "inputPosition":J
:cond_aa
move-wide/from16 v18, v2
const/4 v3, 0x4
.end local v2 # "inputPosition":J
.restart local v18 # "inputPosition":J
const/4 v2, 0x0
invoke-interface {v13, v1, v8, v2}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;IZ)I
move-result v8
.line 534
.local v8, "writtenBytes":I
iget v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
add-int/2addr v2, v8
iput v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
.line 535
iget v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleCurrentNalBytesRemaining:I
sub-int/2addr v2, v8
iput v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleCurrentNalBytesRemaining:I
.line 536
.end local v8 # "writtenBytes":I
move-wide/from16 v2, v18
const/4 v8, 0x4
goto :goto_76
.line 520
.end local v18 # "inputPosition":J
.restart local v2 # "inputPosition":J
:cond_c0
move-wide/from16 v18, v2
.line 538
.end local v2 # "inputPosition":J
.end local v5 # "nalUnitLengthFieldLength":I
.end local v7 # "nalLengthData":[B
.end local v15 # "nalUnitLengthFieldLengthDiff":I
.restart local v18 # "inputPosition":J
move v2, v6
const/4 v3, 0x0
goto :goto_df
.line 508
.end local v18 # "inputPosition":J
.restart local v2 # "inputPosition":J
:cond_c5
move-wide/from16 v18, v2
.line 539
.end local v2 # "inputPosition":J
.restart local v18 # "inputPosition":J
:goto_c7
iget v2, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
if-ge v2, v6, :cond_dd
.line 540
sub-int v2, v6, v2
const/4 v3, 0x0
invoke-interface {v13, v1, v2, v3}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;IZ)I
move-result v2
.line 541
.local v2, "writtenBytes":I
iget v5, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
add-int/2addr v5, v2
iput v5, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
.line 542
iget v5, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleCurrentNalBytesRemaining:I
sub-int/2addr v5, v2
iput v5, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleCurrentNalBytesRemaining:I
.line 543
.end local v2 # "writtenBytes":I
goto :goto_c7
.line 539
:cond_dd
const/4 v3, 0x0
move v2, v6
.line 545
.end local v6 # "sampleSize":I
.local v2, "sampleSize":I
:goto_df
iget-object v5, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget-object v5, v5, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->timestampsUs:[J
aget-wide v7, v5, v14
iget-object v5, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
iget-object v5, v5, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->flags:[I
aget v5, v5, v14
const/4 v15, 0x0
const/16 v17, 0x0
move-object v6, v13
move-wide/from16 v20, v9
.end local v9 # "skipAmount":J
.local v20, "skipAmount":J
move v9, v5
move v10, v2
move-wide/from16 v22, v11
.end local v11 # "position":J
.local v22, "position":J
move v11, v15
move-object/from16 v12, v17
invoke-interface/range {v6 .. v12}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIIILcom/google/android/exoplayer2/extractor/TrackOutput$CryptoData;)V
.line 547
iget v5, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleIndex:I
const/4 v6, 0x1
add-int/2addr v5, v6
iput v5, v4, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleIndex:I
.line 548
const/4 v5, -0x1
iput v5, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleTrackIndex:I
.line 549
iput v3, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
.line 550
iput v3, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleCurrentNalBytesRemaining:I
.line 551
return v3
.line 497
.end local v18 # "inputPosition":J
.end local v20 # "skipAmount":J
.end local v22 # "position":J
.local v2, "inputPosition":J
.restart local v6 # "sampleSize":I
.local v7, "skipAmount":J
.restart local v11 # "position":J
:cond_109
move-wide/from16 v18, v2
move-wide/from16 v22, v11
.line 498
.end local v2 # "inputPosition":J
.end local v11 # "position":J
.restart local v18 # "inputPosition":J
.restart local v22 # "position":J
:goto_10d
move-object/from16 v2, p2
move-wide/from16 v9, v22
.end local v22 # "position":J
.local v9, "position":J
iput-wide v9, v2, Lcom/google/android/exoplayer2/extractor/PositionHolder;->position:J
.line 499
const/4 v3, 0x1
return v3
.end method
.method private static shouldParseContainerAtom(I)Z
.registers 2
.param p0, "atom" # I
.line 743
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_moov:I
if-eq p0, v0, :cond_1f
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_trak:I
if-eq p0, v0, :cond_1f
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_mdia:I
if-eq p0, v0, :cond_1f
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_minf:I
if-eq p0, v0, :cond_1f
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_stbl:I
if-eq p0, v0, :cond_1f
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_edts:I
if-eq p0, v0, :cond_1f
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_meta:I
if-ne p0, v0, :cond_1d
goto :goto_1f
:cond_1d
const/4 v0, 0x0
goto :goto_20
:cond_1f
:goto_1f
const/4 v0, 0x1
:goto_20
return v0
.end method
.method private static shouldParseLeafAtom(I)Z
.registers 2
.param p0, "atom" # I
.line 721
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_mdhd:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_mvhd:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_hdlr:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_stsd:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_stts:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_stss:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_ctts:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_elst:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_stsc:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_stsz:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_stz2:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_stco:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_co64:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_tkhd:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_ftyp:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_udta:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_keys:I
if-eq p0, v0, :cond_4b
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_ilst:I
if-ne p0, v0, :cond_49
goto :goto_4b
:cond_49
const/4 v0, 0x0
goto :goto_4c
:cond_4b
:goto_4b
const/4 v0, 0x1
:goto_4c
return v0
.end method
.method private updateSampleIndices(J)V
.registers 10
.param p1, "timeUs" # J
.line 609
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->tracks:[Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
array-length v1, v0
const/4 v2, 0x0
:goto_4
if-ge v2, v1, :cond_1a
aget-object v3, v0, v2
.line 610
.local v3, "track":Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
iget-object v4, v3, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.line 611
.local v4, "sampleTable":Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
invoke-virtual {v4, p1, p2}, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->getIndexOfEarlierOrEqualSynchronizationSample(J)I
move-result v5
.line 612
.local v5, "sampleIndex":I
const/4 v6, -0x1
if-ne v5, v6, :cond_15
.line 614
invoke-virtual {v4, p1, p2}, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->getIndexOfLaterOrEqualSynchronizationSample(J)I
move-result v5
.line 616
:cond_15
iput v5, v3, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleIndex:I
.line 609
.end local v3 # "track":Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
.end local v4 # "sampleTable":Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.end local v5 # "sampleIndex":I
add-int/lit8 v2, v2, 0x1
goto :goto_4
.line 618
:cond_1a
return-void
.end method
# virtual methods
.method public getDurationUs()J
.registers 3
.line 203
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->durationUs:J
return-wide v0
.end method
.method public getSeekPoints(J)Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;
.registers 20
.param p1, "timeUs" # J
.line 208
move-object/from16 v0, p0
move-wide/from16 v1, p1
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->tracks:[Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
array-length v4, v3
if-nez v4, :cond_11
.line 209
new-instance v3, Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;
sget-object v4, Lcom/google/android/exoplayer2/extractor/SeekPoint;->START:Lcom/google/android/exoplayer2/extractor/SeekPoint;
invoke-direct {v3, v4}, Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;-><init>(Lcom/google/android/exoplayer2/extractor/SeekPoint;)V
return-object v3
.line 214
:cond_11
const-wide v4, -0x7fffffffffffffffL # -4.9E-324
.line 215
.local v4, "secondTimeUs":J
const-wide/16 v6, -0x1
.line 218
.local v6, "secondOffset":J
iget v8, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->firstVideoTrackIndex:I
const/4 v9, -0x1
if-eq v8, v9, :cond_53
.line 219
aget-object v3, v3, v8
iget-object v3, v3, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.line 220
.local v3, "sampleTable":Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
invoke-static {v3, v1, v2}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->getSynchronizationSampleIndex(Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;J)I
move-result v8
.line 221
.local v8, "sampleIndex":I
if-ne v8, v9, :cond_2f
.line 222
new-instance v9, Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;
sget-object v10, Lcom/google/android/exoplayer2/extractor/SeekPoint;->START:Lcom/google/android/exoplayer2/extractor/SeekPoint;
invoke-direct {v9, v10}, Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;-><init>(Lcom/google/android/exoplayer2/extractor/SeekPoint;)V
return-object v9
.line 224
:cond_2f
iget-object v10, v3, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->timestampsUs:[J
aget-wide v11, v10, v8
.line 225
.local v11, "sampleTimeUs":J
move-wide v13, v11
.line 226
.local v13, "firstTimeUs":J
iget-object v10, v3, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->offsets:[J
aget-wide v15, v10, v8
.line 227
.local v15, "firstOffset":J
cmp-long v10, v11, v1
if-gez v10, :cond_52
iget v10, v3, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->sampleCount:I
add-int/lit8 v10, v10, -0x1
if-ge v8, v10, :cond_52
.line 228
invoke-virtual {v3, v1, v2}, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->getIndexOfLaterOrEqualSynchronizationSample(J)I
move-result v10
.line 229
.local v10, "secondSampleIndex":I
if-eq v10, v9, :cond_52
if-eq v10, v8, :cond_52
.line 230
iget-object v9, v3, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->timestampsUs:[J
aget-wide v4, v9, v10
.line 231
iget-object v9, v3, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->offsets:[J
aget-wide v6, v9, v10
.line 234
.end local v3 # "sampleTable":Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.end local v8 # "sampleIndex":I
.end local v10 # "secondSampleIndex":I
.end local v11 # "sampleTimeUs":J
:cond_52
goto :goto_5a
.line 235
.end local v13 # "firstTimeUs":J
.end local v15 # "firstOffset":J
:cond_53
move-wide/from16 v13, p1
.line 236
.restart local v13 # "firstTimeUs":J
const-wide v15, 0x7fffffffffffffffL
.line 240
.restart local v15 # "firstOffset":J
:goto_5a
const/4 v3, 0x0
move-wide v8, v15
.end local v15 # "firstOffset":J
.local v3, "i":I
.local v8, "firstOffset":J
:goto_5c
iget-object v10, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->tracks:[Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
array-length v11, v10
const-wide v15, -0x7fffffffffffffffL # -4.9E-324
if-ge v3, v11, :cond_7d
.line 241
iget v11, v0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->firstVideoTrackIndex:I
if-eq v3, v11, :cond_7a
.line 242
aget-object v10, v10, v3
iget-object v10, v10, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.line 243
.local v10, "sampleTable":Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
invoke-static {v10, v13, v14, v8, v9}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->maybeAdjustSeekOffset(Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;JJ)J
move-result-wide v8
.line 244
cmp-long v11, v4, v15
if-eqz v11, :cond_7a
.line 245
invoke-static {v10, v4, v5, v6, v7}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->maybeAdjustSeekOffset(Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;JJ)J
move-result-wide v6
.line 240
.end local v10 # "sampleTable":Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
:cond_7a
add-int/lit8 v3, v3, 0x1
goto :goto_5c
.line 250
.end local v3 # "i":I
:cond_7d
new-instance v3, Lcom/google/android/exoplayer2/extractor/SeekPoint;
invoke-direct {v3, v13, v14, v8, v9}, Lcom/google/android/exoplayer2/extractor/SeekPoint;-><init>(JJ)V
.line 251
.local v3, "firstSeekPoint":Lcom/google/android/exoplayer2/extractor/SeekPoint;
cmp-long v10, v4, v15
if-nez v10, :cond_8c
.line 252
new-instance v10, Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;
invoke-direct {v10, v3}, Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;-><init>(Lcom/google/android/exoplayer2/extractor/SeekPoint;)V
return-object v10
.line 254
:cond_8c
new-instance v10, Lcom/google/android/exoplayer2/extractor/SeekPoint;
invoke-direct {v10, v4, v5, v6, v7}, Lcom/google/android/exoplayer2/extractor/SeekPoint;-><init>(JJ)V
.line 255
.local v10, "secondSeekPoint":Lcom/google/android/exoplayer2/extractor/SeekPoint;
new-instance v11, Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;
invoke-direct {v11, v3, v10}, Lcom/google/android/exoplayer2/extractor/SeekMap$SeekPoints;-><init>(Lcom/google/android/exoplayer2/extractor/SeekPoint;Lcom/google/android/exoplayer2/extractor/SeekPoint;)V
return-object v11
.end method
.method public init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
.registers 2
.param p1, "output" # Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.line 149
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.line 150
return-void
.end method
.method public isSeekable()Z
.registers 2
.line 198
const/4 v0, 0x1
return v0
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.registers 5
.param p1, "input" # Lcom/google/android/exoplayer2/extractor/ExtractorInput;
.param p2, "seekPosition" # Lcom/google/android/exoplayer2/extractor/PositionHolder;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 175
:cond_0
:goto_0
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->parserState:I
if-eqz v0, :cond_1c
const/4 v1, 0x1
if-eq v0, v1, :cond_15
const/4 v1, 0x2
if-ne v0, v1, :cond_f
.line 187
invoke-direct {p0, p1, p2}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->readSample(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
move-result v0
return v0
.line 189
:cond_f
new-instance v0, Ljava/lang/IllegalStateException;
invoke-direct {v0}, Ljava/lang/IllegalStateException;-><init>()V
throw v0
.line 182
:cond_15
invoke-direct {p0, p1, p2}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->readAtomPayload(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)Z
move-result v0
if-eqz v0, :cond_0
.line 183
return v1
.line 177
:cond_1c
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->readAtomHeader(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
move-result v0
if-nez v0, :cond_24
.line 178
const/4 v0, -0x1
return v0
.line 177
:cond_24
goto :goto_0
.end method
.method public release()V
.registers 1
.line 169
return-void
.end method
.method public seek(JJ)V
.registers 8
.param p1, "position" # J
.param p3, "timeUs" # J
.line 154
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->containerAtoms:Ljava/util/ArrayDeque;
invoke-virtual {v0}, Ljava/util/ArrayDeque;->clear()V
.line 155
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->atomHeaderBytesRead:I
.line 156
const/4 v1, -0x1
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleTrackIndex:I
.line 157
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleBytesWritten:I
.line 158
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->sampleCurrentNalBytesRemaining:I
.line 159
const-wide/16 v0, 0x0
cmp-long v2, p1, v0
if-nez v2, :cond_19
.line 160
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->enterReadingAtomHeaderState()V
goto :goto_20
.line 161
:cond_19
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->tracks:[Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
if-eqz v0, :cond_20
.line 162
invoke-direct {p0, p3, p4}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;->updateSampleIndices(J)V
.line 164
:cond_20
:goto_20
return-void
.end method
.method public sniff(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.registers 3
.param p1, "input" # Lcom/google/android/exoplayer2/extractor/ExtractorInput;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 144
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/mp4/Sniffer;->sniffUnfragmented(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
move-result v0
return v0
.end method