OggPageHeader.smali
.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 static constructor <clinit>()V
.registers 1
.line 37
const-string v0, "OggS"
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 constructor <init>()V
.registers 3
.line 29
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 52
const/16 v0, 0xff
new-array v1, v0, [I
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->laces:[I
.line 54
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
.registers 12
.param p1, "input" # Lcom/google/android/exoplayer2/extractor/ExtractorInput;
.param p2, "quiet" # Z
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 84
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 85
invoke-virtual {p0}, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->reset()V
.line 86
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getLength()J
move-result-wide v0
const/4 v2, 0x1
const/4 v3, 0x0
const-wide/16 v4, -0x1
cmp-long v6, v0, v4
if-eqz v6, :cond_26
.line 87
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getLength()J
move-result-wide v0
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPeekPosition()J
move-result-wide v4
sub-long/2addr v0, v4
const-wide/16 v4, 0x1b
cmp-long v6, v0, v4
if-ltz v6, :cond_24
goto :goto_26
:cond_24
const/4 v0, 0x0
goto :goto_27
:cond_26
:goto_26
const/4 v0, 0x1
.line 88
.local v0, "hasEnoughBytes":Z
:goto_27
if-eqz v0, :cond_c2
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v1, v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v4, 0x1b
invoke-interface {p1, v1, v3, v4, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BIIZ)Z
move-result v1
if-nez v1, :cond_37
goto/16 :goto_c2
.line 95
:cond_37
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v5
sget v1, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->TYPE_OGGS:I
int-to-long v7, v1
cmp-long v1, v5, v7
if-eqz v1, :cond_4f
.line 96
if-eqz p2, :cond_47
.line 97
return v3
.line 99
:cond_47
new-instance v1, Lcom/google/android/exoplayer2/ParserException;
const-string v2, "expected OggS capture pattern at begin of page"
invoke-direct {v1, v2}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw v1
.line 103
:cond_4f
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v1
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->revision:I
.line 104
if-eqz v1, :cond_65
.line 105
if-eqz p2, :cond_5c
.line 106
return v3
.line 108
:cond_5c
new-instance v1, Lcom/google/android/exoplayer2/ParserException;
const-string/jumbo v2, "unsupported bit stream revision"
invoke-direct {v1, v2}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw v1
.line 111
:cond_65
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v1
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->type:I
.line 113
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLittleEndianLong()J
move-result-wide v5
iput-wide v5, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
.line 114
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLittleEndianUnsignedInt()J
move-result-wide v5
iput-wide v5, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->streamSerialNumber:J
.line 115
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLittleEndianUnsignedInt()J
move-result-wide v5
iput-wide v5, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSequenceNumber:J
.line 116
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readLittleEndianUnsignedInt()J
move-result-wide v5
iput-wide v5, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageChecksum:J
.line 117
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v1
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSegmentCount:I
.line 118
add-int/2addr v1, v4
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->headerSize:I
.line 121
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset()V
.line 122
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v1, v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSegmentCount:I
invoke-interface {p1, v1, v3, v4}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 123
const/4 v1, 0x0
.local v1, "i":I
:goto_a7
iget v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSegmentCount:I
if-ge v1, v3, :cond_c1
.line 124
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->laces:[I
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v4
aput v4, v3, v1
.line 125
iget v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->laces:[I
aget v4, v4, v1
add-int/2addr v3, v4
iput v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
.line 123
add-int/lit8 v1, v1, 0x1
goto :goto_a7
.line 128
.end local v1 # "i":I
:cond_c1
return v2
.line 89
:cond_c2
:goto_c2
if-eqz p2, :cond_c5
.line 90
return v3
.line 92
:cond_c5
new-instance v1, Ljava/io/EOFException;
invoke-direct {v1}, Ljava/io/EOFException;-><init>()V
goto :goto_cc
:goto_cb
throw v1
:goto_cc
goto :goto_cb
.end method
.method public reset()V
.registers 4
.line 60
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->revision:I
.line 61
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->type:I
.line 62
const-wide/16 v1, 0x0
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->granulePosition:J
.line 63
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->streamSerialNumber:J
.line 64
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSequenceNumber:J
.line 65
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageChecksum:J
.line 66
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->pageSegmentCount:I
.line 67
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->headerSize:I
.line 68
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/OggPageHeader;->bodySize:I
.line 69
return-void
.end method