This commit is contained in:
2022-06-10 21:38:30 +09:00
commit 27f5152838
51323 changed files with 12934539 additions and 0 deletions
@@ -0,0 +1,121 @@
.class public final Lcom/google/android/exoplayer2/extractor/ChunkIndex;
.super Ljava/lang/Object;
.source "ChunkIndex.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/SeekMap;
# instance fields
.field private final durationUs:J
.field public final durationsUs:[J
.field public final length:I
.field public final offsets:[J
.field public final sizes:[I
.field public final timesUs:[J
# direct methods
.method public constructor <init>([I[J[J[J)V
.locals 2
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->sizes:[I
.line 3
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->offsets:[J
.line 4
iput-object p3, p0, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->durationsUs:[J
.line 5
iput-object p4, p0, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->timesUs:[J
.line 6
array-length p1, p1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->length:I
if-lez p1, :cond_0
add-int/lit8 p2, p1, -0x1
.line 7
aget-wide p2, p3, p2
add-int/lit8 p1, p1, -0x1
aget-wide v0, p4, p1
add-long/2addr p2, v0
iput-wide p2, p0, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->durationUs:J
goto :goto_0
:cond_0
const-wide/16 p1, 0x0
.line 8
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->durationUs:J
:goto_0
return-void
.end method
# virtual methods
.method public getChunkIndex(J)I
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->timesUs:[J
const/4 v1, 0x1
invoke-static {v0, p1, p2, v1, v1}, Lcom/google/android/exoplayer2/util/Util;->binarySearchFloor([JJZZ)I
move-result p1
return p1
.end method
.method public getDurationUs()J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->durationUs:J
return-wide v0
.end method
.method public getPosition(J)J
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->offsets:[J
invoke-virtual {p0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ChunkIndex;->getChunkIndex(J)I
move-result p1
aget-wide p1, v0, p1
return-wide p1
.end method
.method public isSeekable()Z
.locals 1
const/4 v0, 0x1
return v0
.end method
@@ -0,0 +1,755 @@
.class public final Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;
.super Ljava/lang/Object;
.source "DefaultExtractorInput.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorInput;
# static fields
.field private static final PEEK_MAX_FREE_SPACE:I = 0x80000
.field private static final PEEK_MIN_FREE_SPACE_AFTER_RESIZE:I = 0x10000
.field private static final SCRATCH_SPACE:[B
# instance fields
.field private final dataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.field private peekBuffer:[B
.field private peekBufferLength:I
.field private peekBufferPosition:I
.field private position:J
.field private final streamLength:J
# direct methods
.method public static constructor <clinit>()V
.locals 1
const/16 v0, 0x1000
new-array v0, v0, [B
.line 1
sput-object v0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->SCRATCH_SPACE:[B
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/upstream/DataSource;JJ)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->dataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
.line 3
iput-wide p2, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->position:J
.line 4
iput-wide p4, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->streamLength:J
const/high16 p1, 0x10000
new-array p1, p1, [B
.line 5
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBuffer:[B
return-void
.end method
.method private commitBytesRead(I)V
.locals 4
const/4 v0, -0x1
if-eq p1, v0, :cond_0
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->position:J
int-to-long v2, p1
add-long/2addr v0, v2
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->position:J
:cond_0
return-void
.end method
.method private ensureSpaceForPeek(I)V
.locals 3
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferPosition:I
add-int/2addr v0, p1
.line 2
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBuffer:[B
array-length v1, p1
if-le v0, v1, :cond_0
.line 3
array-length p1, p1
mul-int/lit8 p1, p1, 0x2
const/high16 v1, 0x10000
add-int/2addr v1, v0
const/high16 v2, 0x80000
add-int/2addr v0, v2
invoke-static {p1, v1, v0}, Lcom/google/android/exoplayer2/util/Util;->constrainValue(III)I
move-result p1
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBuffer:[B
invoke-static {v0, p1}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBuffer:[B
:cond_0
return-void
.end method
.method private readFromDataSource([BIIIZ)I
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/InterruptedException;,
Ljava/io/IOException;
}
.end annotation
.line 1
invoke-static {}, Ljava/lang/Thread;->interrupted()Z
move-result v0
if-nez v0, :cond_2
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->dataSource:Lcom/google/android/exoplayer2/upstream/DataSource;
add-int/2addr p2, p4
sub-int/2addr p3, p4
invoke-interface {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/upstream/DataSource;->read([BII)I
move-result p1
const/4 p2, -0x1
if-ne p1, p2, :cond_1
if-nez p4, :cond_0
if-eqz p5, :cond_0
return p2
.line 3
:cond_0
new-instance p1, Ljava/io/EOFException;
invoke-direct {p1}, Ljava/io/EOFException;-><init>()V
throw p1
:cond_1
add-int/2addr p4, p1
return p4
.line 4
:cond_2
new-instance p1, Ljava/lang/InterruptedException;
invoke-direct {p1}, Ljava/lang/InterruptedException;-><init>()V
throw p1
.end method
.method private readFromPeekBuffer([BII)I
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferLength:I
const/4 v1, 0x0
if-nez v0, :cond_0
return v1
.line 2
:cond_0
invoke-static {v0, p3}, Ljava/lang/Math;->min(II)I
move-result p3
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBuffer:[B
invoke-static {v0, v1, p1, p2, p3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 4
invoke-direct {p0, p3}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->updatePeekBuffer(I)V
return p3
.end method
.method private skipFromPeekBuffer(I)I
.locals 1
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferLength:I
invoke-static {v0, p1}, Ljava/lang/Math;->min(II)I
move-result p1
.line 2
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->updatePeekBuffer(I)V
return p1
.end method
.method private updatePeekBuffer(I)V
.locals 5
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferLength:I
sub-int/2addr v0, p1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferLength:I
const/4 v1, 0x0
.line 2
iput v1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferPosition:I
.line 3
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBuffer:[B
.line 4
array-length v3, v2
const/high16 v4, 0x80000
sub-int/2addr v3, v4
if-ge v0, v3, :cond_0
const/high16 v3, 0x10000
add-int/2addr v3, v0
.line 5
new-array v3, v3, [B
goto :goto_0
:cond_0
move-object v3, v2
.line 6
:goto_0
invoke-static {v2, p1, v3, v1, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 7
iput-object v3, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBuffer:[B
return-void
.end method
# virtual methods
.method public advancePeekPosition(I)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const/4 v0, 0x0
.line 6
invoke-virtual {p0, p1, v0}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->advancePeekPosition(IZ)Z
return-void
.end method
.method public advancePeekPosition(IZ)Z
.locals 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->ensureSpaceForPeek(I)V
.line 2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferLength:I
iget v1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferPosition:I
sub-int/2addr v0, v1
invoke-static {v0, p1}, Ljava/lang/Math;->min(II)I
move-result v0
move v5, v0
:cond_0
if-ge v5, p1, :cond_1
.line 3
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBuffer:[B
iget v3, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferPosition:I
move-object v1, p0
move v4, p1
move v6, p2
invoke-direct/range {v1 .. v6}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->readFromDataSource([BIIIZ)I
move-result v5
const/4 v0, -0x1
if-ne v5, v0, :cond_0
const/4 p1, 0x0
return p1
.line 4
:cond_1
iget p2, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferPosition:I
add-int/2addr p2, p1
iput p2, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferPosition:I
.line 5
iget p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferLength:I
invoke-static {p1, p2}, Ljava/lang/Math;->max(II)I
move-result p1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferLength:I
const/4 p1, 0x1
return p1
.end method
.method public getLength()J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->streamLength:J
return-wide v0
.end method
.method public getPeekPosition()J
.locals 4
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->position:J
iget v2, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferPosition:I
int-to-long v2, v2
add-long/2addr v0, v2
return-wide v0
.end method
.method public getPosition()J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->position:J
return-wide v0
.end method
.method public peekFully([BII)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const/4 v0, 0x0
.line 3
invoke-virtual {p0, p1, p2, p3, v0}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekFully([BIIZ)Z
return-void
.end method
.method public peekFully([BIIZ)Z
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-virtual {p0, p3, p4}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->advancePeekPosition(IZ)Z
move-result p4
if-nez p4, :cond_0
const/4 p1, 0x0
return p1
.line 2
:cond_0
iget-object p4, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBuffer:[B
iget v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferPosition:I
sub-int/2addr v0, p3
invoke-static {p4, v0, p1, p2, p3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
const/4 p1, 0x1
return p1
.end method
.method public read([BII)I
.locals 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-direct {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->readFromPeekBuffer([BII)I
move-result v0
if-nez v0, :cond_0
const/4 v5, 0x0
const/4 v6, 0x1
move-object v1, p0
move-object v2, p1
move v3, p2
move v4, p3
.line 2
invoke-direct/range {v1 .. v6}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->readFromDataSource([BIIIZ)I
move-result v0
.line 3
:cond_0
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->commitBytesRead(I)V
return v0
.end method
.method public readFully([BII)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const/4 v0, 0x0
.line 4
invoke-virtual {p0, p1, p2, p3, v0}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->readFully([BIIZ)Z
return-void
.end method
.method public readFully([BIIZ)Z
.locals 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-direct {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->readFromPeekBuffer([BII)I
move-result v0
move v5, v0
:goto_0
const/4 v0, -0x1
if-ge v5, p3, :cond_0
if-eq v5, v0, :cond_0
move-object v1, p0
move-object v2, p1
move v3, p2
move v4, p3
move v6, p4
.line 2
invoke-direct/range {v1 .. v6}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->readFromDataSource([BIIIZ)I
move-result v5
goto :goto_0
.line 3
:cond_0
invoke-direct {p0, v5}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->commitBytesRead(I)V
if-eq v5, v0, :cond_1
const/4 p1, 0x1
goto :goto_1
:cond_1
const/4 p1, 0x0
:goto_1
return p1
.end method
.method public resetPeekPosition()V
.locals 1
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->peekBufferPosition:I
return-void
.end method
.method public setRetryPosition(JLjava/lang/Throwable;)V
.locals 2
.annotation system Ldalvik/annotation/Signature;
value = {
"<E:",
"Ljava/lang/Throwable;",
">(JTE;)V^TE;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Throwable;
}
.end annotation
const-wide/16 v0, 0x0
cmp-long v0, p1, v0
if-ltz v0, :cond_0
const/4 v0, 0x1
goto :goto_0
:cond_0
const/4 v0, 0x0
.line 1
:goto_0
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkArgument(Z)V
.line 2
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->position:J
.line 3
throw p3
.end method
.method public skip(I)I
.locals 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->skipFromPeekBuffer(I)I
move-result v0
if-nez v0, :cond_0
.line 2
sget-object v2, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->SCRATCH_SPACE:[B
const/4 v3, 0x0
array-length v0, v2
.line 3
invoke-static {p1, v0}, Ljava/lang/Math;->min(II)I
move-result v4
const/4 v5, 0x0
const/4 v6, 0x1
move-object v1, p0
invoke-direct/range {v1 .. v6}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->readFromDataSource([BIIIZ)I
move-result v0
.line 4
:cond_0
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->commitBytesRead(I)V
return v0
.end method
.method public skipFully(I)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const/4 v0, 0x0
.line 6
invoke-virtual {p0, p1, v0}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->skipFully(IZ)Z
return-void
.end method
.method public skipFully(IZ)Z
.locals 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->skipFromPeekBuffer(I)I
move-result v0
move v5, v0
:goto_0
const/4 v0, -0x1
if-ge v5, p1, :cond_0
if-eq v5, v0, :cond_0
.line 2
sget-object v2, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->SCRATCH_SPACE:[B
neg-int v3, v5
array-length v0, v2
add-int/2addr v0, v5
.line 3
invoke-static {p1, v0}, Ljava/lang/Math;->min(II)I
move-result v4
move-object v1, p0
move v6, p2
.line 4
invoke-direct/range {v1 .. v6}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->readFromDataSource([BIIIZ)I
move-result v5
goto :goto_0
.line 5
:cond_0
invoke-direct {p0, v5}, Lcom/google/android/exoplayer2/extractor/DefaultExtractorInput;->commitBytesRead(I)V
if-eq v5, v0, :cond_1
const/4 p1, 0x1
goto :goto_1
:cond_1
const/4 p1, 0x0
:goto_1
return p1
.end method
@@ -0,0 +1,393 @@
.class public final Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;
.super Ljava/lang/Object;
.source "DefaultExtractorsFactory.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# static fields
.field private static final FLAC_EXTRACTOR_CONSTRUCTOR:Ljava/lang/reflect/Constructor;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/lang/reflect/Constructor<",
"+",
"Lcom/google/android/exoplayer2/extractor/Extractor;",
">;"
}
.end annotation
.end field
# instance fields
.field private fragmentedMp4Flags:I
.field private matroskaFlags:I
.field private mp3Flags:I
.field private tsFlags:I
.field private tsMode:I
# direct methods
.method public static constructor <clinit>()V
.locals 2
:try_start_0
const-string v0, "com.google.android.exoplayer2.ext.flac.FlacExtractor"
.line 1
invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v0
const-class v1, Lcom/google/android/exoplayer2/extractor/Extractor;
.line 2
invoke-virtual {v0, v1}, Ljava/lang/Class;->asSubclass(Ljava/lang/Class;)Ljava/lang/Class;
move-result-object v0
const/4 v1, 0x0
new-array v1, v1, [Ljava/lang/Class;
invoke-virtual {v0, v1}, Ljava/lang/Class;->getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
move-result-object v0
:try_end_0
.catch Ljava/lang/ClassNotFoundException; {:try_start_0 .. :try_end_0} :catch_0
.catch Ljava/lang/NoSuchMethodException; {:try_start_0 .. :try_end_0} :catch_0
goto :goto_0
:catch_0
const/4 v0, 0x0
.line 3
:goto_0
sput-object v0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->FLAC_EXTRACTOR_CONSTRUCTOR:Ljava/lang/reflect/Constructor;
return-void
.end method
.method public constructor <init>()V
.locals 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/4 v0, 0x1
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->tsMode:I
return-void
.end method
# virtual methods
.method public declared-synchronized createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 8
monitor-enter p0
.line 1
:try_start_0
sget-object v0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->FLAC_EXTRACTOR_CONSTRUCTOR:Ljava/lang/reflect/Constructor;
const/16 v1, 0xb
if-nez v0, :cond_0
move v2, v1
goto :goto_0
:cond_0
const/16 v2, 0xc
:goto_0
new-array v2, v2, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 2
new-instance v3, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
iget v4, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->matroskaFlags:I
invoke-direct {v3, v4}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;-><init>(I)V
const/4 v4, 0x0
aput-object v3, v2, v4
const/4 v3, 0x1
.line 3
new-instance v5, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor;
iget v6, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->fragmentedMp4Flags:I
invoke-direct {v5, v6}, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor;-><init>(I)V
aput-object v5, v2, v3
const/4 v3, 0x2
.line 4
new-instance v5, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;
invoke-direct {v5}, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;-><init>()V
aput-object v5, v2, v3
const/4 v3, 0x3
.line 5
new-instance v5, Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor;
iget v6, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->mp3Flags:I
invoke-direct {v5, v6}, Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor;-><init>(I)V
aput-object v5, v2, v3
const/4 v3, 0x4
.line 6
new-instance v5, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;
invoke-direct {v5}, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;-><init>()V
aput-object v5, v2, v3
const/4 v3, 0x5
.line 7
new-instance v5, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;
invoke-direct {v5}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;-><init>()V
aput-object v5, v2, v3
const/4 v3, 0x6
.line 8
new-instance v5, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
iget v6, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->tsMode:I
iget v7, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->tsFlags:I
invoke-direct {v5, v6, v7}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;-><init>(II)V
aput-object v5, v2, v3
const/4 v3, 0x7
.line 9
new-instance v5, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;
invoke-direct {v5}, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;-><init>()V
aput-object v5, v2, v3
const/16 v3, 0x8
.line 10
new-instance v5, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;
invoke-direct {v5}, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;-><init>()V
aput-object v5, v2, v3
const/16 v3, 0x9
.line 11
new-instance v5, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;
invoke-direct {v5}, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;-><init>()V
aput-object v5, v2, v3
const/16 v3, 0xa
.line 12
new-instance v5, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;
invoke-direct {v5}, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;-><init>()V
aput-object v5, v2, v3
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
if-eqz v0, :cond_1
:try_start_1
new-array v3, v4, [Ljava/lang/Object;
.line 13
invoke-virtual {v0, v3}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/extractor/Extractor;
aput-object v0, v2, v1
:try_end_1
.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0
.catchall {:try_start_1 .. :try_end_1} :catchall_0
goto :goto_1
:catch_0
move-exception v0
.line 14
:try_start_2
new-instance v1, Ljava/lang/IllegalStateException;
const-string v2, "Unexpected error creating FLAC extractor"
invoke-direct {v1, v2, v0}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
:try_end_2
.catchall {:try_start_2 .. :try_end_2} :catchall_0
.line 15
:cond_1
:goto_1
monitor-exit p0
return-object v2
:catchall_0
move-exception v0
monitor-exit p0
throw v0
.end method
.method public declared-synchronized setFragmentedMp4ExtractorFlags(I)Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;
.locals 0
monitor-enter p0
.line 1
:try_start_0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->fragmentedMp4Flags:I
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
.line 2
monitor-exit p0
return-object p0
:catchall_0
move-exception p1
monitor-exit p0
throw p1
.end method
.method public declared-synchronized setMatroskaExtractorFlags(I)Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;
.locals 0
monitor-enter p0
.line 1
:try_start_0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->matroskaFlags:I
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
.line 2
monitor-exit p0
return-object p0
:catchall_0
move-exception p1
monitor-exit p0
throw p1
.end method
.method public declared-synchronized setMp3ExtractorFlags(I)Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;
.locals 0
monitor-enter p0
.line 1
:try_start_0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->mp3Flags:I
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
.line 2
monitor-exit p0
return-object p0
:catchall_0
move-exception p1
monitor-exit p0
throw p1
.end method
.method public declared-synchronized setTsExtractorFlags(I)Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;
.locals 0
monitor-enter p0
.line 1
:try_start_0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->tsFlags:I
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
.line 2
monitor-exit p0
return-object p0
:catchall_0
move-exception p1
monitor-exit p0
throw p1
.end method
.method public declared-synchronized setTsExtractorMode(I)Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;
.locals 0
monitor-enter p0
.line 1
:try_start_0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/DefaultExtractorsFactory;->tsMode:I
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
.line 2
monitor-exit p0
return-object p0
:catchall_0
move-exception p1
monitor-exit p0
throw p1
.end method
@@ -0,0 +1,14 @@
.class synthetic Lcom/google/android/exoplayer2/extractor/DefaultTrackOutput$1;
.super Ljava/lang/Object;
.source "DefaultTrackOutput.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/DefaultTrackOutput;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1009
name = null
.end annotation
@@ -0,0 +1,44 @@
.class final Lcom/google/android/exoplayer2/extractor/DefaultTrackOutput$BufferExtrasHolder;
.super Ljava/lang/Object;
.source "DefaultTrackOutput.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/DefaultTrackOutput;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "BufferExtrasHolder"
.end annotation
# instance fields
.field public encryptionKeyId:[B
.field public nextOffset:J
.field public offset:J
.field public size:I
# direct methods
.method private constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public synthetic constructor <init>(Lcom/google/android/exoplayer2/extractor/DefaultTrackOutput$1;)V
.locals 0
.line 2
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/DefaultTrackOutput$BufferExtrasHolder;-><init>()V
return-void
.end method
@@ -0,0 +1,19 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/DefaultTrackOutput$UpstreamFormatChangedListener;
.super Ljava/lang/Object;
.source "DefaultTrackOutput.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/DefaultTrackOutput;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x609
name = "UpstreamFormatChangedListener"
.end annotation
# virtual methods
.method public abstract onUpstreamFormatChanged(Lcom/google/android/exoplayer2/Format;)V
.end method
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,74 @@
.class public final Lcom/google/android/exoplayer2/extractor/DummyTrackOutput;
.super Ljava/lang/Object;
.source "DummyTrackOutput.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/TrackOutput;
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public format(Lcom/google/android/exoplayer2/Format;)V
.locals 0
return-void
.end method
.method public sampleData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;IZ)I
.locals 0
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-interface {p1, p2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skip(I)I
move-result p1
const/4 p2, -0x1
if-ne p1, p2, :cond_1
if-eqz p3, :cond_0
return p2
.line 2
:cond_0
new-instance p1, Ljava/io/EOFException;
invoke-direct {p1}, Ljava/io/EOFException;-><init>()V
throw p1
:cond_1
return p1
.end method
.method public sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.locals 0
.line 3
invoke-virtual {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
return-void
.end method
.method public sampleMetadata(JIII[B)V
.locals 0
return-void
.end method
@@ -0,0 +1,40 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/Extractor;
.super Ljava/lang/Object;
.source "Extractor.java"
# static fields
.field public static final RESULT_CONTINUE:I = 0x0
.field public static final RESULT_END_OF_INPUT:I = -0x1
.field public static final RESULT_SEEK:I = 0x1
# virtual methods
.method public abstract init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
.end method
.method public abstract read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract release()V
.end method
.method public abstract seek(JJ)V
.end method
.method public abstract sniff(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
@@ -0,0 +1,123 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/ExtractorInput;
.super Ljava/lang/Object;
.source "ExtractorInput.java"
# virtual methods
.method public abstract advancePeekPosition(I)V
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract advancePeekPosition(IZ)Z
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract getLength()J
.end method
.method public abstract getPeekPosition()J
.end method
.method public abstract getPosition()J
.end method
.method public abstract peekFully([BII)V
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract peekFully([BIIZ)Z
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract read([BII)I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract readFully([BII)V
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract readFully([BIIZ)Z
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract resetPeekPosition()V
.end method
.method public abstract setRetryPosition(JLjava/lang/Throwable;)V
.annotation system Ldalvik/annotation/Signature;
value = {
"<E:",
"Ljava/lang/Throwable;",
">(JTE;)V^TE;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Throwable;
}
.end annotation
.end method
.method public abstract skip(I)I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract skipFully(I)V
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract skipFully(IZ)Z
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
@@ -0,0 +1,14 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.super Ljava/lang/Object;
.source "ExtractorOutput.java"
# virtual methods
.method public abstract endTracks()V
.end method
.method public abstract seekMap(Lcom/google/android/exoplayer2/extractor/SeekMap;)V
.end method
.method public abstract track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
.end method
@@ -0,0 +1,8 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
.super Ljava/lang/Object;
.source "ExtractorsFactory.java"
# virtual methods
.method public abstract createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.end method
@@ -0,0 +1,63 @@
.class final Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder$1;
.super Ljava/lang/Object;
.source "GaplessInfoHolder.java"
# interfaces
.implements Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public evaluate(IIIII)Z
.locals 1
const/16 v0, 0x43
if-ne p2, v0, :cond_1
const/16 p2, 0x4f
if-ne p3, p2, :cond_1
const/16 p2, 0x4d
if-ne p4, p2, :cond_1
if-eq p5, p2, :cond_0
const/4 p2, 0x2
if-ne p1, p2, :cond_1
:cond_0
const/4 p1, 0x1
goto :goto_0
:cond_1
const/4 p1, 0x0
:goto_0
return p1
.end method
@@ -0,0 +1,244 @@
.class public final Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;
.super Ljava/lang/Object;
.source "GaplessInfoHolder.java"
# static fields
.field private static final GAPLESS_COMMENT_ID:Ljava/lang/String; = "iTunSMPB"
.field private static final GAPLESS_COMMENT_PATTERN:Ljava/util/regex/Pattern;
.field public static final GAPLESS_INFO_ID3_FRAME_PREDICATE:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
# instance fields
.field public encoderDelay:I
.field public encoderPadding:I
# direct methods
.method public static constructor <clinit>()V
.locals 1
.line 1
new-instance v0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder$1;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder$1;-><init>()V
sput-object v0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->GAPLESS_INFO_ID3_FRAME_PREDICATE:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
const-string v0, "^ [0-9a-fA-F]{8} ([0-9a-fA-F]{8}) ([0-9a-fA-F]{8})"
.line 2
invoke-static {v0}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v0
sput-object v0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->GAPLESS_COMMENT_PATTERN:Ljava/util/regex/Pattern;
return-void
.end method
.method public constructor <init>()V
.locals 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/4 v0, -0x1
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->encoderDelay:I
.line 3
iput v0, p0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->encoderPadding:I
return-void
.end method
.method private setFromComment(Ljava/lang/String;Ljava/lang/String;)Z
.locals 4
const-string v0, "iTunSMPB"
.line 1
invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result p1
const/4 v0, 0x0
if-nez p1, :cond_0
return v0
.line 2
:cond_0
sget-object p1, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->GAPLESS_COMMENT_PATTERN:Ljava/util/regex/Pattern;
invoke-virtual {p1, p2}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object p1
.line 3
invoke-virtual {p1}, Ljava/util/regex/Matcher;->find()Z
move-result p2
if-eqz p2, :cond_2
const/4 p2, 0x1
.line 4
:try_start_0
invoke-virtual {p1, p2}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v1
const/16 v2, 0x10
invoke-static {v1, v2}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;I)I
move-result v1
const/4 v3, 0x2
.line 5
invoke-virtual {p1, v3}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object p1
invoke-static {p1, v2}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;I)I
move-result p1
if-gtz v1, :cond_1
if-lez p1, :cond_2
.line 6
:cond_1
iput v1, p0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->encoderDelay:I
.line 7
iput p1, p0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->encoderPadding:I
:try_end_0
.catch Ljava/lang/NumberFormatException; {:try_start_0 .. :try_end_0} :catch_0
return p2
:catch_0
:cond_2
return v0
.end method
# virtual methods
.method public hasGaplessInfo()Z
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->encoderDelay:I
const/4 v1, -0x1
if-eq v0, v1, :cond_0
iget v0, p0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->encoderPadding:I
if-eq v0, v1, :cond_0
const/4 v0, 0x1
goto :goto_0
:cond_0
const/4 v0, 0x0
:goto_0
return v0
.end method
.method public setFromMetadata(Lcom/google/android/exoplayer2/metadata/Metadata;)Z
.locals 4
const/4 v0, 0x0
move v1, v0
.line 1
:goto_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/metadata/Metadata;->length()I
move-result v2
if-ge v1, v2, :cond_1
.line 2
invoke-virtual {p1, v1}, Lcom/google/android/exoplayer2/metadata/Metadata;->get(I)Lcom/google/android/exoplayer2/metadata/Metadata$Entry;
move-result-object v2
.line 3
instance-of v3, v2, Lcom/google/android/exoplayer2/metadata/id3/CommentFrame;
if-eqz v3, :cond_0
.line 4
check-cast v2, Lcom/google/android/exoplayer2/metadata/id3/CommentFrame;
.line 5
iget-object v3, v2, Lcom/google/android/exoplayer2/metadata/id3/CommentFrame;->description:Ljava/lang/String;
iget-object v2, v2, Lcom/google/android/exoplayer2/metadata/id3/CommentFrame;->text:Ljava/lang/String;
invoke-direct {p0, v3, v2}, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->setFromComment(Ljava/lang/String;Ljava/lang/String;)Z
move-result v2
if-eqz v2, :cond_0
const/4 p1, 0x1
return p1
:cond_0
add-int/lit8 v1, v1, 0x1
goto :goto_0
:cond_1
return v0
.end method
.method public setFromXingHeaderValue(I)Z
.locals 1
shr-int/lit8 v0, p1, 0xc
and-int/lit16 p1, p1, 0xfff
if-gtz v0, :cond_1
if-lez p1, :cond_0
goto :goto_0
:cond_0
const/4 p1, 0x0
return p1
.line 1
:cond_1
:goto_0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->encoderDelay:I
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/GaplessInfoHolder;->encoderPadding:I
const/4 p1, 0x1
return p1
.end method
@@ -0,0 +1,640 @@
.class public final Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
.super Ljava/lang/Object;
.source "MpegAudioHeader.java"
# static fields
.field private static final BITRATE_V1_L1:[I
.field private static final BITRATE_V1_L2:[I
.field private static final BITRATE_V1_L3:[I
.field private static final BITRATE_V2:[I
.field private static final BITRATE_V2_L1:[I
.field public static final MAX_FRAME_SIZE_BYTES:I = 0x1000
.field private static final MIME_TYPE_BY_LAYER:[Ljava/lang/String;
.field private static final SAMPLING_RATE_V1:[I
# instance fields
.field public bitrate:I
.field public channels:I
.field public frameSize:I
.field public mimeType:Ljava/lang/String;
.field public sampleRate:I
.field public samplesPerFrame:I
.field public version:I
# direct methods
.method public static constructor <clinit>()V
.locals 3
const-string v0, "audio/mpeg-L1"
const-string v1, "audio/mpeg-L2"
const-string v2, "audio/mpeg"
.line 1
filled-new-array {v0, v1, v2}, [Ljava/lang/String;
move-result-object v0
sput-object v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->MIME_TYPE_BY_LAYER:[Ljava/lang/String;
const/4 v0, 0x3
new-array v0, v0, [I
.line 2
fill-array-data v0, :array_0
sput-object v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->SAMPLING_RATE_V1:[I
const/16 v0, 0xe
new-array v1, v0, [I
.line 3
fill-array-data v1, :array_1
sput-object v1, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V1_L1:[I
new-array v1, v0, [I
.line 4
fill-array-data v1, :array_2
sput-object v1, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V2_L1:[I
new-array v1, v0, [I
.line 5
fill-array-data v1, :array_3
sput-object v1, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V1_L2:[I
new-array v1, v0, [I
.line 6
fill-array-data v1, :array_4
sput-object v1, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V1_L3:[I
new-array v0, v0, [I
.line 7
fill-array-data v0, :array_5
sput-object v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V2:[I
return-void
:array_0
.array-data 4
0xac44
0xbb80
0x7d00
.end array-data
:array_1
.array-data 4
0x20
0x40
0x60
0x80
0xa0
0xc0
0xe0
0x100
0x120
0x140
0x160
0x180
0x1a0
0x1c0
.end array-data
:array_2
.array-data 4
0x20
0x30
0x38
0x40
0x50
0x60
0x70
0x80
0x90
0xa0
0xb0
0xc0
0xe0
0x100
.end array-data
:array_3
.array-data 4
0x20
0x30
0x38
0x40
0x50
0x60
0x70
0x80
0xa0
0xc0
0xe0
0x100
0x140
0x180
.end array-data
:array_4
.array-data 4
0x20
0x28
0x30
0x38
0x40
0x50
0x60
0x70
0x80
0xa0
0xc0
0xe0
0x100
0x140
.end array-data
:array_5
.array-data 4
0x8
0x10
0x18
0x20
0x28
0x30
0x38
0x40
0x50
0x60
0x70
0x80
0x90
0xa0
.end array-data
.end method
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static getFrameSize(I)I
.locals 7
const/high16 v0, -0x200000
and-int v1, p0, v0
const/4 v2, -0x1
if-eq v1, v0, :cond_0
return v2
:cond_0
ushr-int/lit8 v0, p0, 0x13
const/4 v1, 0x3
and-int/2addr v0, v1
const/4 v3, 0x1
if-ne v0, v3, :cond_1
return v2
:cond_1
ushr-int/lit8 v4, p0, 0x11
and-int/2addr v4, v1
if-nez v4, :cond_2
return v2
:cond_2
ushr-int/lit8 v5, p0, 0xc
const/16 v6, 0xf
and-int/2addr v5, v6
if-eqz v5, :cond_d
if-ne v5, v6, :cond_3
goto :goto_3
:cond_3
ushr-int/lit8 v6, p0, 0xa
and-int/2addr v6, v1
if-ne v6, v1, :cond_4
return v2
.line 1
:cond_4
sget-object v2, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->SAMPLING_RATE_V1:[I
aget v2, v2, v6
const/4 v6, 0x2
if-ne v0, v6, :cond_5
.line 2
div-int/lit8 v2, v2, 0x2
goto :goto_0
:cond_5
if-nez v0, :cond_6
.line 3
div-int/lit8 v2, v2, 0x4
:cond_6
:goto_0
ushr-int/lit8 p0, p0, 0x9
and-int/2addr p0, v3
if-ne v4, v1, :cond_8
if-ne v0, v1, :cond_7
.line 4
sget-object v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V1_L1:[I
sub-int/2addr v5, v3
aget v0, v0, v5
goto :goto_1
:cond_7
sget-object v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V2_L1:[I
sub-int/2addr v5, v3
aget v0, v0, v5
:goto_1
mul-int/lit16 v0, v0, 0x2ee0
.line 5
div-int/2addr v0, v2
add-int/2addr v0, p0
mul-int/lit8 v0, v0, 0x4
return v0
:cond_8
if-ne v0, v1, :cond_a
if-ne v4, v6, :cond_9
.line 6
sget-object v6, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V1_L2:[I
sub-int/2addr v5, v3
aget v5, v6, v5
goto :goto_2
:cond_9
sget-object v6, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V1_L3:[I
sub-int/2addr v5, v3
aget v5, v6, v5
goto :goto_2
.line 7
:cond_a
sget-object v6, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V2:[I
sub-int/2addr v5, v3
aget v5, v6, v5
:goto_2
const v6, 0x23280
if-ne v0, v1, :cond_b
invoke-static {v5, v6, v2, p0}, Lcom/google/android/exoplayer2/extractor/a;->a(IIII)I
move-result p0
return p0
:cond_b
if-ne v4, v3, :cond_c
const v6, 0x11940
.line 8
:cond_c
invoke-static {v6, v5, v2, p0}, Lcom/google/android/exoplayer2/extractor/a;->a(IIII)I
move-result p0
return p0
:cond_d
:goto_3
return v2
.end method
.method public static populateHeader(ILcom/google/android/exoplayer2/extractor/MpegAudioHeader;)Z
.locals 11
const/high16 v0, -0x200000
and-int v1, p0, v0
const/4 v2, 0x0
if-eq v1, v0, :cond_0
return v2
:cond_0
ushr-int/lit8 v0, p0, 0x13
const/4 v1, 0x3
and-int/lit8 v4, v0, 0x3
const/4 v0, 0x1
if-ne v4, v0, :cond_1
return v2
:cond_1
ushr-int/lit8 v3, p0, 0x11
and-int/2addr v3, v1
if-nez v3, :cond_2
return v2
:cond_2
ushr-int/lit8 v5, p0, 0xc
const/16 v6, 0xf
and-int/2addr v5, v6
if-eqz v5, :cond_e
if-ne v5, v6, :cond_3
goto/16 :goto_6
:cond_3
ushr-int/lit8 v6, p0, 0xa
and-int/2addr v6, v1
if-ne v6, v1, :cond_4
return v2
.line 1
:cond_4
sget-object v2, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->SAMPLING_RATE_V1:[I
aget v2, v2, v6
const/4 v6, 0x2
if-ne v4, v6, :cond_5
.line 2
div-int/lit8 v2, v2, 0x2
goto :goto_0
:cond_5
if-nez v4, :cond_6
.line 3
div-int/lit8 v2, v2, 0x4
:cond_6
:goto_0
move v7, v2
ushr-int/lit8 v2, p0, 0x9
and-int/2addr v2, v0
const/16 v8, 0x480
if-ne v3, v1, :cond_8
if-ne v4, v1, :cond_7
.line 4
sget-object v8, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V1_L1:[I
sub-int/2addr v5, v0
aget v5, v8, v5
goto :goto_1
:cond_7
sget-object v8, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V2_L1:[I
sub-int/2addr v5, v0
aget v5, v8, v5
:goto_1
mul-int/lit16 v8, v5, 0x2ee0
.line 5
div-int/2addr v8, v7
add-int/2addr v8, v2
mul-int/lit8 v8, v8, 0x4
const/16 v2, 0x180
move v10, v2
goto :goto_4
:cond_8
const v9, 0x23280
if-ne v4, v1, :cond_a
if-ne v3, v6, :cond_9
.line 6
sget-object v10, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V1_L2:[I
sub-int/2addr v5, v0
aget v5, v10, v5
goto :goto_2
:cond_9
sget-object v10, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V1_L3:[I
sub-int/2addr v5, v0
aget v5, v10, v5
:goto_2
mul-int/2addr v9, v5
.line 7
div-int/2addr v9, v7
goto :goto_3
.line 8
:cond_a
sget-object v10, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->BITRATE_V2:[I
sub-int/2addr v5, v0
aget v5, v10, v5
if-ne v3, v0, :cond_b
const/16 v8, 0x240
:cond_b
if-ne v3, v0, :cond_c
const v9, 0x11940
:cond_c
mul-int/2addr v9, v5
.line 9
div-int/2addr v9, v7
:goto_3
add-int/2addr v9, v2
move v10, v8
move v8, v9
.line 10
:goto_4
sget-object v2, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->MIME_TYPE_BY_LAYER:[Ljava/lang/String;
rsub-int/lit8 v3, v3, 0x3
aget-object v2, v2, v3
shr-int/lit8 p0, p0, 0x6
and-int/2addr p0, v1
if-ne p0, v1, :cond_d
move p0, v0
goto :goto_5
:cond_d
move p0, v6
:goto_5
mul-int/lit16 v9, v5, 0x3e8
move-object v3, p1
move-object v5, v2
move v6, v8
move v8, p0
.line 11
invoke-direct/range {v3 .. v10}, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->setValues(ILjava/lang/String;IIIII)V
return v0
:cond_e
:goto_6
return v2
.end method
.method private setValues(ILjava/lang/String;IIIII)V
.locals 0
.line 1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->version:I
.line 2
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->mimeType:Ljava/lang/String;
.line 3
iput p3, p0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->frameSize:I
.line 4
iput p4, p0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->sampleRate:I
.line 5
iput p5, p0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->channels:I
.line 6
iput p6, p0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->bitrate:I
.line 7
iput p7, p0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->samplesPerFrame:I
return-void
.end method
@@ -0,0 +1,18 @@
.class public final Lcom/google/android/exoplayer2/extractor/PositionHolder;
.super Ljava/lang/Object;
.source "PositionHolder.java"
# instance fields
.field public position:J
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
@@ -0,0 +1,62 @@
.class public final Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;
.super Ljava/lang/Object;
.source "SeekMap.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/SeekMap;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/SeekMap;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "Unseekable"
.end annotation
# instance fields
.field private final durationUs:J
# direct methods
.method public constructor <init>(J)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;->durationUs:J
return-void
.end method
# virtual methods
.method public getDurationUs()J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;->durationUs:J
return-wide v0
.end method
.method public getPosition(J)J
.locals 0
const-wide/16 p1, 0x0
return-wide p1
.end method
.method public isSeekable()Z
.locals 1
const/4 v0, 0x0
return v0
.end method
@@ -0,0 +1,22 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/SeekMap;
.super Ljava/lang/Object;
.source "SeekMap.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;
}
.end annotation
# virtual methods
.method public abstract getDurationUs()J
.end method
.method public abstract getPosition(J)J
.end method
.method public abstract isSeekable()Z
.end method
@@ -0,0 +1,23 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/TrackOutput;
.super Ljava/lang/Object;
.source "TrackOutput.java"
# virtual methods
.method public abstract format(Lcom/google/android/exoplayer2/Format;)V
.end method
.method public abstract sampleData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;IZ)I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.end method
.method public abstract sampleMetadata(JIII[B)V
.end method
@@ -0,0 +1,17 @@
.class public final synthetic Lcom/google/android/exoplayer2/extractor/a;
.super Ljava/lang/Object;
.source "R8$$SyntheticClass"
# direct methods
.method public static a(IIII)I
.locals 0
mul-int/2addr p0, p1
div-int/2addr p0, p2
add-int/2addr p0, p3
return p0
.end method
@@ -0,0 +1,429 @@
.class final Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;
.super Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;
.source "AudioTagPayloadReader.java"
# static fields
.field private static final AAC_PACKET_TYPE_AAC_RAW:I = 0x1
.field private static final AAC_PACKET_TYPE_SEQUENCE_HEADER:I = 0x0
.field private static final AUDIO_FORMAT_AAC:I = 0xa
.field private static final AUDIO_FORMAT_ALAW:I = 0x7
.field private static final AUDIO_FORMAT_MP3:I = 0x2
.field private static final AUDIO_FORMAT_ULAW:I = 0x8
.field private static final AUDIO_SAMPLING_RATE_TABLE:[I
# instance fields
.field private audioFormat:I
.field private hasOutputFormat:Z
.field private hasParsedAudioDataHeader:Z
# direct methods
.method public static constructor <clinit>()V
.locals 1
const/4 v0, 0x4
new-array v0, v0, [I
.line 1
fill-array-data v0, :array_0
sput-object v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->AUDIO_SAMPLING_RATE_TABLE:[I
return-void
nop
:array_0
.array-data 4
0x1588
0x2b11
0x5622
0xac44
.end array-data
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
.locals 0
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;-><init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
return-void
.end method
# virtual methods
.method public parseHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.locals 18
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader$UnsupportedFormatException;
}
.end annotation
move-object/from16 v0, p0
.line 1
iget-boolean v1, v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->hasParsedAudioDataHeader:Z
const/4 v2, 0x1
if-nez v1, :cond_6
.line 2
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v1
shr-int/lit8 v3, v1, 0x4
and-int/lit8 v3, v3, 0xf
.line 3
iput v3, v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->audioFormat:I
const/4 v4, 0x3
const/4 v5, 0x2
if-ne v3, v5, :cond_0
shr-int/2addr v1, v5
and-int/2addr v1, v4
.line 4
sget-object v3, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->AUDIO_SAMPLING_RATE_TABLE:[I
aget v10, v3, v1
const/4 v4, 0x0
const/4 v6, 0x0
const/4 v7, -0x1
const/4 v8, -0x1
const/4 v9, 0x1
const/4 v11, 0x0
const/4 v12, 0x0
const/4 v13, 0x0
const/4 v14, 0x0
const-string v5, "audio/mpeg"
.line 5
invoke-static/range {v4 .. v14}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;
move-result-object v1
.line 6
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v3, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 7
iput-boolean v2, v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->hasOutputFormat:Z
goto :goto_3
:cond_0
const/4 v6, 0x7
if-eq v3, v6, :cond_3
const/16 v7, 0x8
if-ne v3, v7, :cond_1
goto :goto_0
:cond_1
const/16 v1, 0xa
if-ne v3, v1, :cond_2
goto :goto_3
.line 8
:cond_2
new-instance v1, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader$UnsupportedFormatException;
const-string v2, "Audio format not supported: "
invoke-static {v2}, Landroid/support/v4/media/d;->a(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
iget v3, v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->audioFormat:I
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-direct {v1, v2}, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader$UnsupportedFormatException;-><init>(Ljava/lang/String;)V
throw v1
:cond_3
:goto_0
if-ne v3, v6, :cond_4
const-string v3, "audio/g711-alaw"
goto :goto_1
:cond_4
const-string v3, "audio/g711-mlaw"
:goto_1
move-object v7, v3
and-int/2addr v1, v2
if-ne v1, v2, :cond_5
move v13, v5
goto :goto_2
:cond_5
move v13, v4
:goto_2
const/4 v6, 0x0
const/4 v8, 0x0
const/4 v9, -0x1
const/4 v10, -0x1
const/4 v11, 0x1
const/16 v12, 0x1f40
const/4 v14, 0x0
const/4 v15, 0x0
const/16 v16, 0x0
const/16 v17, 0x0
.line 9
invoke-static/range {v6 .. v17}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;
move-result-object v1
.line 10
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v3, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 11
iput-boolean v2, v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->hasOutputFormat:Z
.line 12
:goto_3
iput-boolean v2, v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->hasParsedAudioDataHeader:Z
goto :goto_4
:cond_6
move-object/from16 v1, p1
.line 13
invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
:goto_4
return v2
.end method
.method public parsePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
.locals 16
move-object/from16 v0, p0
move-object/from16 v1, p1
.line 1
iget v2, v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->audioFormat:I
const/4 v3, 0x2
if-ne v2, v3, :cond_0
.line 2
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v8
.line 3
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v2, v1, v8}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 4
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
const/4 v7, 0x1
const/4 v9, 0x0
const/4 v10, 0x0
move-wide/from16 v5, p2
invoke-interface/range {v4 .. v10}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
goto :goto_0
.line 5
:cond_0
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v2
const/4 v3, 0x1
if-nez v2, :cond_1
.line 6
iget-boolean v4, v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->hasOutputFormat:Z
if-nez v4, :cond_1
.line 7
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v2
new-array v4, v2, [B
const/4 v5, 0x0
.line 8
invoke-virtual {v1, v4, v5, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 9
invoke-static {v4}, Lcom/google/android/exoplayer2/util/CodecSpecificDataUtil;->parseAacAudioSpecificConfig([B)Landroid/util/Pair;
move-result-object v1
const/4 v5, 0x0
const/4 v7, 0x0
const/4 v8, -0x1
const/4 v9, -0x1
.line 10
iget-object v2, v1, Landroid/util/Pair;->second:Ljava/lang/Object;
check-cast v2, Ljava/lang/Integer;
.line 11
invoke-virtual {v2}, Ljava/lang/Integer;->intValue()I
move-result v10
iget-object v1, v1, Landroid/util/Pair;->first:Ljava/lang/Object;
check-cast v1, Ljava/lang/Integer;
invoke-virtual {v1}, Ljava/lang/Integer;->intValue()I
move-result v11
.line 12
invoke-static {v4}, Ljava/util/Collections;->singletonList(Ljava/lang/Object;)Ljava/util/List;
move-result-object v12
const/4 v13, 0x0
const/4 v14, 0x0
const/4 v15, 0x0
const-string v6, "audio/mp4a-latm"
.line 13
invoke-static/range {v5 .. v15}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;
move-result-object v1
.line 14
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v2, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 15
iput-boolean v3, v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->hasOutputFormat:Z
goto :goto_0
.line 16
:cond_1
iget v4, v0, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;->audioFormat:I
const/16 v5, 0xa
if-ne v4, v5, :cond_2
if-ne v2, v3, :cond_3
.line 17
:cond_2
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v10
.line 18
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v2, v1, v10}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 19
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
const/4 v9, 0x1
const/4 v11, 0x0
const/4 v12, 0x0
move-wide/from16 v7, p2
invoke-interface/range {v6 .. v12}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
:cond_3
:goto_0
return-void
.end method
.method public seek()V
.locals 0
return-void
.end method
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor$1;
.super Ljava/lang/Object;
.source "FlvExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 3
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 1
new-instance v1, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
@@ -0,0 +1,842 @@
.class public final Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;
.super Ljava/lang/Object;
.source "FlvExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/Extractor;
.implements Lcom/google/android/exoplayer2/extractor/SeekMap;
# static fields
.field public static final FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
.field private static final FLV_HEADER_SIZE:I = 0x9
.field private static final FLV_TAG:I
.field private static final FLV_TAG_HEADER_SIZE:I = 0xb
.field private static final STATE_READING_FLV_HEADER:I = 0x1
.field private static final STATE_READING_TAG_DATA:I = 0x4
.field private static final STATE_READING_TAG_HEADER:I = 0x3
.field private static final STATE_SKIPPING_TO_TAG_HEADER:I = 0x2
.field private static final TAG_TYPE_AUDIO:I = 0x8
.field private static final TAG_TYPE_SCRIPT_DATA:I = 0x12
.field private static final TAG_TYPE_VIDEO:I = 0x9
# instance fields
.field private audioReader:Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;
.field private bytesToNextTagHeader:I
.field private extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.field private final headerBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private metadataReader:Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;
.field private parserState:I
.field private final scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final tagData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field public tagDataSize:I
.field private final tagHeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field public tagTimestampUs:J
.field public tagType:I
.field private videoReader:Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;
# direct methods
.method public static constructor <clinit>()V
.locals 1
.line 1
new-instance v0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor$1;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor$1;-><init>()V
sput-object v0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
const-string v0, "FLV"
.line 2
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->FLV_TAG:I
return-void
.end method
.method public constructor <init>()V
.locals 2
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
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/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 3
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0x9
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->headerBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 4
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0xb
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagHeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 5
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-direct {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v0, 0x1
.line 6
iput v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->parserState:I
return-void
.end method
.method private prepareTagData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Lcom/google/android/exoplayer2/util/ParsableByteArray;
.locals 4
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagDataSize:I
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->capacity()I
move-result v1
const/4 v2, 0x0
if-le v0, v1, :cond_0
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->capacity()I
move-result v1
mul-int/lit8 v1, v1, 0x2
iget v3, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagDataSize:I
invoke-static {v1, v3}, Ljava/lang/Math;->max(II)I
move-result v1
new-array v1, v1, [B
invoke-virtual {v0, v1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset([BI)V
goto :goto_0
.line 3
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 4
:goto_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagDataSize:I
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagDataSize:I
invoke-interface {p1, v0, v2, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BII)V
.line 6
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-object p1
.end method
.method private readFlvHeader(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->headerBuffer: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, 0x9
const/4 v3, 0x1
invoke-interface {p1, v0, v1, v2, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BIIZ)Z
move-result p1
if-nez p1, :cond_0
return v1
.line 2
:cond_0
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->headerBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 3
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->headerBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v0, 0x4
invoke-virtual {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 4
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->headerBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p1
and-int/lit8 v4, p1, 0x4
if-eqz v4, :cond_1
move v4, v3
goto :goto_0
:cond_1
move v4, v1
:goto_0
and-int/2addr p1, v3
if-eqz p1, :cond_2
move v1, v3
:cond_2
if-eqz v4, :cond_3
.line 5
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->audioReader:Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;
if-nez p1, :cond_3
.line 6
new-instance p1, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
const/16 v5, 0x8
.line 7
invoke-interface {v4, v5, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object v4
invoke-direct {p1, v4}, Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;-><init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->audioReader:Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;
:cond_3
const/4 p1, 0x2
if-eqz v1, :cond_4
.line 8
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->videoReader:Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;
if-nez v1, :cond_4
.line 9
new-instance v1, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.line 10
invoke-interface {v4, v2, p1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object v4
invoke-direct {v1, v4}, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;-><init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->videoReader:Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;
.line 11
:cond_4
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->metadataReader:Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;
if-nez v1, :cond_5
.line 12
new-instance v1, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;
const/4 v4, 0x0
invoke-direct {v1, v4}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;-><init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->metadataReader:Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;
.line 13
:cond_5
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
invoke-interface {v1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->endTracks()V
.line 14
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
invoke-interface {v1, p0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->seekMap(Lcom/google/android/exoplayer2/extractor/SeekMap;)V
.line 15
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->headerBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v1
sub-int/2addr v1, v2
add-int/2addr v1, v0
iput v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->bytesToNextTagHeader:I
.line 16
iput p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->parserState:I
return v3
.end method
.method private readTagData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 4
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagType:I
const/16 v1, 0x8
if-ne v0, v1, :cond_0
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->audioReader:Lcom/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader;
if-eqz v1, :cond_0
.line 2
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->prepareTagData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Lcom/google/android/exoplayer2/util/ParsableByteArray;
move-result-object p1
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagTimestampUs:J
invoke-virtual {v1, p1, v2, v3}, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
goto :goto_0
:cond_0
const/16 v1, 0x9
if-ne v0, v1, :cond_1
.line 3
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->videoReader:Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;
if-eqz v1, :cond_1
.line 4
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->prepareTagData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Lcom/google/android/exoplayer2/util/ParsableByteArray;
move-result-object p1
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagTimestampUs:J
invoke-virtual {v1, p1, v2, v3}, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
goto :goto_0
:cond_1
const/16 v1, 0x12
if-ne v0, v1, :cond_2
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->metadataReader:Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;
if-eqz v0, :cond_2
.line 6
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->prepareTagData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Lcom/google/android/exoplayer2/util/ParsableByteArray;
move-result-object p1
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagTimestampUs:J
invoke-virtual {v0, p1, v1, v2}, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
:goto_0
const/4 p1, 0x1
goto :goto_1
.line 7
:cond_2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagDataSize:I
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
const/4 p1, 0x0
:goto_1
const/4 v0, 0x4
.line 8
iput v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->bytesToNextTagHeader:I
const/4 v0, 0x2
.line 9
iput v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->parserState:I
return p1
.end method
.method private readTagHeader(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagHeaderBuffer: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, 0xb
const/4 v3, 0x1
invoke-interface {p1, v0, v1, v2, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BIIZ)Z
move-result p1
if-nez p1, :cond_0
return v1
.line 2
:cond_0
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagHeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 3
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagHeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagType:I
.line 4
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagHeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result p1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagDataSize:I
.line 5
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagHeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result p1
int-to-long v0, p1
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagTimestampUs:J
.line 6
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagHeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p1
shl-int/lit8 p1, p1, 0x18
int-to-long v0, p1
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagTimestampUs:J
or-long/2addr v0, v4
const-wide/16 v4, 0x3e8
mul-long/2addr v0, v4
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagTimestampUs:J
.line 7
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->tagHeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v0, 0x3
invoke-virtual {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
const/4 p1, 0x4
.line 8
iput p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->parserState:I
return v3
.end method
.method private skipToTagHeader(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->bytesToNextTagHeader:I
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
const/4 p1, 0x0
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->bytesToNextTagHeader:I
const/4 p1, 0x3
.line 3
iput p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->parserState:I
return-void
.end method
# virtual methods
.method public getDurationUs()J
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->metadataReader:Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->getDurationUs()J
move-result-wide v0
return-wide v0
.end method
.method public getPosition(J)J
.locals 0
const-wide/16 p1, 0x0
return-wide p1
.end method
.method public init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
.locals 0
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
return-void
.end method
.method public isSeekable()Z
.locals 1
const/4 v0, 0x0
return v0
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.locals 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
:cond_0
:goto_0
iget p2, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->parserState:I
const/4 v0, 0x1
const/4 v1, -0x1
if-eq p2, v0, :cond_4
const/4 v0, 0x2
if-eq p2, v0, :cond_3
const/4 v0, 0x3
if-eq p2, v0, :cond_2
const/4 v0, 0x4
if-eq p2, v0, :cond_1
goto :goto_0
.line 2
:cond_1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->readTagData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
move-result p2
if-eqz p2, :cond_0
const/4 p1, 0x0
return p1
.line 3
:cond_2
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->readTagHeader(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
move-result p2
if-nez p2, :cond_0
return v1
.line 4
:cond_3
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->skipToTagHeader(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)V
goto :goto_0
.line 5
:cond_4
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->readFlvHeader(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
move-result p2
if-nez p2, :cond_0
return v1
.end method
.method public release()V
.locals 0
return-void
.end method
.method public seek(JJ)V
.locals 0
const/4 p1, 0x1
.line 1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->parserState:I
const/4 p1, 0x0
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->bytesToNextTagHeader:I
return-void
.end method
.method public sniff(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v1, 0x0
const/4 v2, 0x3
invoke-interface {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v0
sget v2, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->FLV_TAG:I
if-eq v0, v2, :cond_0
return v1
.line 4
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v2, 0x2
invoke-interface {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 6
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v0
and-int/lit16 v0, v0, 0xfa
if-eqz v0, :cond_1
return v1
.line 7
:cond_1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v2, 0x4
invoke-interface {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 8
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 9
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v0
.line 10
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->resetPeekPosition()V
.line 11
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
.line 12
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 13
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 14
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/FlvExtractor;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result p1
if-nez p1, :cond_2
const/4 v1, 0x1
:cond_2
return v1
.end method
@@ -0,0 +1,514 @@
.class final Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;
.super Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;
.source "ScriptTagPayloadReader.java"
# static fields
.field private static final AMF_TYPE_BOOLEAN:I = 0x1
.field private static final AMF_TYPE_DATE:I = 0xb
.field private static final AMF_TYPE_ECMA_ARRAY:I = 0x8
.field private static final AMF_TYPE_END_MARKER:I = 0x9
.field private static final AMF_TYPE_NUMBER:I = 0x0
.field private static final AMF_TYPE_OBJECT:I = 0x3
.field private static final AMF_TYPE_STRICT_ARRAY:I = 0xa
.field private static final AMF_TYPE_STRING:I = 0x2
.field private static final KEY_DURATION:Ljava/lang/String; = "duration"
.field private static final NAME_METADATA:Ljava/lang/String; = "onMetaData"
# instance fields
.field private durationUs:J
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
.locals 2
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;-><init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
const-wide v0, -0x7fffffffffffffffL # -4.9E-324
.line 2
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->durationUs:J
return-void
.end method
.method private static readAmfBoolean(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/lang/Boolean;
.locals 1
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p0
const/4 v0, 0x1
if-ne p0, v0, :cond_0
goto :goto_0
:cond_0
const/4 v0, 0x0
:goto_0
invoke-static {v0}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
move-result-object p0
return-object p0
.end method
.method private static readAmfData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Ljava/lang/Object;
.locals 1
if-eqz p1, :cond_6
const/4 v0, 0x1
if-eq p1, v0, :cond_5
const/4 v0, 0x2
if-eq p1, v0, :cond_4
const/4 v0, 0x3
if-eq p1, v0, :cond_3
const/16 v0, 0x8
if-eq p1, v0, :cond_2
const/16 v0, 0xa
if-eq p1, v0, :cond_1
const/16 v0, 0xb
if-eq p1, v0, :cond_0
const/4 p0, 0x0
return-object p0
.line 1
:cond_0
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfDate(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/util/Date;
move-result-object p0
return-object p0
.line 2
:cond_1
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfStrictArray(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/util/ArrayList;
move-result-object p0
return-object p0
.line 3
:cond_2
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfEcmaArray(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/util/HashMap;
move-result-object p0
return-object p0
.line 4
:cond_3
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfObject(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/util/HashMap;
move-result-object p0
return-object p0
.line 5
:cond_4
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfString(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/lang/String;
move-result-object p0
return-object p0
.line 6
:cond_5
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfBoolean(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/lang/Boolean;
move-result-object p0
return-object p0
.line 7
:cond_6
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfDouble(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/lang/Double;
move-result-object p0
return-object p0
.end method
.method private static readAmfDate(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/util/Date;
.locals 3
.line 1
new-instance v0, Ljava/util/Date;
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfDouble(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/lang/Double;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/Double;->doubleValue()D
move-result-wide v1
double-to-long v1, v1
invoke-direct {v0, v1, v2}, Ljava/util/Date;-><init>(J)V
const/4 v1, 0x2
.line 2
invoke-virtual {p0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
return-object v0
.end method
.method private static readAmfDouble(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/lang/Double;
.locals 2
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLong()J
move-result-wide v0
invoke-static {v0, v1}, Ljava/lang/Double;->longBitsToDouble(J)D
move-result-wide v0
invoke-static {v0, v1}, Ljava/lang/Double;->valueOf(D)Ljava/lang/Double;
move-result-object p0
return-object p0
.end method
.method private static readAmfEcmaArray(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/util/HashMap;
.locals 5
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/util/ParsableByteArray;",
")",
"Ljava/util/HashMap<",
"Ljava/lang/String;",
"Ljava/lang/Object;",
">;"
}
.end annotation
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v0
.line 2
new-instance v1, Ljava/util/HashMap;
invoke-direct {v1, v0}, Ljava/util/HashMap;-><init>(I)V
const/4 v2, 0x0
:goto_0
if-ge v2, v0, :cond_0
.line 3
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfString(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/lang/String;
move-result-object v3
.line 4
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)I
move-result v4
.line 5
invoke-static {p0, v4}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Ljava/lang/Object;
move-result-object v4
invoke-virtual {v1, v3, v4}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
add-int/lit8 v2, v2, 0x1
goto :goto_0
:cond_0
return-object v1
.end method
.method private static readAmfObject(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/util/HashMap;
.locals 4
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/util/ParsableByteArray;",
")",
"Ljava/util/HashMap<",
"Ljava/lang/String;",
"Ljava/lang/Object;",
">;"
}
.end annotation
.line 1
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
.line 2
:goto_0
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfString(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/lang/String;
move-result-object v1
.line 3
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)I
move-result v2
const/16 v3, 0x9
if-ne v2, v3, :cond_0
return-object v0
.line 4
:cond_0
invoke-static {p0, v2}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Ljava/lang/Object;
move-result-object v2
invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_0
.end method
.method private static readAmfStrictArray(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/util/ArrayList;
.locals 4
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/util/ParsableByteArray;",
")",
"Ljava/util/ArrayList<",
"Ljava/lang/Object;",
">;"
}
.end annotation
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v0
.line 2
new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1, v0}, Ljava/util/ArrayList;-><init>(I)V
const/4 v2, 0x0
:goto_0
if-ge v2, v0, :cond_0
.line 3
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)I
move-result v3
.line 4
invoke-static {p0, v3}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Ljava/lang/Object;
move-result-object v3
invoke-virtual {v1, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
add-int/lit8 v2, v2, 0x1
goto :goto_0
:cond_0
return-object v1
.end method
.method private static readAmfString(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/lang/String;
.locals 3
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v0
.line 2
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v1
.line 3
invoke-virtual {p0, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 4
new-instance v2, Ljava/lang/String;
iget-object p0, p0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-direct {v2, p0, v1, v0}, Ljava/lang/String;-><init>([BII)V
return-object v2
.end method
.method private static readAmfType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)I
.locals 0
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p0
return p0
.end method
# virtual methods
.method public getDurationUs()J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->durationUs:J
return-wide v0
.end method
.method public parseHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.locals 0
const/4 p1, 0x1
return p1
.end method
.method public parsePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
.locals 2
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 1
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)I
move-result p2
const/4 p3, 0x2
if-ne p2, p3, :cond_3
.line 2
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfString(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/lang/String;
move-result-object p2
const-string p3, "onMetaData"
.line 3
invoke-virtual {p3, p2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result p2
if-nez p2, :cond_0
return-void
.line 4
:cond_0
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)I
move-result p2
const/16 p3, 0x8
if-eq p2, p3, :cond_1
return-void
.line 5
:cond_1
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->readAmfEcmaArray(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Ljava/util/HashMap;
move-result-object p1
const-string p2, "duration"
.line 6
invoke-interface {p1, p2}, Ljava/util/Map;->containsKey(Ljava/lang/Object;)Z
move-result p3
if-eqz p3, :cond_2
.line 7
invoke-interface {p1, p2}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
check-cast p1, Ljava/lang/Double;
invoke-virtual {p1}, Ljava/lang/Double;->doubleValue()D
move-result-wide p1
const-wide/16 v0, 0x0
cmpl-double p3, p1, v0
if-lez p3, :cond_2
const-wide v0, 0x412e848000000000L # 1000000.0
mul-double/2addr p1, v0
double-to-long p1, p1
.line 8
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader;->durationUs:J
:cond_2
return-void
.line 9
:cond_3
new-instance p1, Lcom/google/android/exoplayer2/ParserException;
invoke-direct {p1}, Lcom/google/android/exoplayer2/ParserException;-><init>()V
throw p1
.end method
.method public seek()V
.locals 0
return-void
.end method
@@ -0,0 +1,25 @@
.class public final Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader$UnsupportedFormatException;
.super Lcom/google/android/exoplayer2/ParserException;
.source "TagPayloadReader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "UnsupportedFormatException"
.end annotation
# direct methods
.method public constructor <init>(Ljava/lang/String;)V
.locals 0
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
return-void
.end method
@@ -0,0 +1,72 @@
.class abstract Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;
.super Ljava/lang/Object;
.source "TagPayloadReader.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader$UnsupportedFormatException;
}
.end annotation
# instance fields
.field public final output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
return-void
.end method
# virtual methods
.method public final consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 1
invoke-virtual {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->parseHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
move-result v0
if-eqz v0, :cond_0
.line 2
invoke-virtual {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->parsePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
:cond_0
return-void
.end method
.method public abstract parseHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.end method
.method public abstract parsePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.end method
.method public abstract seek()V
.end method
@@ -0,0 +1,337 @@
.class final Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;
.super Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;
.source "VideoTagPayloadReader.java"
# static fields
.field private static final AVC_PACKET_TYPE_AVC_NALU:I = 0x1
.field private static final AVC_PACKET_TYPE_SEQUENCE_HEADER:I = 0x0
.field private static final VIDEO_CODEC_AVC:I = 0x7
.field private static final VIDEO_FRAME_KEYFRAME:I = 0x1
.field private static final VIDEO_FRAME_VIDEO_INFO:I = 0x5
# instance fields
.field private frameType:I
.field private hasOutputFormat:Z
.field private final nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final nalStartCode:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private nalUnitLengthFieldLength:I
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
.locals 1
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;-><init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
.line 2
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
sget-object v0, Lcom/google/android/exoplayer2/util/NalUnitUtil;->NAL_START_CODE:[B
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([B)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalStartCode:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 3
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v0, 0x4
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-void
.end method
# virtual methods
.method public parseHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.locals 2
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader$UnsupportedFormatException;
}
.end annotation
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p1
shr-int/lit8 v0, p1, 0x4
and-int/lit8 v0, v0, 0xf
and-int/lit8 p1, p1, 0xf
const/4 v1, 0x7
if-ne p1, v1, :cond_1
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->frameType:I
const/4 p1, 0x5
if-eq v0, p1, :cond_0
const/4 p1, 0x1
goto :goto_0
:cond_0
const/4 p1, 0x0
:goto_0
return p1
.line 3
:cond_1
new-instance v0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader$UnsupportedFormatException;
const-string v1, "Video format not supported: "
invoke-static {v1, p1}, Landroid/support/v4/media/b;->a(Ljava/lang/String;I)Ljava/lang/String;
move-result-object p1
invoke-direct {v0, p1}, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader$UnsupportedFormatException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public parsePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
.locals 12
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
.line 2
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v1
int-to-long v1, v1
const-wide/16 v3, 0x3e8
mul-long/2addr v1, v3
add-long v4, v1, p2
const/4 p2, 0x1
const/4 p3, 0x0
if-nez v0, :cond_0
.line 3
iget-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->hasOutputFormat:Z
if-nez v1, :cond_0
.line 4
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v1
new-array v1, v1, [B
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([B)V
.line 5
iget-object v1, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v2
invoke-virtual {p1, v1, p3, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 6
invoke-static {v0}, Lcom/google/android/exoplayer2/video/AvcConfig;->parse(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/video/AvcConfig;
move-result-object p1
.line 7
iget p3, p1, Lcom/google/android/exoplayer2/video/AvcConfig;->nalUnitLengthFieldLength:I
iput p3, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalUnitLengthFieldLength:I
const/4 v0, 0x0
const/4 v2, 0x0
const/4 v3, -0x1
const/4 v4, -0x1
.line 8
iget v5, p1, Lcom/google/android/exoplayer2/video/AvcConfig;->width:I
iget v6, p1, Lcom/google/android/exoplayer2/video/AvcConfig;->height:I
const/high16 v7, -0x40800000 # -1.0f
iget-object v8, p1, Lcom/google/android/exoplayer2/video/AvcConfig;->initializationData:Ljava/util/List;
const/4 v9, -0x1
iget v10, p1, Lcom/google/android/exoplayer2/video/AvcConfig;->pixelWidthAspectRatio:F
const/4 v11, 0x0
const-string v1, "video/avc"
invoke-static/range {v0 .. v11}, Lcom/google/android/exoplayer2/Format;->createVideoSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIFLjava/util/List;IFLcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object p1
.line 9
iget-object p3, p0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {p3, p1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 10
iput-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->hasOutputFormat:Z
goto :goto_2
:cond_0
if-ne v0, p2, :cond_3
.line 11
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->hasOutputFormat:Z
if-eqz v0, :cond_3
.line 12
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 13
aput-byte p3, v0, p3
.line 14
aput-byte p3, v0, p2
const/4 v1, 0x2
.line 15
aput-byte p3, v0, v1
.line 16
iget v0, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalUnitLengthFieldLength:I
const/4 v1, 0x4
rsub-int/lit8 v0, v0, 0x4
move v7, p3
.line 17
:goto_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v2
if-lez v2, :cond_1
.line 18
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v2, v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v3, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalUnitLengthFieldLength:I
invoke-virtual {p1, v2, v0, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 19
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v2, p3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 20
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalLength:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v2
.line 21
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalStartCode:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v3, p3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 22
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object v6, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->nalStartCode:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-interface {v3, v6, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
add-int/lit8 v7, v7, 0x4
.line 23
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v3, p1, v2}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
add-int/2addr v7, v2
goto :goto_0
.line 24
:cond_1
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/flv/TagPayloadReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget p1, p0, Lcom/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader;->frameType:I
if-ne p1, p2, :cond_2
move v6, p2
goto :goto_1
:cond_2
move v6, p3
:goto_1
const/4 v8, 0x0
const/4 v9, 0x0
invoke-interface/range {v3 .. v9}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
:cond_3
:goto_2
return-void
.end method
.method public seek()V
.locals 0
return-void
.end method
@@ -0,0 +1,14 @@
.class synthetic Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$1;
.super Ljava/lang/Object;
.source "DefaultEbmlReader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1009
name = null
.end annotation
@@ -0,0 +1,64 @@
.class final Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;
.super Ljava/lang/Object;
.source "DefaultEbmlReader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "MasterElement"
.end annotation
# instance fields
.field private final elementEndPosition:J
.field private final elementId:I
# direct methods
.method private constructor <init>(IJ)V
.locals 0
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 3
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;->elementId:I
.line 4
iput-wide p2, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;->elementEndPosition:J
return-void
.end method
.method public synthetic constructor <init>(IJLcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$1;)V
.locals 0
.line 1
invoke-direct {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;-><init>(IJ)V
return-void
.end method
.method public static synthetic access$000(Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;)J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;->elementEndPosition:J
return-wide v0
.end method
.method public static synthetic access$100(Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;)I
.locals 0
.line 1
iget p0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;->elementId:I
return p0
.end method
@@ -0,0 +1,716 @@
.class final Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;
.super Ljava/lang/Object;
.source "DefaultEbmlReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/mkv/EbmlReader;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;
}
.end annotation
# static fields
.field private static final ELEMENT_STATE_READ_CONTENT:I = 0x2
.field private static final ELEMENT_STATE_READ_CONTENT_SIZE:I = 0x1
.field private static final ELEMENT_STATE_READ_ID:I = 0x0
.field private static final MAX_ID_BYTES:I = 0x4
.field private static final MAX_INTEGER_ELEMENT_SIZE_BYTES:I = 0x8
.field private static final MAX_LENGTH_BYTES:I = 0x8
.field private static final VALID_FLOAT32_ELEMENT_SIZE_BYTES:I = 0x4
.field private static final VALID_FLOAT64_ELEMENT_SIZE_BYTES:I = 0x8
# instance fields
.field private elementContentSize:J
.field private elementId:I
.field private elementState:I
.field private final masterElementsStack:Ljava/util/Stack;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Stack<",
"Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;",
">;"
}
.end annotation
.end field
.field private output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
.field private final scratch:[B
.field private final varintReader:Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;
# direct methods
.method public constructor <init>()V
.locals 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/16 v0, 0x8
new-array v0, v0, [B
.line 2
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->scratch:[B
.line 3
new-instance v0, Ljava/util/Stack;
invoke-direct {v0}, Ljava/util/Stack;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->masterElementsStack:Ljava/util/Stack;
.line 4
new-instance v0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->varintReader:Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;
return-void
.end method
.method private maybeResyncToNextLevel1Element(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
.locals 4
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->resetPeekPosition()V
.line 2
:goto_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->scratch:[B
const/4 v1, 0x0
const/4 v2, 0x4
invoke-interface {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->scratch:[B
aget-byte v0, v0, v1
invoke-static {v0}, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->parseUnsignedVarintLength(I)I
move-result v0
const/4 v3, -0x1
if-eq v0, v3, :cond_0
if-gt v0, v2, :cond_0
.line 4
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->scratch:[B
invoke-static {v2, v0, v1}, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->assembleVarint([BIZ)J
move-result-wide v1
long-to-int v1, v1
.line 5
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
invoke-interface {v2, v1}, Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;->isLevel1Element(I)Z
move-result v2
if-eqz v2, :cond_0
.line 6
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
int-to-long v0, v1
return-wide v0
:cond_0
const/4 v0, 0x1
.line 7
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
goto :goto_0
.end method
.method private readFloat(Lcom/google/android/exoplayer2/extractor/ExtractorInput;I)D
.locals 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-direct {p0, p1, p2}, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->readInteger(Lcom/google/android/exoplayer2/extractor/ExtractorInput;I)J
move-result-wide v0
const/4 p1, 0x4
if-ne p2, p1, :cond_0
long-to-int p1, v0
.line 2
invoke-static {p1}, Ljava/lang/Float;->intBitsToFloat(I)F
move-result p1
float-to-double p1, p1
goto :goto_0
.line 3
:cond_0
invoke-static {v0, v1}, Ljava/lang/Double;->longBitsToDouble(J)D
move-result-wide p1
:goto_0
return-wide p1
.end method
.method private readInteger(Lcom/google/android/exoplayer2/extractor/ExtractorInput;I)J
.locals 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->scratch:[B
const/4 v1, 0x0
invoke-interface {p1, v0, v1, p2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BII)V
const-wide/16 v2, 0x0
:goto_0
if-ge v1, p2, :cond_0
const/16 p1, 0x8
shl-long/2addr v2, p1
.line 2
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->scratch:[B
aget-byte p1, p1, v1
and-int/lit16 p1, p1, 0xff
int-to-long v4, p1
or-long/2addr v2, v4
add-int/lit8 v1, v1, 0x1
goto :goto_0
:cond_0
return-wide v2
.end method
.method private readString(Lcom/google/android/exoplayer2/extractor/ExtractorInput;I)Ljava/lang/String;
.locals 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
if-nez p2, :cond_0
const-string p1, ""
return-object p1
.line 1
:cond_0
new-array v0, p2, [B
const/4 v1, 0x0
.line 2
invoke-interface {p1, v0, v1, p2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BII)V
.line 3
new-instance p1, Ljava/lang/String;
invoke-direct {p1, v0}, Ljava/lang/String;-><init>([B)V
return-object p1
.end method
# virtual methods
.method public init(Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;)V
.locals 0
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
return-void
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 9
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
const/4 v1, 0x0
const/4 v2, 0x1
if-eqz v0, :cond_0
move v0, v2
goto :goto_0
:cond_0
move v0, v1
:goto_0
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 2
:goto_1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->masterElementsStack:Ljava/util/Stack;
invoke-virtual {v0}, Ljava/util/Stack;->isEmpty()Z
move-result v0
if-nez v0, :cond_1
.line 3
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->masterElementsStack:Ljava/util/Stack;
invoke-virtual {v0}, Ljava/util/Stack;->peek()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;
invoke-static {v0}, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;->access$000(Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;)J
move-result-wide v5
cmp-long v0, v3, v5
if-ltz v0, :cond_1
.line 4
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->masterElementsStack:Ljava/util/Stack;
invoke-virtual {v0}, Ljava/util/Stack;->pop()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;
invoke-static {v0}, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;->access$100(Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;)I
move-result v0
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;->endMasterElement(I)V
return v2
.line 5
:cond_1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
const/4 v3, 0x4
if-nez v0, :cond_4
.line 6
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->varintReader:Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;
invoke-virtual {v0, p1, v2, v1, v3}, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->readUnsignedVarint(Lcom/google/android/exoplayer2/extractor/ExtractorInput;ZZI)J
move-result-wide v4
const-wide/16 v6, -0x2
cmp-long v0, v4, v6
if-nez v0, :cond_2
.line 7
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->maybeResyncToNextLevel1Element(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
move-result-wide v4
:cond_2
const-wide/16 v6, -0x1
cmp-long v0, v4, v6
if-nez v0, :cond_3
return v1
:cond_3
long-to-int v0, v4
.line 8
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementId:I
.line 9
iput v2, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
.line 10
:cond_4
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
const/4 v4, 0x2
if-ne v0, v2, :cond_5
.line 11
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->varintReader:Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;
const/16 v5, 0x8
invoke-virtual {v0, p1, v1, v2, v5}, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->readUnsignedVarint(Lcom/google/android/exoplayer2/extractor/ExtractorInput;ZZI)J
move-result-wide v5
iput-wide v5, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
.line 12
iput v4, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
.line 13
:cond_5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
iget v5, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementId:I
invoke-interface {v0, v5}, Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;->getElementType(I)I
move-result v0
if-eqz v0, :cond_f
if-eq v0, v2, :cond_e
const-wide/16 v5, 0x8
if-eq v0, v4, :cond_c
const/4 v4, 0x3
if-eq v0, v4, :cond_a
if-eq v0, v3, :cond_9
const/4 v3, 0x5
if-ne v0, v3, :cond_8
.line 14
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
const-wide/16 v7, 0x4
cmp-long v0, v3, v7
if-eqz v0, :cond_7
cmp-long v0, v3, v5
if-nez v0, :cond_6
goto :goto_2
.line 15
:cond_6
new-instance p1, Lcom/google/android/exoplayer2/ParserException;
const-string v0, "Invalid float size: "
invoke-static {v0}, Landroid/support/v4/media/d;->a(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw p1
.line 16
:cond_7
:goto_2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
iget v5, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementId:I
long-to-int v3, v3
invoke-direct {p0, p1, v3}, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->readFloat(Lcom/google/android/exoplayer2/extractor/ExtractorInput;I)D
move-result-wide v3
invoke-interface {v0, v5, v3, v4}, Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;->floatElement(ID)V
.line 17
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
return v2
.line 18
:cond_8
new-instance p1, Lcom/google/android/exoplayer2/ParserException;
const-string v1, "Invalid element type "
invoke-static {v1, v0}, Landroid/support/v4/media/b;->a(Ljava/lang/String;I)Ljava/lang/String;
move-result-object v0
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw p1
.line 19
:cond_9
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
iget v3, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementId:I
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
long-to-int v4, v4
invoke-interface {v0, v3, v4, p1}, Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;->binaryElement(IILcom/google/android/exoplayer2/extractor/ExtractorInput;)V
.line 20
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
return v2
.line 21
:cond_a
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
const-wide/32 v5, 0x7fffffff
cmp-long v0, v3, v5
if-gtz v0, :cond_b
.line 22
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
iget v5, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementId:I
long-to-int v3, v3
invoke-direct {p0, p1, v3}, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->readString(Lcom/google/android/exoplayer2/extractor/ExtractorInput;I)Ljava/lang/String;
move-result-object p1
invoke-interface {v0, v5, p1}, Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;->stringElement(ILjava/lang/String;)V
.line 23
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
return v2
.line 24
:cond_b
new-instance p1, Lcom/google/android/exoplayer2/ParserException;
const-string v0, "String element size: "
invoke-static {v0}, Landroid/support/v4/media/d;->a(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw p1
.line 25
:cond_c
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
cmp-long v0, v3, v5
if-gtz v0, :cond_d
.line 26
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
iget v5, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementId:I
long-to-int v3, v3
invoke-direct {p0, p1, v3}, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->readInteger(Lcom/google/android/exoplayer2/extractor/ExtractorInput;I)J
move-result-wide v3
invoke-interface {v0, v5, v3, v4}, Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;->integerElement(IJ)V
.line 27
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
return v2
.line 28
:cond_d
new-instance p1, Lcom/google/android/exoplayer2/ParserException;
const-string v0, "Invalid integer size: "
invoke-static {v0}, Landroid/support/v4/media/d;->a(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
invoke-virtual {v0, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw p1
.line 29
:cond_e
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v5
.line 30
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
add-long/2addr v3, v5
.line 31
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->masterElementsStack:Ljava/util/Stack;
new-instance v0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;
iget v7, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementId:I
const/4 v8, 0x0
invoke-direct {v0, v7, v3, v4, v8}, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$MasterElement;-><init>(IJLcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader$1;)V
invoke-virtual {p1, v0}, Ljava/util/Stack;->add(Ljava/lang/Object;)Z
.line 32
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->output:Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
iget v4, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementId:I
iget-wide v7, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
invoke-interface/range {v3 .. v8}, Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;->startMasterElement(IJJ)V
.line 33
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
return v2
.line 34
:cond_f
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementContentSize:J
long-to-int v0, v3
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
.line 35
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
goto/16 :goto_1
.end method
.method public reset()V
.locals 1
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->elementState:I
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->masterElementsStack:Ljava/util/Stack;
invoke-virtual {v0}, Ljava/util/Stack;->clear()V
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/DefaultEbmlReader;->varintReader:Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->reset()V
return-void
.end method
@@ -0,0 +1,34 @@
.class interface abstract Lcom/google/android/exoplayer2/extractor/mkv/EbmlReader;
.super Ljava/lang/Object;
.source "EbmlReader.java"
# static fields
.field public static final TYPE_BINARY:I = 0x4
.field public static final TYPE_FLOAT:I = 0x5
.field public static final TYPE_MASTER:I = 0x1
.field public static final TYPE_STRING:I = 0x3
.field public static final TYPE_UNKNOWN:I = 0x0
.field public static final TYPE_UNSIGNED_INT:I = 0x2
# virtual methods
.method public abstract init(Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;)V
.end method
.method public abstract read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract reset()V
.end method
@@ -0,0 +1,60 @@
.class interface abstract Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
.super Ljava/lang/Object;
.source "EbmlReaderOutput.java"
# virtual methods
.method public abstract binaryElement(IILcom/google/android/exoplayer2/extractor/ExtractorInput;)V
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract endMasterElement(I)V
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.end method
.method public abstract floatElement(ID)V
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.end method
.method public abstract getElementType(I)I
.end method
.method public abstract integerElement(IJ)V
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.end method
.method public abstract isLevel1Element(I)Z
.end method
.method public abstract startMasterElement(IJJ)V
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.end method
.method public abstract stringElement(ILjava/lang/String;)V
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.end method
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$1;
.super Ljava/lang/Object;
.source "MatroskaExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 3
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 1
new-instance v1, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
@@ -0,0 +1,21 @@
.class public interface abstract annotation Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$Flags;
.super Ljava/lang/Object;
.source "MatroskaExtractor.java"
# interfaces
.implements Ljava/lang/annotation/Annotation;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x2609
name = "Flags"
.end annotation
.annotation runtime Ljava/lang/annotation/Retention;
value = .enum Ljava/lang/annotation/RetentionPolicy;->SOURCE:Ljava/lang/annotation/RetentionPolicy;
.end annotation
@@ -0,0 +1,174 @@
.class final Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;
.super Ljava/lang/Object;
.source "MatroskaExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/mkv/EbmlReaderOutput;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x11
name = "InnerEbmlReaderOutput"
.end annotation
# instance fields
.field public final synthetic this$0:Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
# direct methods
.method private constructor <init>(Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;)V
.locals 0
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;->this$0:Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public synthetic constructor <init>(Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$1;)V
.locals 0
.line 2
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;-><init>(Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;)V
return-void
.end method
# virtual methods
.method public binaryElement(IILcom/google/android/exoplayer2/extractor/ExtractorInput;)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;->this$0:Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
invoke-virtual {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;->binaryElement(IILcom/google/android/exoplayer2/extractor/ExtractorInput;)V
return-void
.end method
.method public endMasterElement(I)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;->this$0:Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
invoke-virtual {v0, p1}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;->endMasterElement(I)V
return-void
.end method
.method public floatElement(ID)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;->this$0:Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
invoke-virtual {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;->floatElement(ID)V
return-void
.end method
.method public getElementType(I)I
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;->this$0:Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
invoke-virtual {v0, p1}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;->getElementType(I)I
move-result p1
return p1
.end method
.method public integerElement(IJ)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;->this$0:Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
invoke-virtual {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;->integerElement(IJ)V
return-void
.end method
.method public isLevel1Element(I)Z
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;->this$0:Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
invoke-virtual {v0, p1}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;->isLevel1Element(I)Z
move-result p1
return p1
.end method
.method public startMasterElement(IJJ)V
.locals 6
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;->this$0:Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
move v1, p1
move-wide v2, p2
move-wide v4, p4
invoke-virtual/range {v0 .. v5}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;->startMasterElement(IJJ)V
return-void
.end method
.method public stringElement(ILjava/lang/String;)V
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ParserException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor$InnerEbmlReaderOutput;->this$0:Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;
invoke-virtual {v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/mkv/MatroskaExtractor;->stringElement(ILjava/lang/String;)V
return-void
.end method
@@ -0,0 +1,352 @@
.class final Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;
.super Ljava/lang/Object;
.source "Sniffer.java"
# static fields
.field private static final ID_EBML:I = 0x1a45dfa3
.field private static final SEARCH_LENGTH:I = 0x400
# instance fields
.field private peekLength:I
.field private final scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
# direct methods
.method public constructor <init>()V
.locals 2
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0x8
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-void
.end method
.method private readUint(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
.locals 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v1, 0x0
const/4 v2, 0x1
invoke-interface {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
aget-byte v0, v0, v1
and-int/lit16 v0, v0, 0xff
if-nez v0, :cond_0
const-wide/high16 v0, -0x8000000000000000L
return-wide v0
:cond_0
const/16 v3, 0x80
move v4, v1
:goto_0
and-int v5, v0, v3
if-nez v5, :cond_1
shr-int/lit8 v3, v3, 0x1
add-int/lit8 v4, v4, 0x1
goto :goto_0
:cond_1
not-int v3, v3
and-int/2addr v0, v3
.line 3
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v3, v3, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v3, v2, v4}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
:goto_1
if-ge v1, v4, :cond_2
shl-int/lit8 p1, v0, 0x8
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
add-int/lit8 v1, v1, 0x1
aget-byte v0, v0, v1
and-int/lit16 v0, v0, 0xff
add-int/2addr v0, p1
goto :goto_1
.line 5
:cond_2
iget p1, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->peekLength:I
add-int/2addr v4, v2
add-int/2addr v4, p1
iput v4, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->peekLength:I
int-to-long v0, v0
return-wide v0
.end method
# virtual methods
.method public sniff(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 13
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getLength()J
move-result-wide v0
const-wide/16 v2, -0x1
cmp-long v2, v0, v2
const-wide/16 v3, 0x400
if-eqz v2, :cond_1
cmp-long v5, v0, v3
if-lez v5, :cond_0
goto :goto_0
:cond_0
move-wide v3, v0
:cond_1
:goto_0
long-to-int v3, v3
.line 2
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v4, v4, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v5, 0x0
const/4 v6, 0x4
invoke-interface {p1, v4, v5, v6}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 3
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v7
.line 4
iput v6, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->peekLength:I
:goto_1
const-wide/32 v9, 0x1a45dfa3
cmp-long v4, v7, v9
const/4 v6, 0x1
if-eqz v4, :cond_3
.line 5
iget v4, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->peekLength:I
add-int/2addr v4, v6
iput v4, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->peekLength:I
if-ne v4, v3, :cond_2
return v5
.line 6
:cond_2
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v4, v4, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v4, v5, v6}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
const/16 v4, 0x8
shl-long v6, v7, v4
const-wide/16 v8, -0x100
and-long/2addr v6, v8
.line 7
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v4, v4, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
aget-byte v4, v4, v5
and-int/lit16 v4, v4, 0xff
int-to-long v8, v4
or-long v7, v6, v8
goto :goto_1
.line 8
:cond_3
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->readUint(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
move-result-wide v3
.line 9
iget v7, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->peekLength:I
int-to-long v7, v7
const-wide/high16 v9, -0x8000000000000000L
cmp-long v11, v3, v9
if-eqz v11, :cond_9
if-eqz v2, :cond_4
add-long v11, v7, v3
cmp-long v0, v11, v0
if-ltz v0, :cond_4
goto :goto_4
.line 10
:cond_4
:goto_2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->peekLength:I
int-to-long v1, v0
add-long v11, v7, v3
cmp-long v1, v1, v11
if-gez v1, :cond_8
.line 11
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->readUint(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
move-result-wide v0
cmp-long v0, v0, v9
if-nez v0, :cond_5
return v5
.line 12
:cond_5
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->readUint(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
move-result-wide v0
const-wide/16 v11, 0x0
cmp-long v2, v0, v11
if-ltz v2, :cond_7
const-wide/32 v11, 0x7fffffff
cmp-long v11, v0, v11
if-lez v11, :cond_6
goto :goto_3
:cond_6
if-eqz v2, :cond_4
long-to-int v2, v0
.line 13
invoke-interface {p1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
.line 14
iget v2, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->peekLength:I
int-to-long v11, v2
add-long/2addr v11, v0
long-to-int v0, v11
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/Sniffer;->peekLength:I
goto :goto_2
:cond_7
:goto_3
return v5
:cond_8
int-to-long v0, v0
cmp-long p1, v0, v11
if-nez p1, :cond_9
move v5, v6
:cond_9
:goto_4
return v5
.end method
@@ -0,0 +1,290 @@
.class final Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;
.super Ljava/lang/Object;
.source "VarintReader.java"
# static fields
.field private static final STATE_BEGIN_READING:I = 0x0
.field private static final STATE_READ_CONTENTS:I = 0x1
.field private static final VARINT_LENGTH_MASKS:[J
# instance fields
.field private length:I
.field private final scratch:[B
.field private state:I
# direct methods
.method public static constructor <clinit>()V
.locals 1
const/16 v0, 0x8
new-array v0, v0, [J
.line 1
fill-array-data v0, :array_0
sput-object v0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->VARINT_LENGTH_MASKS:[J
return-void
:array_0
.array-data 8
0x80
0x40
0x20
0x10
0x8
0x4
0x2
0x1
.end array-data
.end method
.method public constructor <init>()V
.locals 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/16 v0, 0x8
new-array v0, v0, [B
.line 2
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->scratch:[B
return-void
.end method
.method public static assembleVarint([BIZ)J
.locals 6
const/4 v0, 0x0
.line 1
aget-byte v0, p0, v0
int-to-long v0, v0
const-wide/16 v2, 0xff
and-long/2addr v0, v2
if-eqz p2, :cond_0
.line 2
sget-object p2, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->VARINT_LENGTH_MASKS:[J
add-int/lit8 v4, p1, -0x1
aget-wide v4, p2, v4
not-long v4, v4
and-long/2addr v0, v4
:cond_0
const/4 p2, 0x1
:goto_0
if-ge p2, p1, :cond_1
const/16 v4, 0x8
shl-long/2addr v0, v4
.line 3
aget-byte v4, p0, p2
int-to-long v4, v4
and-long/2addr v4, v2
or-long/2addr v0, v4
add-int/lit8 p2, p2, 0x1
goto :goto_0
:cond_1
return-wide v0
.end method
.method public static parseUnsignedVarintLength(I)I
.locals 6
const/4 v0, 0x0
.line 1
:goto_0
sget-object v1, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->VARINT_LENGTH_MASKS:[J
array-length v2, v1
if-ge v0, v2, :cond_1
.line 2
aget-wide v2, v1, v0
int-to-long v4, p0
and-long v1, v2, v4
const-wide/16 v3, 0x0
cmp-long v1, v1, v3
if-eqz v1, :cond_0
add-int/lit8 v0, v0, 0x1
goto :goto_1
:cond_0
add-int/lit8 v0, v0, 0x1
goto :goto_0
:cond_1
const/4 v0, -0x1
:goto_1
return v0
.end method
# virtual methods
.method public getLastLength()I
.locals 1
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->length:I
return v0
.end method
.method public readUnsignedVarint(Lcom/google/android/exoplayer2/extractor/ExtractorInput;ZZI)J
.locals 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->state:I
const/4 v1, 0x0
const/4 v2, 0x1
if-nez v0, :cond_2
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->scratch:[B
invoke-interface {p1, v0, v1, v2, p2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BIIZ)Z
move-result p2
if-nez p2, :cond_0
const-wide/16 p1, -0x1
return-wide p1
.line 3
:cond_0
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->scratch:[B
aget-byte p2, p2, v1
and-int/lit16 p2, p2, 0xff
.line 4
invoke-static {p2}, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->parseUnsignedVarintLength(I)I
move-result p2
iput p2, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->length:I
const/4 v0, -0x1
if-eq p2, v0, :cond_1
.line 5
iput v2, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->state:I
goto :goto_0
.line 6
:cond_1
new-instance p1, Ljava/lang/IllegalStateException;
const-string p2, "No valid varint length mask found"
invoke-direct {p1, p2}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p1
.line 7
:cond_2
:goto_0
iget p2, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->length:I
if-le p2, p4, :cond_3
.line 8
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->state:I
const-wide/16 p1, -0x2
return-wide p1
:cond_3
if-eq p2, v2, :cond_4
.line 9
iget-object p4, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->scratch:[B
sub-int/2addr p2, v2
invoke-interface {p1, p4, v2, p2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BII)V
.line 10
:cond_4
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->state:I
.line 11
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->scratch:[B
iget p2, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->length:I
invoke-static {p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->assembleVarint([BIZ)J
move-result-wide p1
return-wide p1
.end method
.method public reset()V
.locals 1
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->state:I
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mkv/VarintReader;->length:I
return-void
.end method
@@ -0,0 +1,163 @@
.class final Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;
.super Ljava/lang/Object;
.source "ConstantBitrateSeeker.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor$Seeker;
# static fields
.field private static final BITS_PER_BYTE:I = 0x8
# instance fields
.field private final bitrate:I
.field private final durationUs:J
.field private final firstFramePosition:J
# direct methods
.method public constructor <init>(JIJ)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->firstFramePosition:J
.line 3
iput p3, p0, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->bitrate:I
const-wide/16 p1, -0x1
cmp-long p1, p4, p1
if-nez p1, :cond_0
const-wide p1, -0x7fffffffffffffffL # -4.9E-324
goto :goto_0
.line 4
:cond_0
invoke-virtual {p0, p4, p5}, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->getTimeUs(J)J
move-result-wide p1
:goto_0
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->durationUs:J
return-void
.end method
# virtual methods
.method public getDurationUs()J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->durationUs:J
return-wide v0
.end method
.method public getPosition(J)J
.locals 6
.line 1
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->durationUs:J
const-wide v0, -0x7fffffffffffffffL # -4.9E-324
cmp-long v0, v4, v0
if-nez v0, :cond_0
const-wide/16 p1, 0x0
return-wide p1
:cond_0
const-wide/16 v2, 0x0
move-wide v0, p1
.line 2
invoke-static/range {v0 .. v5}, Lcom/google/android/exoplayer2/util/Util;->constrainValue(JJJ)J
move-result-wide p1
.line 3
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->firstFramePosition:J
iget v2, p0, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->bitrate:I
int-to-long v2, v2
mul-long/2addr p1, v2
const-wide/32 v2, 0x7a1200
div-long/2addr p1, v2
add-long/2addr p1, v0
return-wide p1
.end method
.method public getTimeUs(J)J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->firstFramePosition:J
sub-long/2addr p1, v0
const-wide/16 v0, 0x0
invoke-static {v0, v1, p1, p2}, Ljava/lang/Math;->max(JJ)J
move-result-wide p1
const-wide/32 v0, 0xf4240
mul-long/2addr p1, v0
const-wide/16 v0, 0x8
mul-long/2addr p1, v0
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->bitrate:I
int-to-long v0, v0
div-long/2addr p1, v0
return-wide p1
.end method
.method public isSeekable()Z
.locals 4
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/ConstantBitrateSeeker;->durationUs:J
const-wide v2, -0x7fffffffffffffffL # -4.9E-324
cmp-long v0, v0, v2
if-eqz v0, :cond_0
const/4 v0, 0x1
goto :goto_0
:cond_0
const/4 v0, 0x0
:goto_0
return v0
.end method
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor$1;
.super Ljava/lang/Object;
.source "Mp3Extractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 3
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 1
new-instance v1, Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
@@ -0,0 +1,21 @@
.class public interface abstract annotation Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor$Flags;
.super Ljava/lang/Object;
.source "Mp3Extractor.java"
# interfaces
.implements Ljava/lang/annotation/Annotation;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x2609
name = "Flags"
.end annotation
.annotation runtime Ljava/lang/annotation/Retention;
value = .enum Ljava/lang/annotation/RetentionPolicy;->SOURCE:Ljava/lang/annotation/RetentionPolicy;
.end annotation
@@ -0,0 +1,22 @@
.class interface abstract Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor$Seeker;
.super Ljava/lang/Object;
.source "Mp3Extractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/SeekMap;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x609
name = "Seeker"
.end annotation
# virtual methods
.method public abstract getTimeUs(J)J
.end method
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,319 @@
.class final Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;
.super Ljava/lang/Object;
.source "VbriSeeker.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor$Seeker;
# instance fields
.field private final durationUs:J
.field private final positions:[J
.field private final timesUs:[J
# direct methods
.method private constructor <init>([J[JJ)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;->timesUs:[J
.line 3
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;->positions:[J
.line 4
iput-wide p3, p0, Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;->durationUs:J
return-void
.end method
.method public static create(Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;Lcom/google/android/exoplayer2/util/ParsableByteArray;JJ)Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;
.locals 18
move-object/from16 v0, p0
move-object/from16 v1, p1
move-wide/from16 v2, p4
const/16 v4, 0xa
.line 1
invoke-virtual {v1, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 2
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v4
const/4 v5, 0x0
if-gtz v4, :cond_0
return-object v5
.line 3
:cond_0
iget v6, v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->sampleRate:I
int-to-long v7, v4
const-wide/32 v9, 0xf4240
const/16 v4, 0x7d00
if-lt v6, v4, :cond_1
const/16 v4, 0x480
goto :goto_0
:cond_1
const/16 v4, 0x240
:goto_0
int-to-long v11, v4
mul-long/2addr v9, v11
int-to-long v11, v6
.line 4
invoke-static/range {v7 .. v12}, Lcom/google/android/exoplayer2/util/Util;->scaleLargeTimestamp(JJJ)J
move-result-wide v6
.line 5
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v4
.line 6
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v8
.line 7
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v9
const/4 v10, 0x2
.line 8
invoke-virtual {v1, v10}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 9
iget v0, v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->frameSize:I
int-to-long v11, v0
add-long v11, p2, v11
add-int/lit8 v0, v4, 0x1
.line 10
new-array v13, v0, [J
.line 11
new-array v14, v0, [J
const-wide/16 v15, 0x0
const/16 v17, 0x0
.line 12
aput-wide v15, v13, v17
.line 13
aput-wide v11, v14, v17
const/4 v15, 0x1
move v5, v15
:goto_1
if-ge v5, v0, :cond_7
if-eq v9, v15, :cond_5
if-eq v9, v10, :cond_4
const/4 v10, 0x3
if-eq v9, v10, :cond_3
const/4 v10, 0x4
if-eq v9, v10, :cond_2
const/4 v10, 0x0
return-object v10
:cond_2
const/4 v10, 0x0
.line 14
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v16
goto :goto_2
:cond_3
const/4 v10, 0x0
.line 15
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v16
goto :goto_2
:cond_4
const/4 v10, 0x0
.line 16
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v16
goto :goto_2
:cond_5
const/4 v10, 0x0
.line 17
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v16
:goto_2
mul-int v10, v16, v8
move/from16 p2, v0
int-to-long v0, v10
add-long/2addr v11, v0
int-to-long v0, v5
mul-long/2addr v0, v6
move v10, v8
move/from16 v16, v9
int-to-long v8, v4
.line 18
div-long/2addr v0, v8
aput-wide v0, v13, v5
const-wide/16 v0, -0x1
cmp-long v0, v2, v0
if-nez v0, :cond_6
move-wide v0, v11
goto :goto_3
.line 19
:cond_6
invoke-static {v2, v3, v11, v12}, Ljava/lang/Math;->min(JJ)J
move-result-wide v0
:goto_3
aput-wide v0, v14, v5
add-int/lit8 v5, v5, 0x1
move-object/from16 v1, p1
move/from16 v0, p2
move v8, v10
move/from16 v9, v16
const/4 v10, 0x2
goto :goto_1
.line 20
:cond_7
new-instance v0, Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;
invoke-direct {v0, v13, v14, v6, v7}, Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;-><init>([J[JJ)V
return-object v0
.end method
# virtual methods
.method public getDurationUs()J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;->durationUs:J
return-wide v0
.end method
.method public getPosition(J)J
.locals 3
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;->positions:[J
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;->timesUs:[J
const/4 v2, 0x1
invoke-static {v1, p1, p2, v2, v2}, Lcom/google/android/exoplayer2/util/Util;->binarySearchFloor([JJZZ)I
move-result p1
aget-wide p1, v0, p1
return-wide p1
.end method
.method public getTimeUs(J)J
.locals 3
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;->timesUs:[J
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/mp3/VbriSeeker;->positions:[J
const/4 v2, 0x1
invoke-static {v1, p1, p2, v2, v2}, Lcom/google/android/exoplayer2/util/Util;->binarySearchFloor([JJZZ)I
move-result p1
aget-wide p1, v0, p1
return-wide p1
.end method
.method public isSeekable()Z
.locals 1
const/4 v0, 0x1
return v0
.end method
@@ -0,0 +1,520 @@
.class final Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;
.super Ljava/lang/Object;
.source "XingSeeker.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/mp3/Mp3Extractor$Seeker;
# instance fields
.field private final durationUs:J
.field private final firstFramePosition:J
.field private final headerSize:I
.field private final inputLength:J
.field private final sizeBytes:J
.field private final tableOfContents:[J
# direct methods
.method private constructor <init>(JJJ)V
.locals 11
const/4 v7, 0x0
const-wide/16 v8, 0x0
const/4 v10, 0x0
move-object v0, p0
move-wide v1, p1
move-wide v3, p3
move-wide/from16 v5, p5
.line 1
invoke-direct/range {v0 .. v10}, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;-><init>(JJJ[JJI)V
return-void
.end method
.method private constructor <init>(JJJ[JJI)V
.locals 0
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 3
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->firstFramePosition:J
.line 4
iput-wide p3, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->durationUs:J
.line 5
iput-wide p5, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->inputLength:J
.line 6
iput-object p7, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->tableOfContents:[J
.line 7
iput-wide p8, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->sizeBytes:J
.line 8
iput p10, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->headerSize:I
return-void
.end method
.method public static create(Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;Lcom/google/android/exoplayer2/util/ParsableByteArray;JJ)Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;
.locals 16
move-object/from16 v0, p0
.line 1
iget v1, v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->samplesPerFrame:I
.line 2
iget v2, v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->sampleRate:I
.line 3
iget v3, v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->frameSize:I
int-to-long v3, v3
add-long v6, p2, v3
.line 4
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v3
and-int/lit8 v4, v3, 0x1
const/4 v5, 0x1
if-ne v4, v5, :cond_3
.line 5
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v4
if-nez v4, :cond_0
goto :goto_1
:cond_0
int-to-long v8, v4
int-to-long v10, v1
const-wide/32 v12, 0xf4240
mul-long/2addr v10, v12
int-to-long v12, v2
.line 6
invoke-static/range {v8 .. v13}, Lcom/google/android/exoplayer2/util/Util;->scaleLargeTimestamp(JJJ)J
move-result-wide v8
const/4 v1, 0x6
and-int/lit8 v2, v3, 0x6
if-eq v2, v1, :cond_1
.line 7
new-instance v0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;
move-object v5, v0
move-wide/from16 v10, p4
invoke-direct/range {v5 .. v11}, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;-><init>(JJJ)V
return-object v0
.line 8
:cond_1
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v1
int-to-long v13, v1
move-object/from16 v1, p1
.line 9
invoke-virtual {v1, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
const/16 v2, 0x63
new-array v12, v2, [J
const/4 v3, 0x0
:goto_0
if-ge v3, v2, :cond_2
.line 10
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v4
int-to-long v4, v4
aput-wide v4, v12, v3
add-int/lit8 v3, v3, 0x1
goto :goto_0
.line 11
:cond_2
new-instance v1, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;
iget v15, v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->frameSize:I
move-object v5, v1
move-wide/from16 v10, p4
invoke-direct/range {v5 .. v15}, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;-><init>(JJJ[JJI)V
return-object v1
:cond_3
:goto_1
const/4 v0, 0x0
return-object v0
.end method
.method private getTimeUsForTocPosition(I)J
.locals 4
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->durationUs:J
int-to-long v2, p1
mul-long/2addr v0, v2
const-wide/16 v2, 0x64
div-long/2addr v0, v2
return-wide v0
.end method
# virtual methods
.method public getDurationUs()J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->durationUs:J
return-wide v0
.end method
.method public getPosition(J)J
.locals 7
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->isSeekable()Z
move-result v0
if-nez v0, :cond_0
.line 2
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->firstFramePosition:J
return-wide p1
:cond_0
long-to-float p1, p1
const/high16 p2, 0x42c80000 # 100.0f
mul-float/2addr p1, p2
.line 3
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->durationUs:J
long-to-float v0, v0
div-float/2addr p1, v0
const/4 v0, 0x0
cmpg-float v1, p1, v0
const/high16 v2, 0x43800000 # 256.0f
if-gtz v1, :cond_1
goto :goto_1
:cond_1
cmpl-float p2, p1, p2
if-ltz p2, :cond_2
move v0, v2
goto :goto_1
:cond_2
float-to-int p2, p1
if-nez p2, :cond_3
goto :goto_0
.line 4
:cond_3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->tableOfContents:[J
add-int/lit8 v1, p2, -0x1
aget-wide v3, v0, v1
long-to-float v0, v3
:goto_0
const/16 v1, 0x63
if-ge p2, v1, :cond_4
.line 5
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->tableOfContents:[J
aget-wide v2, v1, p2
long-to-float v2, v2
:cond_4
sub-float/2addr v2, v0
int-to-float p2, p2
invoke-static {p1, p2, v2, v0}, Landroidx/appcompat/graphics/drawable/d;->a(FFFF)F
move-result v0
:goto_1
const-wide/high16 p1, 0x3f70000000000000L # 0.00390625
float-to-double v0, v0
mul-double/2addr v0, p1
.line 6
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->sizeBytes:J
long-to-double p1, p1
mul-double/2addr v0, p1
invoke-static {v0, v1}, Ljava/lang/Math;->round(D)J
move-result-wide p1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->firstFramePosition:J
add-long/2addr p1, v0
.line 7
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->inputLength:J
const-wide/16 v4, -0x1
cmp-long v4, v2, v4
const-wide/16 v5, 0x1
if-eqz v4, :cond_5
sub-long/2addr v2, v5
goto :goto_2
:cond_5
iget v2, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->headerSize:I
int-to-long v2, v2
sub-long/2addr v0, v2
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->sizeBytes:J
add-long/2addr v0, v2
sub-long v2, v0, v5
.line 8
:goto_2
invoke-static {p1, p2, v2, v3}, Ljava/lang/Math;->min(JJ)J
move-result-wide p1
return-wide p1
.end method
.method public getTimeUs(J)J
.locals 11
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->isSeekable()Z
move-result v0
const-wide/16 v1, 0x0
if-eqz v0, :cond_4
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->firstFramePosition:J
cmp-long v0, p1, v3
if-gez v0, :cond_0
goto :goto_3
:cond_0
const-wide/high16 v5, 0x4070000000000000L # 256.0
sub-long/2addr p1, v3
long-to-double p1, p1
mul-double/2addr p1, v5
.line 2
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->sizeBytes:J
long-to-double v3, v3
div-double/2addr p1, v3
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->tableOfContents:[J
double-to-long v3, p1
const/4 v5, 0x0
const/4 v6, 0x1
.line 4
invoke-static {v0, v3, v4, v6, v5}, Lcom/google/android/exoplayer2/util/Util;->binarySearchFloor([JJZZ)I
move-result v0
add-int/2addr v0, v6
.line 5
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->getTimeUsForTocPosition(I)J
move-result-wide v3
if-nez v0, :cond_1
move-wide v7, v1
goto :goto_0
.line 6
:cond_1
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->tableOfContents:[J
add-int/lit8 v7, v0, -0x1
aget-wide v7, v5, v7
:goto_0
const/16 v5, 0x63
if-ne v0, v5, :cond_2
const-wide/16 v9, 0x100
goto :goto_1
.line 7
:cond_2
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->tableOfContents:[J
aget-wide v9, v5, v0
:goto_1
add-int/2addr v0, v6
.line 8
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->getTimeUsForTocPosition(I)J
move-result-wide v5
cmp-long v0, v9, v7
if-nez v0, :cond_3
goto :goto_2
:cond_3
sub-long/2addr v5, v3
long-to-double v0, v5
long-to-double v5, v7
sub-double/2addr p1, v5
mul-double/2addr p1, v0
sub-long/2addr v9, v7
long-to-double v0, v9
div-double/2addr p1, v0
double-to-long v1, p1
:goto_2
add-long/2addr v3, v1
return-wide v3
:cond_4
:goto_3
return-wide v1
.end method
.method public isSeekable()Z
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp3/XingSeeker;->tableOfContents:[J
if-eqz v0, :cond_0
const/4 v0, 0x1
goto :goto_0
:cond_0
const/4 v0, 0x0
:goto_0
return v0
.end method
@@ -0,0 +1,307 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.super Lcom/google/android/exoplayer2/extractor/mp4/Atom;
.source "Atom.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/Atom;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "ContainerAtom"
.end annotation
# instance fields
.field public final containerChildren:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;",
">;"
}
.end annotation
.end field
.field public final endPosition:J
.field public final leafChildren:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;",
">;"
}
.end annotation
.end field
# direct methods
.method public constructor <init>(IJ)V
.locals 0
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/mp4/Atom;-><init>(I)V
.line 2
iput-wide p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->endPosition:J
.line 3
new-instance p1, Ljava/util/ArrayList;
invoke-direct {p1}, Ljava/util/ArrayList;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->leafChildren:Ljava/util/List;
.line 4
new-instance p1, Ljava/util/ArrayList;
invoke-direct {p1}, Ljava/util/ArrayList;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->containerChildren:Ljava/util/List;
return-void
.end method
# virtual methods
.method public add(Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;)V
.locals 1
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->containerChildren:Ljava/util/List;
invoke-interface {v0, p1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
return-void
.end method
.method public add(Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;)V
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->leafChildren:Ljava/util/List;
invoke-interface {v0, p1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
return-void
.end method
.method public getChildAtomOfTypeCount(I)I
.locals 5
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->leafChildren:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->size()I
move-result v0
const/4 v1, 0x0
move v2, v1
move v3, v2
:goto_0
if-ge v2, v0, :cond_1
.line 2
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->leafChildren:Ljava/util/List;
invoke-interface {v4, v2}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v4
check-cast v4, Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
.line 3
iget v4, v4, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->type:I
if-ne v4, p1, :cond_0
add-int/lit8 v3, v3, 0x1
:cond_0
add-int/lit8 v2, v2, 0x1
goto :goto_0
.line 4
:cond_1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->containerChildren:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->size()I
move-result v0
:goto_1
if-ge v1, v0, :cond_3
.line 5
iget-object v2, p0, 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 6
iget v2, v2, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->type:I
if-ne v2, p1, :cond_2
add-int/lit8 v3, v3, 0x1
:cond_2
add-int/lit8 v1, v1, 0x1
goto :goto_1
:cond_3
return v3
.end method
.method public getContainerAtomOfType(I)Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;
.locals 4
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->containerChildren:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->size()I
move-result v0
const/4 v1, 0x0
:goto_0
if-ge v1, v0, :cond_1
.line 2
iget-object v2, p0, 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 3
iget v3, v2, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->type:I
if-ne v3, p1, :cond_0
return-object v2
:cond_0
add-int/lit8 v1, v1, 0x1
goto :goto_0
:cond_1
const/4 p1, 0x0
return-object p1
.end method
.method public getLeafAtomOfType(I)Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
.locals 4
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->leafChildren:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->size()I
move-result v0
const/4 v1, 0x0
:goto_0
if-ge v1, v0, :cond_1
.line 2
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->leafChildren: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$LeafAtom;
.line 3
iget v3, v2, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->type:I
if-ne v3, p1, :cond_0
return-object v2
:cond_0
add-int/lit8 v1, v1, 0x1
goto :goto_0
:cond_1
const/4 p1, 0x0
return-object p1
.end method
.method public toString()Ljava/lang/String;
.locals 2
.line 1
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
iget v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->type:I
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->getAtomTypeString(I)Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v1, " leaves: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->leafChildren:Ljava/util/List;
.line 2
invoke-interface {v1}, Ljava/util/List;->toArray()[Ljava/lang/Object;
move-result-object v1
invoke-static {v1}, Ljava/util/Arrays;->toString([Ljava/lang/Object;)Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v1, " containers: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$ContainerAtom;->containerChildren:Ljava/util/List;
.line 3
invoke-interface {v1}, Ljava/util/List;->toArray()[Ljava/lang/Object;
move-result-object v1
invoke-static {v1}, Ljava/util/Arrays;->toString([Ljava/lang/Object;)Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
.end method
@@ -0,0 +1,32 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;
.super Lcom/google/android/exoplayer2/extractor/mp4/Atom;
.source "Atom.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/Atom;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "LeafAtom"
.end annotation
# instance fields
.field public final data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
# direct methods
.method public constructor <init>(ILcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 0
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/mp4/Atom;-><init>(I)V
.line 2
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;->data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-void
.end method
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,200 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;
.super Ljava/lang/Object;
.source "AtomParsers.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "ChunkIterator"
.end annotation
# instance fields
.field private final chunkOffsets:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final chunkOffsetsAreLongs:Z
.field public index:I
.field public final length:I
.field private nextSamplesPerChunkChangeIndex:I
.field public numSamples:I
.field public offset:J
.field private remainingSamplesPerChunkChanges:I
.field private final stsc:Lcom/google/android/exoplayer2/util/ParsableByteArray;
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/util/ParsableByteArray;Lcom/google/android/exoplayer2/util/ParsableByteArray;Z)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->stsc:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 3
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->chunkOffsets:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 4
iput-boolean p3, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->chunkOffsetsAreLongs:Z
const/16 p3, 0xc
.line 5
invoke-virtual {p2, p3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 6
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result p2
iput p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->length:I
.line 7
invoke-virtual {p1, p3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 8
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result p2
iput p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->remainingSamplesPerChunkChanges:I
.line 9
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result p1
const/4 p2, 0x1
if-ne p1, p2, :cond_0
goto :goto_0
:cond_0
const/4 p2, 0x0
:goto_0
const-string p1, "first_chunk must be 1"
invoke-static {p2, p1}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(ZLjava/lang/Object;)V
const/4 p1, -0x1
.line 10
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->index:I
return-void
.end method
# virtual methods
.method public moveNext()Z
.locals 4
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->index:I
const/4 v1, 0x1
add-int/2addr v0, v1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->index:I
iget v2, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->length:I
if-ne v0, v2, :cond_0
const/4 v0, 0x0
return v0
.line 2
:cond_0
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->chunkOffsetsAreLongs:Z
if-eqz v0, :cond_1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->chunkOffsets:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedLongToLong()J
move-result-wide v2
goto :goto_0
:cond_1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->chunkOffsets:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 3
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v2
:goto_0
iput-wide v2, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->offset:J
.line 4
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->index:I
iget v2, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->nextSamplesPerChunkChangeIndex:I
if-ne v0, v2, :cond_3
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->stsc:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->numSamples:I
.line 6
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->stsc:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v2, 0x4
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 7
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->remainingSamplesPerChunkChanges:I
sub-int/2addr v0, v1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->remainingSamplesPerChunkChanges:I
if-lez v0, :cond_2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->stsc:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 8
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v0
sub-int/2addr v0, v1
goto :goto_1
:cond_2
const/4 v0, -0x1
:goto_1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$ChunkIterator;->nextSamplesPerChunkChangeIndex:I
:cond_3
return v1
.end method
@@ -0,0 +1,25 @@
.class interface abstract Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$SampleSizeBox;
.super Ljava/lang/Object;
.source "AtomParsers.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x609
name = "SampleSizeBox"
.end annotation
# virtual methods
.method public abstract getSampleCount()I
.end method
.method public abstract isFixedSampleSize()Z
.end method
.method public abstract readNextSampleSize()I
.end method
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StsdData;
.super Ljava/lang/Object;
.source "AtomParsers.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "StsdData"
.end annotation
# static fields
.field public static final STSD_HEADER_SIZE:I = 0x8
# instance fields
.field public format:Lcom/google/android/exoplayer2/Format;
.field public nalUnitLengthFieldLength:I
.field public requiredSampleTransformation:I
.field public final trackEncryptionBoxes:[Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;
# direct methods
.method public constructor <init>(I)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-array p1, p1, [Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StsdData;->trackEncryptionBoxes:[Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;
const/4 p1, 0x0
.line 3
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StsdData;->requiredSampleTransformation:I
return-void
.end method
@@ -0,0 +1,108 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StszSampleSizeBox;
.super Ljava/lang/Object;
.source "AtomParsers.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$SampleSizeBox;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "StszSampleSizeBox"
.end annotation
# instance fields
.field private final data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final fixedSampleSize:I
.field private final sampleCount:I
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;)V
.locals 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iget-object p1, p1, Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;->data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StszSampleSizeBox;->data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v0, 0xc
.line 3
invoke-virtual {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 4
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StszSampleSizeBox;->fixedSampleSize:I
.line 5
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result p1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StszSampleSizeBox;->sampleCount:I
return-void
.end method
# virtual methods
.method public getSampleCount()I
.locals 1
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StszSampleSizeBox;->sampleCount:I
return v0
.end method
.method public isFixedSampleSize()Z
.locals 1
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StszSampleSizeBox;->fixedSampleSize:I
if-eqz v0, :cond_0
const/4 v0, 0x1
goto :goto_0
:cond_0
const/4 v0, 0x0
:goto_0
return v0
.end method
.method public readNextSampleSize()I
.locals 1
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StszSampleSizeBox;->fixedSampleSize:I
if-nez v0, :cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$StszSampleSizeBox;->data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v0
:cond_0
return v0
.end method
@@ -0,0 +1,154 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;
.super Ljava/lang/Object;
.source "AtomParsers.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$SampleSizeBox;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "Stz2SampleSizeBox"
.end annotation
# instance fields
.field private currentByte:I
.field private final data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final fieldSize:I
.field private final sampleCount:I
.field private sampleIndex:I
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;)V
.locals 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iget-object p1, p1, Lcom/google/android/exoplayer2/extractor/mp4/Atom$LeafAtom;->data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v0, 0xc
.line 3
invoke-virtual {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 4
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v0
and-int/lit16 v0, v0, 0xff
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->fieldSize:I
.line 5
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result p1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->sampleCount:I
return-void
.end method
# virtual methods
.method public getSampleCount()I
.locals 1
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->sampleCount:I
return v0
.end method
.method public isFixedSampleSize()Z
.locals 1
const/4 v0, 0x0
return v0
.end method
.method public readNextSampleSize()I
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->fieldSize:I
const/16 v1, 0x8
if-ne v0, v1, :cond_0
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
return v0
:cond_0
const/16 v1, 0x10
if-ne v0, v1, :cond_1
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v0
return v0
.line 4
:cond_1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->sampleIndex:I
add-int/lit8 v1, v0, 0x1
iput v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->sampleIndex:I
rem-int/lit8 v0, v0, 0x2
if-nez v0, :cond_2
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->data:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->currentByte:I
and-int/lit16 v0, v0, 0xf0
shr-int/lit8 v0, v0, 0x4
return v0
.line 6
:cond_2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$Stz2SampleSizeBox;->currentByte:I
and-int/lit8 v0, v0, 0xf
return v0
.end method
@@ -0,0 +1,69 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$TkhdData;
.super Ljava/lang/Object;
.source "AtomParsers.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "TkhdData"
.end annotation
# instance fields
.field private final duration:J
.field private final id:I
.field private final rotationDegrees:I
# direct methods
.method public constructor <init>(IJI)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$TkhdData;->id:I
.line 3
iput-wide p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$TkhdData;->duration:J
.line 4
iput p4, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$TkhdData;->rotationDegrees:I
return-void
.end method
.method public static synthetic access$000(Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$TkhdData;)J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$TkhdData;->duration:J
return-wide v0
.end method
.method public static synthetic access$100(Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$TkhdData;)I
.locals 0
.line 1
iget p0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$TkhdData;->id:I
return p0
.end method
.method public static synthetic access$200(Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$TkhdData;)I
.locals 0
.line 1
iget p0, p0, Lcom/google/android/exoplayer2/extractor/mp4/AtomParsers$TkhdData;->rotationDegrees:I
return p0
.end method
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,36 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/DefaultSampleValues;
.super Ljava/lang/Object;
.source "DefaultSampleValues.java"
# instance fields
.field public final duration:I
.field public final flags:I
.field public final sampleDescriptionIndex:I
.field public final size:I
# direct methods
.method public constructor <init>(IIII)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/DefaultSampleValues;->sampleDescriptionIndex:I
.line 3
iput p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/DefaultSampleValues;->duration:I
.line 4
iput p3, p0, Lcom/google/android/exoplayer2/extractor/mp4/DefaultSampleValues;->size:I
.line 5
iput p4, p0, Lcom/google/android/exoplayer2/extractor/mp4/DefaultSampleValues;->flags:I
return-void
.end method
@@ -0,0 +1,14 @@
.class synthetic Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$1;
.super Ljava/lang/Object;
.source "FixedSampleSizeRechunker.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1009
name = null
.end annotation
@@ -0,0 +1,61 @@
.class public final Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;
.super Ljava/lang/Object;
.source "FixedSampleSizeRechunker.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "Results"
.end annotation
# instance fields
.field public final flags:[I
.field public final maximumSize:I
.field public final offsets:[J
.field public final sizes:[I
.field public final timestamps:[J
# direct methods
.method private constructor <init>([J[II[J[I)V
.locals 0
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 3
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;->offsets:[J
.line 4
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;->sizes:[I
.line 5
iput p3, p0, Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;->maximumSize:I
.line 6
iput-object p4, p0, Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;->timestamps:[J
.line 7
iput-object p5, p0, Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;->flags:[I
return-void
.end method
.method public synthetic constructor <init>([J[II[J[ILcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$1;)V
.locals 0
.line 1
invoke-direct/range {p0 .. p5}, Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;-><init>([J[II[J[I)V
return-void
.end method
@@ -0,0 +1,160 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker;
.super Ljava/lang/Object;
.source "FixedSampleSizeRechunker.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;
}
.end annotation
# static fields
.field private static final MAX_SAMPLE_SIZE:I = 0x2000
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static rechunk(I[J[IJ)Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;
.locals 16
move-object/from16 v0, p2
const/16 v1, 0x2000
.line 1
div-int v1, v1, p0
.line 2
array-length v2, v0
const/4 v3, 0x0
move v4, v3
move v5, v4
:goto_0
if-ge v4, v2, :cond_0
aget v6, v0, v4
.line 3
invoke-static {v6, v1}, Lcom/google/android/exoplayer2/util/Util;->ceilDivide(II)I
move-result v6
add-int/2addr v5, v6
add-int/lit8 v4, v4, 0x1
goto :goto_0
.line 4
:cond_0
new-array v7, v5, [J
.line 5
new-array v8, v5, [I
.line 6
new-array v10, v5, [J
.line 7
new-array v11, v5, [I
move v2, v3
move v4, v2
move v9, v4
.line 8
:goto_1
array-length v5, v0
if-ge v3, v5, :cond_2
.line 9
aget v5, v0, v3
.line 10
aget-wide v12, p1, v3
:goto_2
if-lez v5, :cond_1
.line 11
invoke-static {v1, v5}, Ljava/lang/Math;->min(II)I
move-result v6
.line 12
aput-wide v12, v7, v4
mul-int v14, p0, v6
.line 13
aput v14, v8, v4
.line 14
aget v14, v8, v4
invoke-static {v9, v14}, Ljava/lang/Math;->max(II)I
move-result v9
int-to-long v14, v2
mul-long v14, v14, p3
.line 15
aput-wide v14, v10, v4
const/4 v14, 0x1
.line 16
aput v14, v11, v4
.line 17
aget v14, v8, v4
int-to-long v14, v14
add-long/2addr v12, v14
add-int/2addr v2, v6
sub-int/2addr v5, v6
add-int/lit8 v4, v4, 0x1
goto :goto_2
:cond_1
add-int/lit8 v3, v3, 0x1
goto :goto_1
.line 18
:cond_2
new-instance v0, Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;
const/4 v12, 0x0
move-object v6, v0
invoke-direct/range {v6 .. v12}, Lcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$Results;-><init>([J[II[J[ILcom/google/android/exoplayer2/extractor/mp4/FixedSampleSizeRechunker$1;)V
return-object v0
.end method
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$1;
.super Ljava/lang/Object;
.source "FragmentedMp4Extractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 3
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 1
new-instance v1, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
@@ -0,0 +1,21 @@
.class public interface abstract annotation Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$Flags;
.super Ljava/lang/Object;
.source "FragmentedMp4Extractor.java"
# interfaces
.implements Ljava/lang/annotation/Annotation;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x2609
name = "Flags"
.end annotation
.annotation runtime Ljava/lang/annotation/Retention;
value = .enum Ljava/lang/annotation/RetentionPolicy;->SOURCE:Ljava/lang/annotation/RetentionPolicy;
.end annotation
@@ -0,0 +1,37 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$MetadataSampleInfo;
.super Ljava/lang/Object;
.source "FragmentedMp4Extractor.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "MetadataSampleInfo"
.end annotation
# instance fields
.field public final presentationTimeDeltaUs:J
.field public final size:I
# direct methods
.method public constructor <init>(JI)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$MetadataSampleInfo;->presentationTimeDeltaUs:J
.line 3
iput p3, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$MetadataSampleInfo;->size:I
return-void
.end method
@@ -0,0 +1,128 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;
.super Ljava/lang/Object;
.source "FragmentedMp4Extractor.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "TrackBundle"
.end annotation
# instance fields
.field public currentSampleInTrackRun:I
.field public currentSampleIndex:I
.field public currentTrackRunIndex:I
.field public defaultSampleValues:Lcom/google/android/exoplayer2/extractor/mp4/DefaultSampleValues;
.field public final fragment:Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;
.field public final output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field public track:Lcom/google/android/exoplayer2/extractor/mp4/Track;
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
.locals 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance v0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->fragment:Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;
.line 3
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
return-void
.end method
# virtual methods
.method public init(Lcom/google/android/exoplayer2/extractor/mp4/Track;Lcom/google/android/exoplayer2/extractor/mp4/DefaultSampleValues;)V
.locals 1
.line 1
invoke-static {p1}, Lcom/google/android/exoplayer2/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/extractor/mp4/Track;
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->track:Lcom/google/android/exoplayer2/extractor/mp4/Track;
.line 2
invoke-static {p2}, Lcom/google/android/exoplayer2/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p2
check-cast p2, Lcom/google/android/exoplayer2/extractor/mp4/DefaultSampleValues;
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->defaultSampleValues:Lcom/google/android/exoplayer2/extractor/mp4/DefaultSampleValues;
.line 3
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object p1, p1, Lcom/google/android/exoplayer2/extractor/mp4/Track;->format:Lcom/google/android/exoplayer2/Format;
invoke-interface {p2, p1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 4
invoke-virtual {p0}, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->reset()V
return-void
.end method
.method public reset()V
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->fragment:Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->reset()V
const/4 v0, 0x0
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->currentSampleIndex:I
.line 3
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->currentTrackRunIndex:I
.line 4
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->currentSampleInTrackRun:I
return-void
.end method
.method public updateDrmInitData(Lcom/google/android/exoplayer2/drm/DrmInitData;)V
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor$TrackBundle;->track:Lcom/google/android/exoplayer2/extractor/mp4/Track;
iget-object v1, v1, Lcom/google/android/exoplayer2/extractor/mp4/Track;->format:Lcom/google/android/exoplayer2/Format;
invoke-virtual {v1, p1}, Lcom/google/android/exoplayer2/Format;->copyWithDrmInitData(Lcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object p1
invoke-interface {v0, p1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
return-void
.end method
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$1;
.super Ljava/lang/Object;
.source "Mp4Extractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 3
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 1
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
@@ -0,0 +1,44 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;
.super Ljava/lang/Object;
.source "Mp4Extractor.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "Mp4Track"
.end annotation
# instance fields
.field public sampleIndex:I
.field public final sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.field public final track:Lcom/google/android/exoplayer2/extractor/mp4/Track;
.field public final trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/mp4/Track;Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->track:Lcom/google/android/exoplayer2/extractor/mp4/Track;
.line 3
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->sampleTable:Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.line 4
iput-object p3, p0, Lcom/google/android/exoplayer2/extractor/mp4/Mp4Extractor$Mp4Track;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
return-void
.end method
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,308 @@
.class public final Lcom/google/android/exoplayer2/extractor/mp4/PsshAtomUtil;
.super Ljava/lang/Object;
.source "PsshAtomUtil.java"
# static fields
.field private static final TAG:Ljava/lang/String; = "PsshAtomUtil"
# direct methods
.method private constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static buildPsshAtom(Ljava/util/UUID;[B)[B
.locals 4
.line 1
array-length v0, p1
add-int/lit8 v0, v0, 0x20
.line 2
invoke-static {v0}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;
move-result-object v1
.line 3
invoke-virtual {v1, v0}, Ljava/nio/ByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;
.line 4
sget v0, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_pssh:I
invoke-virtual {v1, v0}, Ljava/nio/ByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;
const/4 v0, 0x0
.line 5
invoke-virtual {v1, v0}, Ljava/nio/ByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;
.line 6
invoke-virtual {p0}, Ljava/util/UUID;->getMostSignificantBits()J
move-result-wide v2
invoke-virtual {v1, v2, v3}, Ljava/nio/ByteBuffer;->putLong(J)Ljava/nio/ByteBuffer;
.line 7
invoke-virtual {p0}, Ljava/util/UUID;->getLeastSignificantBits()J
move-result-wide v2
invoke-virtual {v1, v2, v3}, Ljava/nio/ByteBuffer;->putLong(J)Ljava/nio/ByteBuffer;
.line 8
array-length p0, p1
invoke-virtual {v1, p0}, Ljava/nio/ByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;
.line 9
invoke-virtual {v1, p1}, Ljava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;
.line 10
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->array()[B
move-result-object p0
return-object p0
.end method
.method private static parsePsshAtom([B)Landroid/util/Pair;
.locals 9
.annotation system Ldalvik/annotation/Signature;
value = {
"([B)",
"Landroid/util/Pair<",
"Ljava/util/UUID;",
"[B>;"
}
.end annotation
.line 1
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-direct {v0, p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([B)V
.line 2
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result p0
const/4 v1, 0x0
const/16 v2, 0x20
if-ge p0, v2, :cond_0
return-object v1
:cond_0
const/4 p0, 0x0
.line 3
invoke-virtual {v0, p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 4
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v2
.line 5
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v3
add-int/lit8 v3, v3, 0x4
if-eq v2, v3, :cond_1
return-object v1
.line 6
:cond_1
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v2
.line 7
sget v3, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_pssh:I
if-eq v2, v3, :cond_2
return-object v1
.line 8
:cond_2
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v2
invoke-static {v2}, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->parseFullAtomVersion(I)I
move-result v2
const/4 v3, 0x1
if-le v2, v3, :cond_3
const-string p0, "Unsupported pssh version: "
const-string v0, "PsshAtomUtil"
.line 9
invoke-static {p0, v2, v0}, Ld1/e;->a(Ljava/lang/String;ILjava/lang/String;)V
return-object v1
.line 10
:cond_3
new-instance v4, Ljava/util/UUID;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLong()J
move-result-wide v5
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLong()J
move-result-wide v7
invoke-direct {v4, v5, v6, v7, v8}, Ljava/util/UUID;-><init>(JJ)V
if-ne v2, v3, :cond_4
.line 11
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v2
mul-int/lit8 v2, v2, 0x10
.line 12
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 13
:cond_4
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v2
.line 14
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v3
if-eq v2, v3, :cond_5
return-object v1
.line 15
:cond_5
new-array v1, v2, [B
.line 16
invoke-virtual {v0, v1, p0, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 17
invoke-static {v4, v1}, Landroid/util/Pair;->create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;
move-result-object p0
return-object p0
.end method
.method public static parseSchemeSpecificData([BLjava/util/UUID;)[B
.locals 3
.line 1
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/mp4/PsshAtomUtil;->parsePsshAtom([B)Landroid/util/Pair;
move-result-object p0
const/4 v0, 0x0
if-nez p0, :cond_0
return-object v0
:cond_0
if-eqz p1, :cond_1
.line 2
iget-object v1, p0, Landroid/util/Pair;->first:Ljava/lang/Object;
invoke-virtual {p1, v1}, Ljava/util/UUID;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_1
.line 3
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "UUID mismatch. Expected: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
const-string p1, ", got: "
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object p0, p0, Landroid/util/Pair;->first:Ljava/lang/Object;
invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
const-string p0, "."
invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p0
const-string p1, "PsshAtomUtil"
invoke-static {p1, p0}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
return-object v0
.line 4
:cond_1
iget-object p0, p0, Landroid/util/Pair;->second:Ljava/lang/Object;
check-cast p0, [B
return-object p0
.end method
.method public static parseUuid([B)Ljava/util/UUID;
.locals 0
.line 1
invoke-static {p0}, Lcom/google/android/exoplayer2/extractor/mp4/PsshAtomUtil;->parsePsshAtom([B)Landroid/util/Pair;
move-result-object p0
if-nez p0, :cond_0
const/4 p0, 0x0
return-object p0
.line 2
:cond_0
iget-object p0, p0, Landroid/util/Pair;->first:Ljava/lang/Object;
check-cast p0, Ljava/util/UUID;
return-object p0
.end method
@@ -0,0 +1,632 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/Sniffer;
.super Ljava/lang/Object;
.source "Sniffer.java"
# static fields
.field private static final COMPATIBLE_BRANDS:[I
.field private static final SEARCH_LENGTH:I = 0x1000
# direct methods
.method public static constructor <clinit>()V
.locals 3
const/16 v0, 0x18
new-array v0, v0, [I
const-string v1, "isom"
.line 1
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/4 v2, 0x0
aput v1, v0, v2
const-string v1, "iso2"
.line 2
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/4 v2, 0x1
aput v1, v0, v2
const-string v1, "iso3"
.line 3
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/4 v2, 0x2
aput v1, v0, v2
const-string v1, "iso4"
.line 4
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/4 v2, 0x3
aput v1, v0, v2
const-string v1, "iso5"
.line 5
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/4 v2, 0x4
aput v1, v0, v2
const-string v1, "iso6"
.line 6
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/4 v2, 0x5
aput v1, v0, v2
const-string v1, "avc1"
.line 7
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/4 v2, 0x6
aput v1, v0, v2
const-string v1, "hvc1"
.line 8
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/4 v2, 0x7
aput v1, v0, v2
const-string v1, "hev1"
.line 9
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0x8
aput v1, v0, v2
const-string v1, "mp41"
.line 10
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0x9
aput v1, v0, v2
const-string v1, "mp42"
.line 11
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0xa
aput v1, v0, v2
const-string v1, "3g2a"
.line 12
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0xb
aput v1, v0, v2
const-string v1, "3g2b"
.line 13
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0xc
aput v1, v0, v2
const-string v1, "3gr6"
.line 14
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0xd
aput v1, v0, v2
const-string v1, "3gs6"
.line 15
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0xe
aput v1, v0, v2
const-string v1, "3ge6"
.line 16
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0xf
aput v1, v0, v2
const-string v1, "3gg6"
.line 17
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0x10
aput v1, v0, v2
const-string v1, "M4V "
.line 18
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0x11
aput v1, v0, v2
const-string v1, "M4A "
.line 19
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0x12
aput v1, v0, v2
const-string v1, "f4v "
.line 20
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0x13
aput v1, v0, v2
const-string v1, "kddi"
.line 21
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0x14
aput v1, v0, v2
const-string v1, "M4VP"
.line 22
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0x15
aput v1, v0, v2
const-string v1, "qt "
.line 23
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0x16
aput v1, v0, v2
const-string v1, "MSNV"
.line 24
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/16 v2, 0x17
aput v1, v0, v2
sput-object v0, Lcom/google/android/exoplayer2/extractor/mp4/Sniffer;->COMPATIBLE_BRANDS:[I
return-void
.end method
.method private constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private static isCompatibleBrand(I)Z
.locals 6
ushr-int/lit8 v0, p0, 0x8
const-string v1, "3gp"
.line 1
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v1
const/4 v2, 0x1
if-ne v0, v1, :cond_0
return v2
.line 2
:cond_0
sget-object v0, Lcom/google/android/exoplayer2/extractor/mp4/Sniffer;->COMPATIBLE_BRANDS:[I
array-length v1, v0
const/4 v3, 0x0
move v4, v3
:goto_0
if-ge v4, v1, :cond_2
aget v5, v0, v4
if-ne v5, p0, :cond_1
return v2
:cond_1
add-int/lit8 v4, v4, 0x1
goto :goto_0
:cond_2
return v3
.end method
.method public static sniffFragmented(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const/4 v0, 0x1
.line 1
invoke-static {p0, v0}, Lcom/google/android/exoplayer2/extractor/mp4/Sniffer;->sniffInternal(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Z)Z
move-result p0
return p0
.end method
.method private static sniffInternal(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Z)Z
.locals 15
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
move-object v0, p0
.line 1
invoke-interface {p0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getLength()J
move-result-wide v1
const-wide/16 v3, -0x1
cmp-long v3, v1, v3
const-wide/16 v4, 0x1000
if-eqz v3, :cond_0
cmp-long v3, v1, v4
if-lez v3, :cond_1
:cond_0
move-wide v1, v4
:cond_1
long-to-int v1, v1
.line 2
new-instance v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v3, 0x40
invoke-direct {v2, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
const/4 v3, 0x0
move v4, v3
move v5, v4
:cond_2
:goto_0
if-ge v4, v1, :cond_e
const/16 v7, 0x8
.line 3
invoke-virtual {v2, v7}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 4
iget-object v8, v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p0, v8, v3, v7}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 5
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v8
.line 6
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v10
const-wide/16 v11, 0x1
cmp-long v11, v8, v11
const/16 v12, 0x10
if-nez v11, :cond_3
.line 7
iget-object v8, v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p0, v8, v7, v7}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 8
invoke-virtual {v2, v12}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
.line 9
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedLongToLong()J
move-result-wide v8
goto :goto_1
:cond_3
move v12, v7
:goto_1
int-to-long v13, v12
cmp-long v11, v8, v13
if-gez v11, :cond_4
return v3
:cond_4
add-int/2addr v4, v12
.line 10
sget v11, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_moov:I
if-ne v10, v11, :cond_5
goto :goto_0
.line 11
:cond_5
sget v11, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_moof:I
if-eq v10, v11, :cond_d
sget v11, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_mvex:I
if-ne v10, v11, :cond_6
goto :goto_5
:cond_6
int-to-long v11, v4
add-long/2addr v11, v8
sub-long/2addr v11, v13
int-to-long v6, v1
cmp-long v6, v11, v6
if-ltz v6, :cond_7
goto :goto_6
:cond_7
sub-long/2addr v8, v13
long-to-int v6, v8
add-int/2addr v4, v6
.line 12
sget v7, Lcom/google/android/exoplayer2/extractor/mp4/Atom;->TYPE_ftyp:I
if-ne v10, v7, :cond_c
const/16 v7, 0x8
if-ge v6, v7, :cond_8
return v3
.line 13
:cond_8
invoke-virtual {v2, v6}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 14
iget-object v7, v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p0, v7, v3, v6}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 15
div-int/lit8 v6, v6, 0x4
move v7, v3
:goto_2
if-ge v7, v6, :cond_b
const/4 v8, 0x1
if-ne v7, v8, :cond_9
const/4 v9, 0x4
.line 16
invoke-virtual {v2, v9}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
goto :goto_3
.line 17
:cond_9
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v9
invoke-static {v9}, Lcom/google/android/exoplayer2/extractor/mp4/Sniffer;->isCompatibleBrand(I)Z
move-result v9
if-eqz v9, :cond_a
move v5, v8
goto :goto_4
:cond_a
:goto_3
add-int/lit8 v7, v7, 0x1
goto :goto_2
:cond_b
:goto_4
if-nez v5, :cond_2
return v3
:cond_c
if-eqz v6, :cond_2
.line 18
invoke-interface {p0, v6}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
goto/16 :goto_0
:cond_d
:goto_5
const/4 v8, 0x1
move v0, v8
goto :goto_7
:cond_e
:goto_6
const/4 v8, 0x1
move v0, v3
:goto_7
if-eqz v5, :cond_f
move/from16 v1, p1
if-ne v1, v0, :cond_f
move v3, v8
:cond_f
return v3
.end method
.method public static sniffUnfragmented(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const/4 v0, 0x0
.line 1
invoke-static {p0, v0}, Lcom/google/android/exoplayer2/extractor/mp4/Sniffer;->sniffInternal(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Z)Z
move-result p0
return p0
.end method
@@ -0,0 +1,21 @@
.class public interface abstract annotation Lcom/google/android/exoplayer2/extractor/mp4/Track$Transformation;
.super Ljava/lang/Object;
.source "Track.java"
# interfaces
.implements Ljava/lang/annotation/Annotation;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/mp4/Track;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x2609
name = "Transformation"
.end annotation
.annotation runtime Ljava/lang/annotation/Retention;
value = .enum Ljava/lang/annotation/RetentionPolicy;->SOURCE:Ljava/lang/annotation/RetentionPolicy;
.end annotation
@@ -0,0 +1,85 @@
.class public final Lcom/google/android/exoplayer2/extractor/mp4/Track;
.super Ljava/lang/Object;
.source "Track.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/mp4/Track$Transformation;
}
.end annotation
# static fields
.field public static final TRANSFORMATION_CEA608_CDAT:I = 0x1
.field public static final TRANSFORMATION_NONE:I
# instance fields
.field public final durationUs:J
.field public final editListDurations:[J
.field public final editListMediaTimes:[J
.field public final format:Lcom/google/android/exoplayer2/Format;
.field public final id:I
.field public final movieTimescale:J
.field public final nalUnitLengthFieldLength:I
.field public final sampleDescriptionEncryptionBoxes:[Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;
.field public final sampleTransformation:I
.field public final timescale:J
.field public final type:I
# direct methods
.method public constructor <init>(IIJJJLcom/google/android/exoplayer2/Format;I[Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;I[J[J)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->id:I
.line 3
iput p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->type:I
.line 4
iput-wide p3, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->timescale:J
.line 5
iput-wide p5, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->movieTimescale:J
.line 6
iput-wide p7, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->durationUs:J
.line 7
iput-object p9, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->format:Lcom/google/android/exoplayer2/Format;
.line 8
iput p10, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->sampleTransformation:I
.line 9
iput-object p11, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->sampleDescriptionEncryptionBoxes:[Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;
.line 10
iput p12, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->nalUnitLengthFieldLength:I
.line 11
iput-object p13, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->editListDurations:[J
.line 12
iput-object p14, p0, Lcom/google/android/exoplayer2/extractor/mp4/Track;->editListMediaTimes:[J
return-void
.end method
@@ -0,0 +1,31 @@
.class public final Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;
.super Ljava/lang/Object;
.source "TrackEncryptionBox.java"
# instance fields
.field public final initializationVectorSize:I
.field public final isEncrypted:Z
.field public final keyId:[B
# direct methods
.method public constructor <init>(ZI[B)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;->isEncrypted:Z
.line 3
iput p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;->initializationVectorSize:I
.line 4
iput-object p3, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;->keyId:[B
return-void
.end method
@@ -0,0 +1,269 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;
.super Ljava/lang/Object;
.source "TrackFragment.java"
# instance fields
.field public atomPosition:J
.field public auxiliaryDataPosition:J
.field public dataPosition:J
.field public definesEncryptionData:Z
.field public header:Lcom/google/android/exoplayer2/extractor/mp4/DefaultSampleValues;
.field public nextFragmentDecodeTime:J
.field public sampleCompositionTimeOffsetTable:[I
.field public sampleCount:I
.field public sampleDecodingTimeTable:[J
.field public sampleEncryptionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field public sampleEncryptionDataLength:I
.field public sampleEncryptionDataNeedsFill:Z
.field public sampleHasSubsampleEncryptionTable:[Z
.field public sampleIsSyncFrameTable:[Z
.field public sampleSizeTable:[I
.field public trackEncryptionBox:Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;
.field public trunCount:I
.field public trunDataPosition:[J
.field public trunLength:[I
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public fillEncryptionData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)V
.locals 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionDataLength:I
const/4 v2, 0x0
invoke-interface {p1, v0, v2, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BII)V
.line 2
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 3
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionDataNeedsFill:Z
return-void
.end method
.method public fillEncryptionData(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 3
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionDataLength:I
const/4 v2, 0x0
invoke-virtual {p1, v0, v2, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 5
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 6
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionDataNeedsFill:Z
return-void
.end method
.method public getSamplePresentationTime(I)J
.locals 5
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleDecodingTimeTable:[J
aget-wide v1, v0, p1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleCompositionTimeOffsetTable:[I
aget p1, v0, p1
int-to-long v3, p1
add-long/2addr v1, v3
return-wide v1
.end method
.method public initEncryptionData(I)V
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
if-eqz v0, :cond_0
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v0
if-ge v0, p1, :cond_1
.line 2
:cond_0
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-direct {v0, p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 3
:cond_1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionDataLength:I
const/4 p1, 0x1
.line 4
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->definesEncryptionData:Z
.line 5
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionDataNeedsFill:Z
return-void
.end method
.method public initTables(II)V
.locals 1
.line 1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->trunCount:I
.line 2
iput p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleCount:I
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->trunLength:[I
if-eqz v0, :cond_0
array-length v0, v0
if-ge v0, p1, :cond_1
.line 4
:cond_0
new-array v0, p1, [J
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->trunDataPosition:[J
.line 5
new-array p1, p1, [I
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->trunLength:[I
.line 6
:cond_1
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleSizeTable:[I
if-eqz p1, :cond_2
array-length p1, p1
if-ge p1, p2, :cond_3
:cond_2
mul-int/lit8 p2, p2, 0x7d
.line 7
div-int/lit8 p2, p2, 0x64
.line 8
new-array p1, p2, [I
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleSizeTable:[I
.line 9
new-array p1, p2, [I
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleCompositionTimeOffsetTable:[I
.line 10
new-array p1, p2, [J
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleDecodingTimeTable:[J
.line 11
new-array p1, p2, [Z
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleIsSyncFrameTable:[Z
.line 12
new-array p1, p2, [Z
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleHasSubsampleEncryptionTable:[Z
:cond_3
return-void
.end method
.method public reset()V
.locals 3
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->trunCount:I
const-wide/16 v1, 0x0
.line 2
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->nextFragmentDecodeTime:J
.line 3
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->definesEncryptionData:Z
.line 4
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->sampleEncryptionDataNeedsFill:Z
const/4 v0, 0x0
.line 5
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackFragment;->trackEncryptionBox:Lcom/google/android/exoplayer2/extractor/mp4/TrackEncryptionBox;
return-void
.end method
@@ -0,0 +1,186 @@
.class final Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;
.super Ljava/lang/Object;
.source "TrackSampleTable.java"
# instance fields
.field public final flags:[I
.field public final maximumSize:I
.field public final offsets:[J
.field public final sampleCount:I
.field public final sizes:[I
.field public final timestampsUs:[J
# direct methods
.method public constructor <init>([J[II[J[I)V
.locals 4
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
array-length v0, p2
array-length v1, p4
const/4 v2, 0x1
const/4 v3, 0x0
if-ne v0, v1, :cond_0
move v0, v2
goto :goto_0
:cond_0
move v0, v3
:goto_0
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkArgument(Z)V
.line 3
array-length v0, p1
array-length v1, p4
if-ne v0, v1, :cond_1
move v0, v2
goto :goto_1
:cond_1
move v0, v3
:goto_1
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkArgument(Z)V
.line 4
array-length v0, p5
array-length v1, p4
if-ne v0, v1, :cond_2
goto :goto_2
:cond_2
move v2, v3
:goto_2
invoke-static {v2}, Lcom/google/android/exoplayer2/util/Assertions;->checkArgument(Z)V
.line 5
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->offsets:[J
.line 6
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->sizes:[I
.line 7
iput p3, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->maximumSize:I
.line 8
iput-object p4, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->timestampsUs:[J
.line 9
iput-object p5, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->flags:[I
.line 10
array-length p1, p1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->sampleCount:I
return-void
.end method
# virtual methods
.method public getIndexOfEarlierOrEqualSynchronizationSample(J)I
.locals 3
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->timestampsUs:[J
const/4 v1, 0x1
const/4 v2, 0x0
invoke-static {v0, p1, p2, v1, v2}, Lcom/google/android/exoplayer2/util/Util;->binarySearchFloor([JJZZ)I
move-result p1
:goto_0
if-ltz p1, :cond_1
.line 2
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->flags:[I
aget p2, p2, p1
and-int/2addr p2, v1
if-eqz p2, :cond_0
return p1
:cond_0
add-int/lit8 p1, p1, -0x1
goto :goto_0
:cond_1
const/4 p1, -0x1
return p1
.end method
.method public getIndexOfLaterOrEqualSynchronizationSample(J)I
.locals 3
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->timestampsUs:[J
const/4 v1, 0x1
const/4 v2, 0x0
invoke-static {v0, p1, p2, v1, v2}, Lcom/google/android/exoplayer2/util/Util;->binarySearchCeil([JJZZ)I
move-result p1
.line 2
:goto_0
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->timestampsUs:[J
array-length p2, p2
if-ge p1, p2, :cond_1
.line 3
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/mp4/TrackSampleTable;->flags:[I
aget p2, p2, p1
and-int/2addr p2, v1
if-eqz p2, :cond_0
return p1
:cond_0
add-int/lit8 p1, p1, 0x1
goto :goto_0
:cond_1
const/4 p1, -0x1
return p1
.end method
@@ -0,0 +1,14 @@
.class synthetic Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$1;
.super Ljava/lang/Object;
.source "DefaultOggSeeker.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1009
name = null
.end annotation
@@ -0,0 +1,122 @@
.class Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;
.super Ljava/lang/Object;
.source "DefaultOggSeeker.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/SeekMap;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1
name = "OggSeekMap"
.end annotation
# instance fields
.field public final synthetic this$0:Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
# direct methods
.method private constructor <init>(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;)V
.locals 0
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;->this$0:Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public synthetic constructor <init>(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$1;)V
.locals 0
.line 2
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;-><init>(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;)V
return-void
.end method
# virtual methods
.method public getDurationUs()J
.locals 3
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;->this$0:Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
invoke-static {v0}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->access$200(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;)Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
move-result-object v0
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;->this$0:Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->access$400(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;)J
move-result-wide v1
invoke-virtual {v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->convertGranuleToTime(J)J
move-result-wide v0
return-wide v0
.end method
.method public getPosition(J)J
.locals 8
const-wide/16 v0, 0x0
cmp-long v0, p1, v0
if-nez v0, :cond_0
.line 1
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;->this$0:Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->access$100(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;)J
move-result-wide p1
return-wide p1
.line 2
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;->this$0:Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
invoke-static {v0}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->access$200(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;)Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
move-result-object v0
invoke-virtual {v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->convertTimeToGranule(J)J
move-result-wide v4
.line 3
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;->this$0:Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->access$100(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;)J
move-result-wide v2
const-wide/16 v6, 0x7530
invoke-static/range {v1 .. v7}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->access$300(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;JJJ)J
move-result-wide p1
return-wide p1
.end method
.method public isSeekable()Z
.locals 1
const/4 v0, 0x1
return v0
.end method
@@ -0,0 +1,975 @@
.class final Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
.super Ljava/lang/Object;
.source "DefaultOggSeeker.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;
}
.end annotation
# static fields
.field private static final DEFAULT_OFFSET:I = 0x7530
.field public static final MATCH_BYTE_RANGE:I = 0x186a0
.field public static final MATCH_RANGE:I = 0x11940
.field private static final STATE_IDLE:I = 0x3
.field private static final STATE_READ_LAST_PAGE:I = 0x1
.field private static final STATE_SEEK:I = 0x2
.field private static final STATE_SEEK_TO_END:I
# instance fields
.field private end:J
.field private endGranule:J
.field private final endPosition:J
.field private final pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
.field private positionBeforeSeekToEnd:J
.field private start:J
.field private startGranule:J
.field private final startPosition:J
.field private state:I
.field private final streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.field private targetGranule:J
.field private totalGranules:J
# direct methods
.method public constructor <init>(JJLcom/google/android/exoplayer2/extractor/ogg/StreamReader;IJ)V
.locals 2
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
const-wide/16 v0, 0x0
cmp-long v0, p1, v0
const/4 v1, 0x0
if-ltz v0, :cond_0
cmp-long v0, p3, p1
if-lez v0, :cond_0
const/4 v0, 0x1
goto :goto_0
:cond_0
move v0, v1
.line 3
:goto_0
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkArgument(Z)V
.line 4
iput-object p5, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.line 5
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->startPosition:J
.line 6
iput-wide p3, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->endPosition:J
int-to-long p5, p6
sub-long/2addr p3, p1
cmp-long p1, p5, p3
if-nez p1, :cond_1
.line 7
iput-wide p7, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->totalGranules:J
const/4 p1, 0x3
.line 8
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->state:I
goto :goto_1
.line 9
:cond_1
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->state:I
:goto_1
return-void
.end method
.method public static synthetic access$100(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;)J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->startPosition:J
return-wide v0
.end method
.method public static synthetic access$200(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;)Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.locals 0
.line 1
iget-object p0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
return-object p0
.end method
.method public static synthetic access$300(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;JJJ)J
.locals 0
.line 1
invoke-direct/range {p0 .. p6}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->getEstimatedPosition(JJJ)J
move-result-wide p0
return-wide p0
.end method
.method public static synthetic access$400(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;)J
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->totalGranules:J
return-wide v0
.end method
.method private getEstimatedPosition(JJJ)J
.locals 6
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->endPosition:J
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->startPosition:J
sub-long v4, v0, v2
mul-long/2addr v4, p3
iget-wide p3, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->totalGranules:J
div-long/2addr v4, p3
sub-long/2addr v4, p5
add-long/2addr v4, p1
cmp-long p1, v4, v2
if-gez p1, :cond_0
goto :goto_0
:cond_0
move-wide v2, v4
:goto_0
cmp-long p1, v2, v0
if-ltz p1, :cond_1
const-wide/16 p1, 0x1
sub-long v2, v0, p1
:cond_1
return-wide v2
.end method
# virtual methods
.method public bridge synthetic createSeekMap()Lcom/google/android/exoplayer2/extractor/SeekMap;
.locals 1
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->createSeekMap()Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;
move-result-object v0
return-object v0
.end method
.method public createSeekMap()Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;
.locals 4
.line 2
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->totalGranules:J
const-wide/16 v2, 0x0
cmp-long v0, v0, v2
const/4 v1, 0x0
if-eqz v0, :cond_0
new-instance v0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;
invoke-direct {v0, p0, v1}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$OggSeekMap;-><init>(Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker$1;)V
move-object v1, v0
:cond_0
return-object v1
.end method
.method public getNextSeekPosition(JLcom/google/android/exoplayer2/extractor/ExtractorInput;)J
.locals 12
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->start:J
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->end:J
cmp-long v0, v0, v2
const-wide/16 v1, 0x2
if-nez v0, :cond_0
.line 2
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->startGranule:J
add-long/2addr p1, v1
neg-long p1, p1
return-wide p1
.line 3
:cond_0
invoke-interface {p3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v3
.line 4
iget-wide v5, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->end:J
invoke-virtual {p0, p3, v5, v6}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->skipToNextPage(Lcom/google/android/exoplayer2/extractor/ExtractorInput;J)Z
move-result v0
if-nez v0, :cond_2
.line 5
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->start:J
cmp-long p3, p1, v3
if-eqz p3, :cond_1
return-wide p1
.line 6
:cond_1
new-instance p1, Ljava/io/IOException;
const-string p2, "No ogg page can be found."
invoke-direct {p1, p2}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw p1
.line 7
:cond_2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
const/4 v5, 0x0
invoke-virtual {v0, p3, v5}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->populate(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Z)Z
.line 8
invoke-interface {p3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->resetPeekPosition()V
.line 9
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget-wide v5, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
sub-long/2addr p1, v5
.line 10
iget v7, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->headerSize:I
iget v0, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
add-int/2addr v7, v0
const-wide/16 v8, 0x0
cmp-long v0, p1, v8
if-ltz v0, :cond_4
const-wide/32 v8, 0x11940
cmp-long v8, p1, v8
if-lez v8, :cond_3
goto :goto_0
.line 11
:cond_3
invoke-interface {p3, v7}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
.line 12
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget-wide p1, p1, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
add-long/2addr p1, v1
neg-long p1, p1
return-wide p1
:cond_4
:goto_0
const-wide/32 v8, 0x186a0
if-gez v0, :cond_5
.line 13
iput-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->end:J
.line 14
iput-wide v5, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->endGranule:J
goto :goto_1
.line 15
:cond_5
invoke-interface {p3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v3
int-to-long v5, v7
add-long/2addr v3, v5
iput-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->start:J
.line 16
iget-object v10, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget-wide v10, v10, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
iput-wide v10, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->startGranule:J
.line 17
iget-wide v10, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->end:J
sub-long/2addr v10, v3
add-long/2addr v10, v5
cmp-long v3, v10, v8
if-gez v3, :cond_6
.line 18
invoke-interface {p3, v7}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
.line 19
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->startGranule:J
add-long/2addr p1, v1
neg-long p1, p1
return-wide p1
.line 20
:cond_6
:goto_1
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->end:J
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->start:J
sub-long/2addr v1, v3
cmp-long v1, v1, v8
if-gez v1, :cond_7
.line 21
iput-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->end:J
return-wide v3
:cond_7
if-gtz v0, :cond_8
const/4 v0, 0x2
goto :goto_2
:cond_8
const/4 v0, 0x1
:goto_2
mul-int/2addr v7, v0
int-to-long v0, v7
.line 22
invoke-interface {p3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v2
sub-long/2addr v2, v0
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->end:J
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->start:J
sub-long/2addr v0, v4
mul-long/2addr v0, p1
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->endGranule:J
iget-wide v6, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->startGranule:J
sub-long/2addr p1, v6
div-long/2addr v0, p1
add-long/2addr v0, v2
.line 23
invoke-static {v0, v1, v4, v5}, Ljava/lang/Math;->max(JJ)J
move-result-wide p1
.line 24
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->end:J
const-wide/16 v2, 0x1
sub-long/2addr v0, v2
invoke-static {p1, p2, v0, v1}, Ljava/lang/Math;->min(JJ)J
move-result-wide p1
return-wide p1
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
.locals 14
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->state:I
const/4 v1, 0x1
const/4 v2, 0x3
if-eqz v0, :cond_4
if-eq v0, v1, :cond_5
const/4 v1, 0x2
if-eq v0, v1, :cond_1
if-ne v0, v2, :cond_0
const-wide/16 v0, -0x1
return-wide v0
.line 2
:cond_0
new-instance p1, Ljava/lang/IllegalStateException;
invoke-direct {p1}, Ljava/lang/IllegalStateException;-><init>()V
throw p1
.line 3
:cond_1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->targetGranule:J
const-wide/16 v3, 0x0
cmp-long v5, v0, v3
const-wide/16 v6, 0x2
if-nez v5, :cond_2
goto :goto_0
.line 4
:cond_2
invoke-virtual {p0, v0, v1, p1}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->getNextSeekPosition(JLcom/google/android/exoplayer2/extractor/ExtractorInput;)J
move-result-wide v0
cmp-long v3, v0, v3
if-ltz v3, :cond_3
return-wide v0
.line 5
:cond_3
iget-wide v10, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->targetGranule:J
add-long/2addr v0, v6
neg-long v12, v0
move-object v8, p0
move-object v9, p1
invoke-virtual/range {v8 .. v13}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->skipToPageOfGranule(Lcom/google/android/exoplayer2/extractor/ExtractorInput;JJ)J
move-result-wide v3
.line 6
:goto_0
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->state:I
add-long/2addr v3, v6
neg-long v0, v3
return-wide v0
.line 7
:cond_4
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v3
iput-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->positionBeforeSeekToEnd:J
.line 8
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->state:I
.line 9
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->endPosition:J
const-wide/32 v5, 0xff1b
sub-long/2addr v0, v5
cmp-long v3, v0, v3
if-lez v3, :cond_5
return-wide v0
.line 10
:cond_5
invoke-virtual {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->readGranuleOfLastPage(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
move-result-wide v0
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->totalGranules:J
.line 11
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->state:I
.line 12
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->positionBeforeSeekToEnd:J
return-wide v0
.end method
.method public readGranuleOfLastPage(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
.locals 4
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
invoke-virtual {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->skipToNextPage(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->reset()V
.line 3
:goto_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget v0, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->type:I
const/4 v1, 0x4
and-int/2addr v0, v1
if-eq v0, v1, :cond_0
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v0
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->endPosition:J
cmp-long v0, v0, v2
if-gez v0, :cond_0
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
const/4 v1, 0x0
invoke-virtual {v0, p1, v1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->populate(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Z)Z
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget v1, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->headerSize:I
iget v0, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
add-int/2addr v1, v0
invoke-interface {p1, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
goto :goto_0
.line 6
:cond_0
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget-wide v0, p1, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
return-wide v0
.end method
.method public resetSeeking()V
.locals 2
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->startPosition:J
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->start:J
.line 2
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->endPosition:J
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->end:J
const-wide/16 v0, 0x0
.line 3
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->startGranule:J
.line 4
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->totalGranules:J
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->endGranule:J
return-void
.end method
.method public skipToNextPage(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)V
.locals 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->endPosition:J
invoke-virtual {p0, p1, v0, v1}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->skipToNextPage(Lcom/google/android/exoplayer2/extractor/ExtractorInput;J)Z
move-result p1
if-eqz p1, :cond_0
return-void
.line 2
:cond_0
new-instance p1, Ljava/io/EOFException;
invoke-direct {p1}, Ljava/io/EOFException;-><init>()V
throw p1
.end method
.method public skipToNextPage(Lcom/google/android/exoplayer2/extractor/ExtractorInput;J)Z
.locals 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const-wide/16 v0, 0x3
add-long/2addr p2, v0
.line 3
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->endPosition:J
invoke-static {p2, p3, v0, v1}, Ljava/lang/Math;->min(JJ)J
move-result-wide p2
const/16 v0, 0x800
new-array v1, v0, [B
.line 4
:goto_0
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v2
int-to-long v4, v0
add-long/2addr v2, v4
cmp-long v2, v2, p2
const/4 v3, 0x0
if-lez v2, :cond_0
.line 5
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v4
sub-long v4, p2, v4
long-to-int v0, v4
const/4 v2, 0x4
if-ge v0, v2, :cond_0
return v3
.line 6
:cond_0
invoke-interface {p1, v1, v3, v0, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BIIZ)Z
:goto_1
add-int/lit8 v2, v0, -0x3
if-ge v3, v2, :cond_2
.line 7
aget-byte v2, v1, v3
const/16 v4, 0x4f
if-ne v2, v4, :cond_1
add-int/lit8 v2, v3, 0x1
aget-byte v2, v1, v2
const/16 v4, 0x67
if-ne v2, v4, :cond_1
add-int/lit8 v2, v3, 0x2
aget-byte v2, v1, v2
if-ne v2, v4, :cond_1
add-int/lit8 v2, v3, 0x3
aget-byte v2, v1, v2
const/16 v4, 0x53
if-ne v2, v4, :cond_1
.line 8
invoke-interface {p1, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
const/4 p1, 0x1
return p1
:cond_1
add-int/lit8 v3, v3, 0x1
goto :goto_1
.line 9
:cond_2
invoke-interface {p1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
goto :goto_0
.end method
.method public skipToPageOfGranule(Lcom/google/android/exoplayer2/extractor/ExtractorInput;JJ)J
.locals 4
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
const/4 v1, 0x0
invoke-virtual {v0, p1, v1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->populate(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Z)Z
.line 2
:goto_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget-wide v2, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
cmp-long v2, v2, p2
if-gez v2, :cond_0
.line 3
iget p4, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->headerSize:I
iget p5, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
add-int/2addr p4, p5
invoke-interface {p1, p4}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
.line 4
iget-object p4, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget-wide v2, p4, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
.line 5
invoke-virtual {p4, p1, v1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->populate(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Z)Z
move-wide p4, v2
goto :goto_0
.line 6
:cond_0
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->resetPeekPosition()V
return-wide p4
.end method
.method public startSeek(J)J
.locals 4
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->state:I
const/4 v1, 0x2
const/4 v2, 0x3
if-eq v0, v2, :cond_1
if-ne v0, v1, :cond_0
goto :goto_0
:cond_0
const/4 v0, 0x0
goto :goto_1
:cond_1
:goto_0
const/4 v0, 0x1
:goto_1
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkArgument(Z)V
const-wide/16 v2, 0x0
cmp-long v0, p1, v2
if-nez v0, :cond_2
goto :goto_2
.line 2
:cond_2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
invoke-virtual {v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->convertTimeToGranule(J)J
move-result-wide v2
:goto_2
iput-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->targetGranule:J
.line 3
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->state:I
.line 4
invoke-virtual {p0}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->resetSeeking()V
.line 5
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;->targetGranule:J
return-wide p1
.end method
@@ -0,0 +1,256 @@
.class Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;
.super Ljava/lang/Object;
.source "FlacReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
.implements Lcom/google/android/exoplayer2/extractor/SeekMap;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1
name = "FlacOggSeeker"
.end annotation
# static fields
.field private static final METADATA_LENGTH_OFFSET:I = 0x1
.field private static final SEEK_POINT_SIZE:I = 0x12
# instance fields
.field private firstFrameOffset:J
.field private pendingSeekGranule:J
.field private seekPointGranules:[J
.field private seekPointOffsets:[J
.field public final synthetic this$0:Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;)V
.locals 2
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->this$0:Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const-wide/16 v0, -0x1
.line 2
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->firstFrameOffset:J
.line 3
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->pendingSeekGranule:J
return-void
.end method
# virtual methods
.method public createSeekMap()Lcom/google/android/exoplayer2/extractor/SeekMap;
.locals 0
return-object p0
.end method
.method public getDurationUs()J
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->this$0:Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;
invoke-static {v0}, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->access$000(Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;)Lcom/google/android/exoplayer2/util/FlacStreamInfo;
move-result-object v0
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/FlacStreamInfo;->durationUs()J
move-result-wide v0
return-wide v0
.end method
.method public getPosition(J)J
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->this$0:Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;
invoke-virtual {v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->convertTimeToGranule(J)J
move-result-wide p1
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->seekPointGranules:[J
const/4 v1, 0x1
invoke-static {v0, p1, p2, v1, v1}, Lcom/google/android/exoplayer2/util/Util;->binarySearchFloor([JJZZ)I
move-result p1
.line 3
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->firstFrameOffset:J
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->seekPointOffsets:[J
aget-wide p1, p2, p1
add-long/2addr v0, p1
return-wide v0
.end method
.method public isSeekable()Z
.locals 1
const/4 v0, 0x1
return v0
.end method
.method public parseSeekTable(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 5
const/4 v0, 0x1
.line 1
invoke-virtual {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 2
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v0
.line 3
div-int/lit8 v0, v0, 0x12
.line 4
new-array v1, v0, [J
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->seekPointGranules:[J
.line 5
new-array v1, v0, [J
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->seekPointOffsets:[J
const/4 v1, 0x0
:goto_0
if-ge v1, v0, :cond_0
.line 6
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->seekPointGranules:[J
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLong()J
move-result-wide v3
aput-wide v3, v2, v1
.line 7
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->seekPointOffsets:[J
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLong()J
move-result-wide v3
aput-wide v3, v2, v1
const/4 v2, 0x2
.line 8
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
add-int/lit8 v1, v1, 0x1
goto :goto_0
:cond_0
return-void
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
.locals 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->pendingSeekGranule:J
const-wide/16 v2, 0x0
cmp-long p1, v0, v2
const-wide/16 v2, -0x1
if-ltz p1, :cond_0
const-wide/16 v4, 0x2
add-long/2addr v0, v4
neg-long v0, v0
.line 2
iput-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->pendingSeekGranule:J
return-wide v0
:cond_0
return-wide v2
.end method
.method public setFirstFrameOffset(J)V
.locals 0
.line 1
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->firstFrameOffset:J
return-void
.end method
.method public startSeek(J)J
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->this$0:Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;
invoke-virtual {v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->convertTimeToGranule(J)J
move-result-wide p1
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->seekPointGranules:[J
const/4 v1, 0x1
invoke-static {v0, p1, p2, v1, v1}, Lcom/google/android/exoplayer2/util/Util;->binarySearchFloor([JJZZ)I
move-result v0
.line 3
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->seekPointGranules:[J
aget-wide v0, v1, v0
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->pendingSeekGranule:J
return-wide p1
.end method
@@ -0,0 +1,392 @@
.class final Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;
.super Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.source "FlacReader.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;
}
.end annotation
# static fields
.field private static final AUDIO_PACKET_TYPE:B = -0x1t
.field private static final FRAME_HEADER_SAMPLE_NUMBER_OFFSET:I = 0x4
.field private static final SEEKTABLE_PACKET_TYPE:B = 0x3t
# instance fields
.field private flacOggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;
.field private streamInfo:Lcom/google/android/exoplayer2/util/FlacStreamInfo;
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;-><init>()V
return-void
.end method
.method public static synthetic access$000(Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;)Lcom/google/android/exoplayer2/util/FlacStreamInfo;
.locals 0
.line 1
iget-object p0, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->streamInfo:Lcom/google/android/exoplayer2/util/FlacStreamInfo;
return-object p0
.end method
.method private getFlacFrameBlockSize(Lcom/google/android/exoplayer2/util/ParsableByteArray;)I
.locals 3
.line 1
iget-object v0, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v1, 0x2
aget-byte v0, v0, v1
and-int/lit16 v0, v0, 0xff
const/4 v2, 0x4
shr-int/2addr v0, v2
packed-switch v0, :pswitch_data_0
const/4 p1, -0x1
return p1
:pswitch_0
const/16 p1, 0x100
add-int/lit8 v0, v0, -0x8
:goto_0
shl-int/2addr p1, v0
return p1
.line 2
:pswitch_1
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 3
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUtf8EncodedLong()J
const/4 v1, 0x6
if-ne v0, v1, :cond_0
.line 4
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
goto :goto_1
:cond_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v0
:goto_1
const/4 v1, 0x0
.line 5
invoke-virtual {p1, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
add-int/lit8 v0, v0, 0x1
return v0
:pswitch_2
const/16 p1, 0x240
sub-int/2addr v0, v1
goto :goto_0
:pswitch_3
const/16 p1, 0xc0
return p1
:pswitch_data_0
.packed-switch 0x1
:pswitch_3
:pswitch_2
:pswitch_2
:pswitch_2
:pswitch_2
:pswitch_1
:pswitch_1
:pswitch_0
:pswitch_0
:pswitch_0
:pswitch_0
:pswitch_0
:pswitch_0
:pswitch_0
:pswitch_0
.end packed-switch
.end method
.method private static isAudioPacket([B)Z
.locals 2
const/4 v0, 0x0
.line 1
aget-byte p0, p0, v0
const/4 v1, -0x1
if-ne p0, v1, :cond_0
const/4 v0, 0x1
:cond_0
return v0
.end method
.method public static verifyBitstreamType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.locals 4
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
const/4 v1, 0x5
if-lt v0, v1, :cond_0
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
const/16 v1, 0x7f
if-ne v0, v1, :cond_0
.line 2
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v0
const-wide/32 v2, 0x464c4143
cmp-long p0, v0, v2
if-nez p0, :cond_0
const/4 p0, 0x1
goto :goto_0
:cond_0
const/4 p0, 0x0
:goto_0
return p0
.end method
# virtual methods
.method public preparePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;)J
.locals 2
.line 1
iget-object v0, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-static {v0}, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->isAudioPacket([B)Z
move-result v0
if-nez v0, :cond_0
const-wide/16 v0, -0x1
return-wide v0
.line 2
:cond_0
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->getFlacFrameBlockSize(Lcom/google/android/exoplayer2/util/ParsableByteArray;)I
move-result p1
int-to-long v0, p1
return-wide v0
.end method
.method public readHeaders(Lcom/google/android/exoplayer2/util/ParsableByteArray;JLcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;)Z
.locals 11
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 2
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->streamInfo:Lcom/google/android/exoplayer2/util/FlacStreamInfo;
if-nez v1, :cond_0
.line 3
new-instance p2, Lcom/google/android/exoplayer2/util/FlacStreamInfo;
const/16 p3, 0x11
invoke-direct {p2, v0, p3}, Lcom/google/android/exoplayer2/util/FlacStreamInfo;-><init>([BI)V
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->streamInfo:Lcom/google/android/exoplayer2/util/FlacStreamInfo;
const/16 p2, 0x9
.line 4
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result p1
invoke-static {v0, p2, p1}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object p1
const/4 p2, 0x4
const/16 p3, -0x80
.line 5
aput-byte p3, p1, p2
.line 6
invoke-static {p1}, Ljava/util/Collections;->singletonList(Ljava/lang/Object;)Ljava/util/List;
move-result-object v7
const/4 v0, 0x0
const/4 v2, 0x0
const/4 v3, -0x1
.line 7
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->streamInfo:Lcom/google/android/exoplayer2/util/FlacStreamInfo;
.line 8
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/FlacStreamInfo;->bitRate()I
move-result v4
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->streamInfo:Lcom/google/android/exoplayer2/util/FlacStreamInfo;
iget v5, p1, Lcom/google/android/exoplayer2/util/FlacStreamInfo;->channels:I
iget v6, p1, Lcom/google/android/exoplayer2/util/FlacStreamInfo;->sampleRate:I
const/4 v8, 0x0
const/4 v9, 0x0
const/4 v10, 0x0
const-string v1, "audio/flac"
.line 9
invoke-static/range {v0 .. v10}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;
move-result-object p1
iput-object p1, p4, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;->format:Lcom/google/android/exoplayer2/Format;
goto :goto_0
:cond_0
const/4 v1, 0x0
.line 10
aget-byte v2, v0, v1
and-int/lit8 v2, v2, 0x7f
const/4 v3, 0x3
if-ne v2, v3, :cond_1
.line 11
new-instance p2, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;
invoke-direct {p2, p0}, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;-><init>(Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;)V
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->flacOggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;
.line 12
invoke-virtual {p2, p1}, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->parseSeekTable(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
goto :goto_0
.line 13
:cond_1
invoke-static {v0}, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->isAudioPacket([B)Z
move-result p1
if-eqz p1, :cond_3
.line 14
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->flacOggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;
if-eqz p1, :cond_2
.line 15
invoke-virtual {p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;->setFirstFrameOffset(J)V
.line 16
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->flacOggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;
iput-object p1, p4, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;->oggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
:cond_2
return v1
:cond_3
:goto_0
const/4 p1, 0x1
return p1
.end method
.method public reset(Z)V
.locals 0
.line 1
invoke-super {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->reset(Z)V
if-eqz p1, :cond_0
const/4 p1, 0x0
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->streamInfo:Lcom/google/android/exoplayer2/util/FlacStreamInfo;
.line 3
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->flacOggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/FlacReader$FlacOggSeeker;
:cond_0
return-void
.end method
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor$1;
.super Ljava/lang/Object;
.source "OggExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 3
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 1
new-instance v1, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
@@ -0,0 +1,248 @@
.class public Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;
.super Ljava/lang/Object;
.source "OggExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/Extractor;
# static fields
.field public static final FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
.field private static final MAX_VERIFICATION_BYTES:I = 0x8
# instance fields
.field private streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
# direct methods
.method public static constructor <clinit>()V
.locals 1
.line 1
new-instance v0, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor$1;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor$1;-><init>()V
sput-object v0, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
return-void
.end method
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private static resetPosition(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/util/ParsableByteArray;
.locals 1
const/4 v0, 0x0
.line 1
invoke-virtual {p0, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
return-object p0
.end method
# virtual methods
.method public getStreamReader()Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
return-object v0
.end method
.method public init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
.locals 2
const/4 v0, 0x0
const/4 v1, 0x1
.line 1
invoke-interface {p1, v0, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object v0
.line 2
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->endTracks()V
.line 3
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
invoke-virtual {v1, p1, v0}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
return-void
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.locals 1
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
invoke-virtual {v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
move-result p1
return p1
.end method
.method public release()V
.locals 0
return-void
.end method
.method public seek(JJ)V
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
invoke-virtual {v0, p1, p2, p3, p4}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->seek(JJ)V
return-void
.end method
.method public sniff(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const/4 v0, 0x0
.line 1
:try_start_0
new-instance v1, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;-><init>()V
const/4 v2, 0x1
.line 2
invoke-virtual {v1, p1, v2}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->populate(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Z)Z
move-result v3
if-eqz v3, :cond_3
iget v3, v1, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->type:I
const/4 v4, 0x2
and-int/2addr v3, v4
if-eq v3, v4, :cond_0
goto :goto_1
.line 3
:cond_0
iget v1, v1, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
const/16 v3, 0x8
invoke-static {v1, v3}, Ljava/lang/Math;->min(II)I
move-result v1
.line 4
new-instance v3, Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-direct {v3, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
.line 5
iget-object v4, v3, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v4, v0, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 6
invoke-static {v3}, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->resetPosition(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/util/ParsableByteArray;
move-result-object p1
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;->verifyBitstreamType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
move-result p1
if-eqz p1, :cond_1
.line 7
new-instance p1, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;
invoke-direct {p1}, Lcom/google/android/exoplayer2/extractor/ogg/FlacReader;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
goto :goto_0
.line 8
:cond_1
invoke-static {v3}, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->resetPosition(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/util/ParsableByteArray;
move-result-object p1
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->verifyBitstreamType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
move-result p1
if-eqz p1, :cond_2
.line 9
new-instance p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;
invoke-direct {p1}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
goto :goto_0
.line 10
:cond_2
invoke-static {v3}, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->resetPosition(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/util/ParsableByteArray;
move-result-object p1
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->verifyBitstreamType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
move-result p1
if-eqz p1, :cond_3
.line 11
new-instance p1, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;
invoke-direct {p1}, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggExtractor;->streamReader:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
:try_end_0
.catch Lcom/google/android/exoplayer2/ParserException; {:try_start_0 .. :try_end_0} :catch_0
:goto_0
return v2
:catch_0
:cond_3
:goto_1
return v0
.end method
@@ -0,0 +1,397 @@
.class final Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
.super Ljava/lang/Object;
.source "OggPacket.java"
# instance fields
.field private currentSegmentIndex:I
.field private final packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
.field private populated:Z
.field private segmentCount:I
# direct methods
.method public constructor <init>()V
.locals 3
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
.line 3
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const v1, 0xfe01
new-array v1, v1, [B
const/4 v2, 0x0
invoke-direct {v0, v1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([BI)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v0, -0x1
.line 4
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->currentSegmentIndex:I
return-void
.end method
.method private calculatePacketSize(I)I
.locals 5
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->segmentCount:I
.line 2
:cond_0
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->segmentCount:I
add-int v2, p1, v1
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget v4, v3, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSegmentCount:I
if-ge v2, v4, :cond_1
.line 3
iget-object v2, v3, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->laces:[I
add-int/lit8 v3, v1, 0x1
iput v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->segmentCount:I
add-int/2addr v1, p1
aget v1, v2, v1
add-int/2addr v0, v1
const/16 v2, 0xff
if-eq v1, v2, :cond_0
:cond_1
return v0
.end method
# virtual methods
.method public getPageHeader()Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
return-object v0
.end method
.method public getPayload()Lcom/google/android/exoplayer2/util/ParsableByteArray;
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-object v0
.end method
.method public populate(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const/4 v0, 0x0
const/4 v1, 0x1
if-eqz p1, :cond_0
move v2, v1
goto :goto_0
:cond_0
move v2, v0
.line 1
:goto_0
invoke-static {v2}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 2
iget-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->populated:Z
if-eqz v2, :cond_1
.line 3
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->populated:Z
.line 4
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset()V
.line 5
:cond_1
:goto_1
iget-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->populated:Z
if-nez v2, :cond_9
.line 6
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->currentSegmentIndex:I
if-gez v2, :cond_4
.line 7
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
invoke-virtual {v2, p1, v1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->populate(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Z)Z
move-result v2
if-nez v2, :cond_2
return v0
.line 8
:cond_2
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget v3, v2, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->headerSize:I
.line 9
iget v2, v2, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->type:I
and-int/2addr v2, v1
if-ne v2, v1, :cond_3
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v2
if-nez v2, :cond_3
.line 10
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->calculatePacketSize(I)I
move-result v2
add-int/2addr v3, v2
.line 11
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->segmentCount:I
add-int/2addr v2, v0
goto :goto_2
:cond_3
move v2, v0
.line 12
:goto_2
invoke-interface {p1, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
.line 13
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->currentSegmentIndex:I
.line 14
:cond_4
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->currentSegmentIndex:I
invoke-direct {p0, v2}, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->calculatePacketSize(I)I
move-result v2
.line 15
iget v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->currentSegmentIndex:I
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->segmentCount:I
add-int/2addr v3, v4
if-lez v2, :cond_7
.line 16
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->capacity()I
move-result v4
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v5
add-int/2addr v5, v2
if-ge v4, v5, :cond_5
.line 17
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v5, v4, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v6
add-int/2addr v6, v2
invoke-static {v5, v6}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v5
iput-object v5, v4, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 18
:cond_5
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v5, v4, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v4
invoke-interface {p1, v5, v4, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BII)V
.line 19
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v5
add-int/2addr v5, v2
invoke-virtual {v4, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
.line 20
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget-object v2, v2, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->laces:[I
add-int/lit8 v4, v3, -0x1
aget v2, v2, v4
const/16 v4, 0xff
if-eq v2, v4, :cond_6
move v2, v1
goto :goto_3
:cond_6
move v2, v0
:goto_3
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->populated:Z
.line 21
:cond_7
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
iget v2, v2, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSegmentCount:I
if-ne v3, v2, :cond_8
const/4 v3, -0x1
:cond_8
iput v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->currentSegmentIndex:I
goto/16 :goto_1
:cond_9
return v1
.end method
.method public reset()V
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->pageHeader:Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->reset()V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset()V
const/4 v0, -0x1
.line 3
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->currentSegmentIndex:I
const/4 v0, 0x0
.line 4
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->populated:Z
return-void
.end method
.method public trimPayload()V
.locals 4
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->packetArray:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v1, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
array-length v2, v1
const v3, 0xfe01
if-ne v2, v3, :cond_0
return-void
.line 2
:cond_0
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v2
.line 3
invoke-static {v3, v2}, Ljava/lang/Math;->max(II)I
move-result v2
invoke-static {v1, v2}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v1
iput-object v1, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
return-void
.end method
@@ -0,0 +1,376 @@
.class final Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
.super Ljava/lang/Object;
.source "OggPageHeader.java"
# static fields
.field public static final EMPTY_PAGE_HEADER_SIZE:I = 0x1b
.field public static final MAX_PAGE_PAYLOAD:I = 0xfe01
.field public static final MAX_PAGE_SIZE:I = 0xff1b
.field public static final MAX_SEGMENT_COUNT:I = 0xff
.field private static final TYPE_OGGS:I
# instance fields
.field public bodySize:I
.field public granulePosition:J
.field public headerSize:I
.field public final laces:[I
.field public pageChecksum:J
.field public pageSegmentCount:I
.field public pageSequenceNumber:J
.field public revision:I
.field private final scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field public streamSerialNumber:J
.field public type:I
# direct methods
.method public static constructor <clinit>()V
.locals 1
const-string v0, "OggS"
.line 1
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->TYPE_OGGS:I
return-void
.end method
.method public constructor <init>()V
.locals 2
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/16 v0, 0xff
new-array v1, v0, [I
.line 2
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->laces:[I
.line 3
new-instance v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-direct {v1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-void
.end method
# virtual methods
.method public populate(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Z)Z
.locals 8
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset()V
.line 2
invoke-virtual {p0}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->reset()V
.line 3
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getLength()J
move-result-wide v0
const-wide/16 v2, -0x1
cmp-long v0, v0, v2
const/4 v1, 0x1
const/4 v2, 0x0
if-eqz v0, :cond_1
.line 4
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getLength()J
move-result-wide v3
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPeekPosition()J
move-result-wide v5
sub-long/2addr v3, v5
const-wide/16 v5, 0x1b
cmp-long v0, v3, v5
if-ltz v0, :cond_0
goto :goto_0
:cond_0
move v0, v2
goto :goto_1
:cond_1
:goto_0
move v0, v1
:goto_1
if-eqz v0, :cond_8
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v3, 0x1b
invoke-interface {p1, v0, v2, v3, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BIIZ)Z
move-result v0
if-nez v0, :cond_2
goto/16 :goto_3
.line 6
:cond_2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v4
sget v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->TYPE_OGGS:I
int-to-long v6, v0
cmp-long v0, v4, v6
if-eqz v0, :cond_4
if-eqz p2, :cond_3
return v2
.line 7
:cond_3
new-instance p1, Lcom/google/android/exoplayer2/ParserException;
const-string p2, "expected OggS capture pattern at begin of page"
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw p1
.line 8
:cond_4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->revision:I
if-eqz v0, :cond_6
if-eqz p2, :cond_5
return v2
.line 9
:cond_5
new-instance p1, Lcom/google/android/exoplayer2/ParserException;
const-string p2, "unsupported bit stream revision"
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw p1
.line 10
:cond_6
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p2
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->type:I
.line 11
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLittleEndianLong()J
move-result-wide v4
iput-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
.line 12
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLittleEndianUnsignedInt()J
move-result-wide v4
iput-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->streamSerialNumber:J
.line 13
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLittleEndianUnsignedInt()J
move-result-wide v4
iput-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSequenceNumber:J
.line 14
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLittleEndianUnsignedInt()J
move-result-wide v4
iput-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageChecksum:J
.line 15
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p2
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSegmentCount:I
add-int/2addr p2, v3
.line 16
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->headerSize:I
.line 17
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset()V
.line 18
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p2, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSegmentCount:I
invoke-interface {p1, p2, v2, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 19
:goto_2
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSegmentCount:I
if-ge v2, p1, :cond_7
.line 20
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->laces:[I
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p2
aput p2, p1, v2
.line 21
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->laces:[I
aget p2, p2, v2
add-int/2addr p1, p2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
add-int/lit8 v2, v2, 0x1
goto :goto_2
:cond_7
return v1
:cond_8
:goto_3
if-eqz p2, :cond_9
return v2
.line 22
:cond_9
new-instance p1, Ljava/io/EOFException;
invoke-direct {p1}, Ljava/io/EOFException;-><init>()V
throw p1
.end method
.method public reset()V
.locals 3
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->revision:I
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->type:I
const-wide/16 v1, 0x0
.line 3
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
.line 4
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->streamSerialNumber:J
.line 5
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSequenceNumber:J
.line 6
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageChecksum:J
.line 7
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSegmentCount:I
.line 8
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->headerSize:I
.line 9
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
return-void
.end method
@@ -0,0 +1,20 @@
.class interface abstract Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
.super Ljava/lang/Object;
.source "OggSeeker.java"
# virtual methods
.method public abstract createSeekMap()Lcom/google/android/exoplayer2/extractor/SeekMap;
.end method
.method public abstract read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public abstract startSeek(J)J
.end method
@@ -0,0 +1,391 @@
.class final Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;
.super Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.source "OpusReader.java"
# static fields
.field private static final DEFAULT_SEEK_PRE_ROLL_SAMPLES:I = 0xf00
.field private static final OPUS_CODE:I
.field private static final OPUS_SIGNATURE:[B
.field private static final SAMPLE_RATE:I = 0xbb80
# instance fields
.field private headerRead:Z
# direct methods
.method public static constructor <clinit>()V
.locals 1
const-string v0, "Opus"
.line 1
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->OPUS_CODE:I
const/16 v0, 0x8
new-array v0, v0, [B
.line 2
fill-array-data v0, :array_0
sput-object v0, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->OPUS_SIGNATURE:[B
return-void
:array_0
.array-data 1
0x4ft
0x70t
0x75t
0x73t
0x48t
0x65t
0x61t
0x64t
.end array-data
.end method
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;-><init>()V
return-void
.end method
.method private getPacketDurationUs([B)J
.locals 6
const/4 v0, 0x0
.line 1
aget-byte v0, p1, v0
and-int/lit16 v0, v0, 0xff
and-int/lit8 v1, v0, 0x3
const/4 v2, 0x2
const/4 v3, 0x1
if-eqz v1, :cond_0
if-eq v1, v3, :cond_1
if-eq v1, v2, :cond_1
.line 2
aget-byte p1, p1, v3
and-int/lit8 v2, p1, 0x3f
goto :goto_0
:cond_0
move v2, v3
:cond_1
:goto_0
const/4 p1, 0x3
shr-int/2addr v0, p1
and-int/lit8 v1, v0, 0x3
const/16 v4, 0x10
if-lt v0, v4, :cond_2
const/16 p1, 0x9c4
shl-int/2addr p1, v1
goto :goto_1
:cond_2
const/16 v4, 0xc
const/16 v5, 0x2710
if-lt v0, v4, :cond_3
and-int/lit8 p1, v1, 0x1
shl-int p1, v5, p1
goto :goto_1
:cond_3
if-ne v1, p1, :cond_4
const p1, 0xea60
goto :goto_1
:cond_4
shl-int p1, v5, v1
:goto_1
mul-int/2addr v2, p1
int-to-long v0, v2
return-wide v0
.end method
.method private putNativeOrderLong(Ljava/util/List;I)V
.locals 4
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List<",
"[B>;I)V"
}
.end annotation
int-to-long v0, p2
const-wide/32 v2, 0x3b9aca00
mul-long/2addr v0, v2
const-wide/32 v2, 0xbb80
.line 1
div-long/2addr v0, v2
const/16 p2, 0x8
.line 2
invoke-static {p2}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;
move-result-object p2
invoke-static {}, Ljava/nio/ByteOrder;->nativeOrder()Ljava/nio/ByteOrder;
move-result-object v2
invoke-virtual {p2, v2}, Ljava/nio/ByteBuffer;->order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
move-result-object p2
invoke-virtual {p2, v0, v1}, Ljava/nio/ByteBuffer;->putLong(J)Ljava/nio/ByteBuffer;
move-result-object p2
invoke-virtual {p2}, Ljava/nio/ByteBuffer;->array()[B
move-result-object p2
.line 3
invoke-interface {p1, p2}, Ljava/util/List;->add(Ljava/lang/Object;)Z
return-void
.end method
.method public static verifyBitstreamType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.locals 4
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
sget-object v1, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->OPUS_SIGNATURE:[B
array-length v2, v1
const/4 v3, 0x0
if-ge v0, v2, :cond_0
return v3
.line 2
:cond_0
array-length v0, v1
new-array v0, v0, [B
.line 3
array-length v2, v1
invoke-virtual {p0, v0, v3, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 4
invoke-static {v0, v1}, Ljava/util/Arrays;->equals([B[B)Z
move-result p0
return p0
.end method
# virtual methods
.method public preparePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;)J
.locals 2
.line 1
iget-object p1, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->getPacketDurationUs([B)J
move-result-wide v0
invoke-virtual {p0, v0, v1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->convertTimeToGranule(J)J
move-result-wide v0
return-wide v0
.end method
.method public readHeaders(Lcom/google/android/exoplayer2/util/ParsableByteArray;JLcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;)Z
.locals 11
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->headerRead:Z
const/4 p3, 0x1
if-nez p2, :cond_0
.line 2
iget-object p2, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result p1
invoke-static {p2, p1}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object p1
const/16 p2, 0x9
.line 3
aget-byte p2, p1, p2
and-int/lit16 v5, p2, 0xff
const/16 p2, 0xb
.line 4
aget-byte p2, p1, p2
and-int/lit16 p2, p2, 0xff
shl-int/lit8 p2, p2, 0x8
const/16 v0, 0xa
aget-byte v0, p1, v0
and-int/lit16 v0, v0, 0xff
or-int/2addr p2, v0
.line 5
new-instance v7, Ljava/util/ArrayList;
const/4 v0, 0x3
invoke-direct {v7, v0}, Ljava/util/ArrayList;-><init>(I)V
.line 6
invoke-virtual {v7, p1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 7
invoke-direct {p0, v7, p2}, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->putNativeOrderLong(Ljava/util/List;I)V
const/16 p1, 0xf00
.line 8
invoke-direct {p0, v7, p1}, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->putNativeOrderLong(Ljava/util/List;I)V
const/4 v0, 0x0
const/4 v2, 0x0
const/4 v3, -0x1
const/4 v4, -0x1
const v6, 0xbb80
const/4 v8, 0x0
const/4 v9, 0x0
const/4 v10, 0x0
const-string v1, "audio/opus"
.line 9
invoke-static/range {v0 .. v10}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;
move-result-object p1
iput-object p1, p4, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;->format:Lcom/google/android/exoplayer2/Format;
.line 10
iput-boolean p3, p0, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->headerRead:Z
return p3
.line 11
:cond_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result p2
sget p4, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->OPUS_CODE:I
const/4 v0, 0x0
if-ne p2, p4, :cond_1
goto :goto_0
:cond_1
move p3, v0
.line 12
:goto_0
invoke-virtual {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
return p3
.end method
.method public reset(Z)V
.locals 0
.line 1
invoke-super {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->reset(Z)V
if-eqz p1, :cond_0
const/4 p1, 0x0
.line 2
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OpusReader;->headerRead:Z
:cond_0
return-void
.end method
@@ -0,0 +1,14 @@
.class synthetic Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$1;
.super Ljava/lang/Object;
.source "StreamReader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1009
name = null
.end annotation
@@ -0,0 +1,31 @@
.class Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;
.super Ljava/lang/Object;
.source "StreamReader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = "SetupData"
.end annotation
# instance fields
.field public format:Lcom/google/android/exoplayer2/Format;
.field public oggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
@@ -0,0 +1,74 @@
.class final Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$UnseekableOggSeeker;
.super Ljava/lang/Object;
.source "StreamReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "UnseekableOggSeeker"
.end annotation
# direct methods
.method private constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public synthetic constructor <init>(Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$1;)V
.locals 0
.line 2
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$UnseekableOggSeeker;-><init>()V
return-void
.end method
# virtual methods
.method public createSeekMap()Lcom/google/android/exoplayer2/extractor/SeekMap;
.locals 3
.line 1
new-instance v0, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;
const-wide v1, -0x7fffffffffffffffL # -4.9E-324
invoke-direct {v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;-><init>(J)V
return-object v0
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
.locals 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const-wide/16 v0, -0x1
return-wide v0
.end method
.method public startSeek(J)J
.locals 0
const-wide/16 p1, 0x0
return-wide p1
.end method
@@ -0,0 +1,654 @@
.class abstract Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.super Ljava/lang/Object;
.source "StreamReader.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$UnseekableOggSeeker;,
Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;
}
.end annotation
# static fields
.field private static final STATE_END_OF_INPUT:I = 0x3
.field private static final STATE_READ_HEADERS:I = 0x0
.field private static final STATE_READ_PAYLOAD:I = 0x2
.field private static final STATE_SKIP_HEADERS:I = 0x1
# instance fields
.field private currentGranule:J
.field private extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.field private formatSet:Z
.field private lengthOfReadPacket:J
.field private oggPacket:Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
.field private oggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
.field private payloadStartPosition:J
.field private sampleRate:I
.field private seekMapSet:Z
.field private setupData:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;
.field private state:I
.field private targetGranule:J
.field private trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private readHeaders(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)I
.locals 12
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const/4 v0, 0x1
move v1, v0
:cond_0
:goto_0
if-eqz v1, :cond_2
.line 1
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggPacket:Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
invoke-virtual {v1, p1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->populate(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
move-result v1
if-nez v1, :cond_1
const/4 p1, 0x3
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->state:I
const/4 p1, -0x1
return p1
.line 3
:cond_1
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v1
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->payloadStartPosition:J
sub-long/2addr v1, v3
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->lengthOfReadPacket:J
.line 4
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggPacket:Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->getPayload()Lcom/google/android/exoplayer2/util/ParsableByteArray;
move-result-object v1
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->payloadStartPosition:J
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->setupData:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;
invoke-virtual {p0, v1, v2, v3, v4}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->readHeaders(Lcom/google/android/exoplayer2/util/ParsableByteArray;JLcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;)Z
move-result v1
if-eqz v1, :cond_0
.line 5
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v2
iput-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->payloadStartPosition:J
goto :goto_0
.line 6
:cond_2
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->setupData:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;
iget-object v1, v1, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;->format:Lcom/google/android/exoplayer2/Format;
iget v2, v1, Lcom/google/android/exoplayer2/Format;->sampleRate:I
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->sampleRate:I
.line 7
iget-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->formatSet:Z
if-nez v2, :cond_3
.line 8
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v2, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 9
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->formatSet:Z
.line 10
:cond_3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->setupData:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;
iget-object v0, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;->oggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
const/4 v1, 0x0
if-eqz v0, :cond_4
.line 11
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
goto :goto_1
.line 12
:cond_4
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getLength()J
move-result-wide v2
const-wide/16 v4, -0x1
cmp-long v0, v2, v4
if-nez v0, :cond_5
.line 13
new-instance p1, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$UnseekableOggSeeker;
invoke-direct {p1, v1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$UnseekableOggSeeker;-><init>(Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$1;)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
goto :goto_1
.line 14
:cond_5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggPacket:Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->getPageHeader()Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;
move-result-object v0
.line 15
new-instance v11, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->payloadStartPosition:J
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getLength()J
move-result-wide v5
iget p1, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->headerSize:I
iget v2, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
add-int v8, p1, v2
iget-wide v9, v0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
move-object v2, v11
move-object v7, p0
invoke-direct/range {v2 .. v10}, Lcom/google/android/exoplayer2/extractor/ogg/DefaultOggSeeker;-><init>(JJLcom/google/android/exoplayer2/extractor/ogg/StreamReader;IJ)V
iput-object v11, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
.line 16
:goto_1
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->setupData:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;
const/4 p1, 0x2
.line 17
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->state:I
.line 18
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggPacket:Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->trimPayload()V
const/4 p1, 0x0
return p1
.end method
.method private readPayload(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.locals 17
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
move-object/from16 v0, p0
move-object/from16 v1, p1
.line 1
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
invoke-interface {v2, v1}, Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;->read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)J
move-result-wide v2
const-wide/16 v4, 0x0
cmp-long v6, v2, v4
const/4 v7, 0x1
if-ltz v6, :cond_0
move-object/from16 v6, p2
.line 2
iput-wide v2, v6, Lcom/google/android/exoplayer2/extractor/PositionHolder;->position:J
return v7
:cond_0
const-wide/16 v8, -0x1
cmp-long v6, v2, v8
if-gez v6, :cond_1
const-wide/16 v10, 0x2
add-long/2addr v2, v10
neg-long v2, v2
.line 3
invoke-virtual {v0, v2, v3}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->onSeekEnd(J)V
.line 4
:cond_1
iget-boolean v2, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->seekMapSet:Z
if-nez v2, :cond_2
.line 5
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
invoke-interface {v2}, Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;->createSeekMap()Lcom/google/android/exoplayer2/extractor/SeekMap;
move-result-object v2
.line 6
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
invoke-interface {v3, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->seekMap(Lcom/google/android/exoplayer2/extractor/SeekMap;)V
.line 7
iput-boolean v7, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->seekMapSet:Z
.line 8
:cond_2
iget-wide v2, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->lengthOfReadPacket:J
cmp-long v2, v2, v4
if-gtz v2, :cond_4
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggPacket:Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
invoke-virtual {v2, v1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->populate(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
move-result v1
if-eqz v1, :cond_3
goto :goto_0
:cond_3
const/4 v1, 0x3
.line 9
iput v1, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->state:I
const/4 v1, -0x1
return v1
.line 10
:cond_4
:goto_0
iput-wide v4, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->lengthOfReadPacket:J
.line 11
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggPacket:Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->getPayload()Lcom/google/android/exoplayer2/util/ParsableByteArray;
move-result-object v1
.line 12
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->preparePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;)J
move-result-wide v2
cmp-long v4, v2, v4
if-ltz v4, :cond_5
.line 13
iget-wide v4, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->currentGranule:J
add-long v6, v4, v2
iget-wide v10, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->targetGranule:J
cmp-long v6, v6, v10
if-ltz v6, :cond_5
.line 14
invoke-virtual {v0, v4, v5}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->convertGranuleToTime(J)J
move-result-wide v11
.line 15
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v5
invoke-interface {v4, v1, v5}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 16
iget-object v10, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
const/4 v13, 0x1
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v14
const/4 v15, 0x0
const/16 v16, 0x0
invoke-interface/range {v10 .. v16}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
.line 17
iput-wide v8, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->targetGranule:J
.line 18
:cond_5
iget-wide v4, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->currentGranule:J
add-long/2addr v4, v2
iput-wide v4, v0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->currentGranule:J
const/4 v1, 0x0
return v1
.end method
# virtual methods
.method public convertGranuleToTime(J)J
.locals 2
const-wide/32 v0, 0xf4240
mul-long/2addr p1, v0
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->sampleRate:I
int-to-long v0, v0
div-long/2addr p1, v0
return-wide p1
.end method
.method public convertTimeToGranule(J)J
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->sampleRate:I
int-to-long v0, v0
mul-long/2addr v0, p1
const-wide/32 p1, 0xf4240
div-long/2addr v0, p1
return-wide v0
.end method
.method public init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
.locals 0
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.line 2
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 3
new-instance p1, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
invoke-direct {p1}, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggPacket:Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
const/4 p1, 0x1
.line 4
invoke-virtual {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->reset(Z)V
return-void
.end method
.method public onSeekEnd(J)V
.locals 0
.line 1
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->currentGranule:J
return-void
.end method
.method public abstract preparePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;)J
.end method
.method public final read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.locals 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->state:I
if-eqz v0, :cond_2
const/4 v1, 0x1
const/4 v2, 0x2
if-eq v0, v1, :cond_1
if-ne v0, v2, :cond_0
.line 2
invoke-direct {p0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->readPayload(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
move-result p1
return p1
.line 3
:cond_0
new-instance p1, Ljava/lang/IllegalStateException;
invoke-direct {p1}, Ljava/lang/IllegalStateException;-><init>()V
throw p1
.line 4
:cond_1
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->payloadStartPosition:J
long-to-int p2, v0
invoke-interface {p1, p2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
.line 5
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->state:I
const/4 p1, 0x0
return p1
.line 6
:cond_2
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->readHeaders(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)I
move-result p1
return p1
.end method
.method public abstract readHeaders(Lcom/google/android/exoplayer2/util/ParsableByteArray;JLcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;)Z
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.end method
.method public reset(Z)V
.locals 4
const-wide/16 v0, 0x0
if-eqz p1, :cond_0
.line 1
new-instance p1, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;
invoke-direct {p1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->setupData:Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;
.line 2
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->payloadStartPosition:J
const/4 p1, 0x0
.line 3
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->state:I
goto :goto_0
:cond_0
const/4 p1, 0x1
.line 4
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->state:I
:goto_0
const-wide/16 v2, -0x1
.line 5
iput-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->targetGranule:J
.line 6
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->currentGranule:J
return-void
.end method
.method public final seek(JJ)V
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggPacket:Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ogg/OggPacket;->reset()V
const-wide/16 v0, 0x0
cmp-long p1, p1, v0
if-nez p1, :cond_0
.line 2
iget-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->seekMapSet:Z
xor-int/lit8 p1, p1, 0x1
invoke-virtual {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->reset(Z)V
goto :goto_0
.line 3
:cond_0
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->state:I
if-eqz p1, :cond_1
.line 4
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->oggSeeker:Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;
invoke-interface {p1, p3, p4}, Lcom/google/android/exoplayer2/extractor/ogg/OggSeeker;->startSeek(J)J
move-result-wide p1
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->targetGranule:J
const/4 p1, 0x2
.line 5
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->state:I
:cond_1
:goto_0
return-void
.end method
@@ -0,0 +1,289 @@
.class final Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;
.super Ljava/lang/Object;
.source "VorbisBitArray.java"
# instance fields
.field private bitOffset:I
.field private final byteLimit:I
.field private byteOffset:I
.field private final data:[B
# direct methods
.method public constructor <init>([B)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->data:[B
.line 3
array-length p1, p1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteLimit:I
return-void
.end method
.method private assertValidOffset()V
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteOffset:I
if-ltz v0, :cond_1
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteLimit:I
if-lt v0, v1, :cond_0
if-ne v0, v1, :cond_1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
if-nez v0, :cond_1
:cond_0
const/4 v0, 0x1
goto :goto_0
:cond_1
const/4 v0, 0x0
:goto_0
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
return-void
.end method
# virtual methods
.method public bitsLeft()I
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteLimit:I
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteOffset:I
sub-int/2addr v0, v1
mul-int/lit8 v0, v0, 0x8
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
sub-int/2addr v0, v1
return v0
.end method
.method public getPosition()I
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteOffset:I
mul-int/lit8 v0, v0, 0x8
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
add-int/2addr v0, v1
return v0
.end method
.method public readBit()Z
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->data:[B
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteOffset:I
aget-byte v0, v0, v1
and-int/lit16 v0, v0, 0xff
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
shr-int/2addr v0, v1
const/4 v1, 0x1
and-int/2addr v0, v1
if-ne v0, v1, :cond_0
move v0, v1
goto :goto_0
:cond_0
const/4 v0, 0x0
.line 2
:goto_0
invoke-virtual {p0, v1}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->skipBits(I)V
return v0
.end method
.method public readBits(I)I
.locals 6
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteOffset:I
.line 2
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
rsub-int/lit8 v1, v1, 0x8
invoke-static {p1, v1}, Ljava/lang/Math;->min(II)I
move-result v1
.line 3
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->data:[B
add-int/lit8 v3, v0, 0x1
aget-byte v0, v2, v0
const/16 v2, 0xff
and-int/2addr v0, v2
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
shr-int/2addr v0, v4
rsub-int/lit8 v4, v1, 0x8
shr-int v4, v2, v4
and-int/2addr v0, v4
:goto_0
if-ge v1, p1, :cond_0
.line 4
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->data:[B
add-int/lit8 v5, v3, 0x1
aget-byte v3, v4, v3
and-int/2addr v3, v2
shl-int/2addr v3, v1
or-int/2addr v0, v3
add-int/lit8 v1, v1, 0x8
move v3, v5
goto :goto_0
:cond_0
const/4 v1, -0x1
rsub-int/lit8 v2, p1, 0x20
ushr-int/2addr v1, v2
and-int/2addr v0, v1
.line 5
invoke-virtual {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->skipBits(I)V
return v0
.end method
.method public reset()V
.locals 1
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteOffset:I
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
return-void
.end method
.method public setPosition(I)V
.locals 1
.line 1
div-int/lit8 v0, p1, 0x8
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteOffset:I
mul-int/lit8 v0, v0, 0x8
sub-int/2addr p1, v0
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
.line 3
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->assertValidOffset()V
return-void
.end method
.method public skipBits(I)V
.locals 3
.line 1
div-int/lit8 v0, p1, 0x8
.line 2
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteOffset:I
add-int/2addr v1, v0
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteOffset:I
.line 3
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
mul-int/lit8 v0, v0, 0x8
sub-int/2addr p1, v0
add-int/2addr p1, v2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
const/4 v0, 0x7
if-le p1, v0, :cond_0
add-int/lit8 v1, v1, 0x1
.line 4
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->byteOffset:I
add-int/lit8 p1, p1, -0x8
.line 5
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->bitOffset:I
.line 6
:cond_0
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisBitArray;->assertValidOffset()V
return-void
.end method
@@ -0,0 +1,52 @@
.class final Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
.super Ljava/lang/Object;
.source "VorbisReader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "VorbisSetup"
.end annotation
# instance fields
.field public final commentHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
.field public final iLogModes:I
.field public final idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
.field public final modes:[Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;
.field public final setupHeaderData:[B
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;[B[Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;I)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
.line 3
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->commentHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
.line 4
iput-object p3, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->setupHeaderData:[B
.line 5
iput-object p4, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->modes:[Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;
.line 6
iput p5, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->iLogModes:I
return-void
.end method
@@ -0,0 +1,513 @@
.class final Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;
.super Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;
.source "VorbisReader.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
}
.end annotation
# instance fields
.field private commentHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
.field private previousPacketBlockSize:I
.field private seenFirstAudioPacket:Z
.field private vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
.field private vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;-><init>()V
return-void
.end method
.method public static appendNumberOfSamples(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
.locals 6
.line 1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v0
add-int/lit8 v0, v0, 0x4
invoke-virtual {p0, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v1
add-int/lit8 v1, v1, -0x4
const-wide/16 v2, 0xff
and-long v4, p1, v2
long-to-int v4, v4
int-to-byte v4, v4
aput-byte v4, v0, v1
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v1
add-int/lit8 v1, v1, -0x3
const/16 v4, 0x8
ushr-long v4, p1, v4
and-long/2addr v4, v2
long-to-int v4, v4
int-to-byte v4, v4
aput-byte v4, v0, v1
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v1
add-int/lit8 v1, v1, -0x2
const/16 v4, 0x10
ushr-long v4, p1, v4
and-long/2addr v4, v2
long-to-int v4, v4
int-to-byte v4, v4
aput-byte v4, v0, v1
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result p0
add-int/lit8 p0, p0, -0x1
const/16 v1, 0x18
ushr-long/2addr p1, v1
and-long/2addr p1, v2
long-to-int p1, p1
int-to-byte p1, p1
aput-byte p1, v0, p0
return-void
.end method
.method private static decodeBlockSize(BLcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;)I
.locals 2
.line 1
iget v0, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->iLogModes:I
const/4 v1, 0x1
invoke-static {p0, v0, v1}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->readBits(BII)I
move-result p0
.line 2
iget-object v0, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->modes:[Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;
aget-object p0, v0, p0
iget-boolean p0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;->blockFlag:Z
if-nez p0, :cond_0
.line 3
iget-object p0, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget p0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->blockSize0:I
goto :goto_0
.line 4
:cond_0
iget-object p0, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget p0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->blockSize1:I
:goto_0
return p0
.end method
.method public static readBits(BII)I
.locals 0
shr-int/2addr p0, p2
rsub-int/lit8 p1, p1, 0x8
const/16 p2, 0xff
ushr-int p1, p2, p1
and-int/2addr p0, p1
return p0
.end method
.method public static verifyBitstreamType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.locals 1
const/4 v0, 0x1
.line 1
:try_start_0
invoke-static {v0, p0, v0}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;->verifyVorbisHeaderCapturePattern(ILcom/google/android/exoplayer2/util/ParsableByteArray;Z)Z
move-result p0
:try_end_0
.catch Lcom/google/android/exoplayer2/ParserException; {:try_start_0 .. :try_end_0} :catch_0
return p0
:catch_0
const/4 p0, 0x0
return p0
.end method
# virtual methods
.method public onSeekEnd(J)V
.locals 2
.line 1
invoke-super {p0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->onSeekEnd(J)V
const-wide/16 v0, 0x0
cmp-long p1, p1, v0
const/4 p2, 0x0
if-eqz p1, :cond_0
const/4 p1, 0x1
goto :goto_0
:cond_0
move p1, p2
.line 2
:goto_0
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->seenFirstAudioPacket:Z
.line 3
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
if-eqz p1, :cond_1
iget p2, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->blockSize0:I
:cond_1
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->previousPacketBlockSize:I
return-void
.end method
.method public preparePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;)J
.locals 4
.line 1
iget-object v0, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v1, 0x0
aget-byte v2, v0, v1
const/4 v3, 0x1
and-int/2addr v2, v3
if-ne v2, v3, :cond_0
const-wide/16 v0, -0x1
return-wide v0
.line 2
:cond_0
aget-byte v0, v0, v1
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
invoke-static {v0, v2}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->decodeBlockSize(BLcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;)I
move-result v0
.line 3
iget-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->seenFirstAudioPacket:Z
if-eqz v2, :cond_1
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->previousPacketBlockSize:I
add-int/2addr v1, v0
div-int/lit8 v1, v1, 0x4
:cond_1
int-to-long v1, v1
.line 4
invoke-static {p1, v1, v2}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->appendNumberOfSamples(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
.line 5
iput-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->seenFirstAudioPacket:Z
.line 6
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->previousPacketBlockSize:I
return-wide v1
.end method
.method public readHeaders(Lcom/google/android/exoplayer2/util/ParsableByteArray;JLcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;)Z
.locals 11
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
if-eqz p2, :cond_0
const/4 p1, 0x0
return p1
.line 2
:cond_0
invoke-virtual {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->readSetupHeaders(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
const/4 p2, 0x1
if-nez p1, :cond_1
return p2
.line 3
:cond_1
new-instance v7, Ljava/util/ArrayList;
invoke-direct {v7}, Ljava/util/ArrayList;-><init>()V
.line 4
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
iget-object p1, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget-object p1, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->data:[B
invoke-virtual {v7, p1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 5
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
iget-object p1, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->setupHeaderData:[B
invoke-virtual {v7, p1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
const/4 v0, 0x0
const/4 v2, 0x0
.line 6
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
iget-object p1, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget v3, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->bitrateNominal:I
const/4 v4, -0x1
iget v5, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->channels:I
iget-wide v8, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->sampleRate:J
long-to-int v6, v8
const/4 v8, 0x0
const/4 v9, 0x0
const/4 v10, 0x0
const-string v1, "audio/vorbis"
invoke-static/range {v0 .. v10}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;
move-result-object p1
iput-object p1, p4, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;->format:Lcom/google/android/exoplayer2/Format;
return p2
.end method
.method public readSetupHeaders(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
.locals 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
const/4 v1, 0x0
if-nez v0, :cond_0
.line 2
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;->readVorbisIdentificationHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
return-object v1
.line 3
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->commentHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
if-nez v0, :cond_1
.line 4
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;->readVorbisCommentHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->commentHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
return-object v1
.line 5
:cond_1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v0
new-array v4, v0, [B
.line 6
iget-object v0, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v1
const/4 v2, 0x0
invoke-static {v0, v2, v4, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 7
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget v0, v0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->channels:I
invoke-static {p1, v0}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;->readVorbisModes(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)[Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;
move-result-object v5
.line 8
array-length p1, v5
add-int/lit8 p1, p1, -0x1
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;->iLog(I)I
move-result v6
.line 9
new-instance p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->commentHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
move-object v1, p1
invoke-direct/range {v1 .. v6}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;-><init>(Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;[B[Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;I)V
return-object p1
.end method
.method public reset(Z)V
.locals 0
.line 1
invoke-super {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->reset(Z)V
if-eqz p1, :cond_0
const/4 p1, 0x0
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
.line 3
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
.line 4
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->commentHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
:cond_0
const/4 p1, 0x0
.line 5
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->previousPacketBlockSize:I
.line 6
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->seenFirstAudioPacket:Z
return-void
.end method
@@ -0,0 +1,52 @@
.class public final Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CodeBook;
.super Ljava/lang/Object;
.source "VorbisUtil.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "CodeBook"
.end annotation
# instance fields
.field public final dimensions:I
.field public final entries:I
.field public final isOrdered:Z
.field public final lengthMap:[J
.field public final lookupType:I
# direct methods
.method public constructor <init>(II[JIZ)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CodeBook;->dimensions:I
.line 3
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CodeBook;->entries:I
.line 4
iput-object p3, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CodeBook;->lengthMap:[J
.line 5
iput p4, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CodeBook;->lookupType:I
.line 6
iput-boolean p5, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CodeBook;->isOrdered:Z
return-void
.end method
@@ -0,0 +1,42 @@
.class public final Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
.super Ljava/lang/Object;
.source "VorbisUtil.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "CommentHeader"
.end annotation
# instance fields
.field public final comments:[Ljava/lang/String;
.field public final length:I
.field public final vendor:Ljava/lang/String;
# direct methods
.method public constructor <init>(Ljava/lang/String;[Ljava/lang/String;I)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;->vendor:Ljava/lang/String;
.line 3
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;->comments:[Ljava/lang/String;
.line 4
iput p3, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;->length:I
return-void
.end method
@@ -0,0 +1,47 @@
.class public final Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;
.super Ljava/lang/Object;
.source "VorbisUtil.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "Mode"
.end annotation
# instance fields
.field public final blockFlag:Z
.field public final mapping:I
.field public final transformType:I
.field public final windowType:I
# direct methods
.method public constructor <init>(ZIII)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;->blockFlag:Z
.line 3
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;->windowType:I
.line 4
iput p3, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;->transformType:I
.line 5
iput p4, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;->mapping:I
return-void
.end method
@@ -0,0 +1,99 @@
.class public final Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
.super Ljava/lang/Object;
.source "VorbisUtil.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "VorbisIdHeader"
.end annotation
# instance fields
.field public final bitrateMax:I
.field public final bitrateMin:I
.field public final bitrateNominal:I
.field public final blockSize0:I
.field public final blockSize1:I
.field public final channels:I
.field public final data:[B
.field public final framingFlag:Z
.field public final sampleRate:J
.field public final version:J
# direct methods
.method public constructor <init>(JIJIIIIIZ[B)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->version:J
.line 3
iput p3, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->channels:I
.line 4
iput-wide p4, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->sampleRate:J
.line 5
iput p6, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->bitrateMax:I
.line 6
iput p7, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->bitrateNominal:I
.line 7
iput p8, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->bitrateMin:I
.line 8
iput p9, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->blockSize0:I
.line 9
iput p10, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->blockSize1:I
.line 10
iput-boolean p11, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->framingFlag:Z
.line 11
iput-object p12, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->data:[B
return-void
.end method
# virtual methods
.method public getApproximateBitrate()I
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->bitrateNominal:I
if-nez v0, :cond_0
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->bitrateMin:I
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->bitrateMax:I
add-int/2addr v0, v1
div-int/lit8 v0, v0, 0x2
:cond_0
return v0
.end method
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More