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,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