VorbisReader.smali
.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 static constructor <clinit>()V
.registers 1
return-void
.end method
.method constructor <init>()V
.registers 1
.line 30
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;-><init>()V
return-void
.end method
.method static appendNumberOfSamples(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
.registers 9
.param p0, "buffer" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "packetSampleCount" # J
.line 154
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 157
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 v5, v4
int-to-byte v4, v5
aput-byte v4, v0, v1
.line 158
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 v5, v4
int-to-byte v4, v5
aput-byte v4, v0, v1
.line 159
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 v5, v4
int-to-byte v4, v5
aput-byte v4, v0, v1
.line 160
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, -0x1
const/16 v4, 0x18
ushr-long v4, p1, v4
and-long/2addr v2, v4
long-to-int v3, v2
int-to-byte v2, v3
aput-byte v2, v0, v1
.line 161
return-void
.end method
.method private static decodeBlockSize(BLcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;)I
.registers 4
.param p0, "firstByteOfAudioPacket" # B
.param p1, "vorbisSetup" # Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
.line 165
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 v0
.line 167
.local v0, "modeNumber":I
iget-object v1, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->modes:[Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;
aget-object v1, v1, v0
iget-boolean v1, v1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;->blockFlag:Z
if-nez v1, :cond_14
.line 168
iget-object v1, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget v1, v1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->blockSize0:I
.local v1, "currentBlockSize":I
goto :goto_18
.line 170
.end local v1 # "currentBlockSize":I
:cond_14
iget-object v1, p1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget v1, v1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->blockSize1:I
.line 172
.restart local v1 # "currentBlockSize":I
:goto_18
return v1
.end method
.method static readBits(BII)I
.registers 6
.param p0, "src" # B
.param p1, "length" # I
.param p2, "leastSignificantBitIndex" # I
.line 147
shr-int v0, p0, p2
rsub-int/lit8 v1, p1, 0x8
const/16 v2, 0xff
ushr-int v1, v2, v1
and-int/2addr v0, v1
return v0
.end method
.method public static verifyBitstreamType(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.registers 3
.param p0, "data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 41
const/4 v0, 0x1
:try_start_1
invoke-static {v0, p0, v0}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;->verifyVorbisHeaderCapturePattern(ILcom/google/android/exoplayer2/util/ParsableByteArray;Z)Z
move-result v0
:try_end_5
.catch Lcom/google/android/exoplayer2/ParserException; {:try_start_1 .. :try_end_5} :catch_6
return v0
.line 42
:catch_6
move-exception v0
.line 43
.local v0, "e":Lcom/google/android/exoplayer2/ParserException;
const/4 v1, 0x0
return v1
.end method
# virtual methods
.method protected onSeekEnd(J)V
.registers 7
.param p1, "currentGranule" # J
.line 61
invoke-super {p0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->onSeekEnd(J)V
.line 62
const/4 v0, 0x0
const-wide/16 v1, 0x0
cmp-long v3, p1, v1
if-eqz v3, :cond_c
const/4 v1, 0x1
goto :goto_d
:cond_c
const/4 v1, 0x0
:goto_d
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->seenFirstAudioPacket:Z
.line 63
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
if-eqz v1, :cond_15
iget v0, v1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->blockSize0:I
:cond_15
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->previousPacketBlockSize:I
.line 64
return-void
.end method
.method protected preparePayload(Lcom/google/android/exoplayer2/util/ParsableByteArray;)J
.registers 7
.param p1, "packet" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 69
iget-object v0, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v1, 0x0
aget-byte v0, v0, v1
const/4 v2, 0x1
and-int/2addr v0, v2
if-ne v0, v2, :cond_c
.line 70
const-wide/16 v0, -0x1
return-wide v0
.line 74
:cond_c
iget-object v0, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
aget-byte v0, v0, v1
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
invoke-static {v0, v3}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->decodeBlockSize(BLcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;)I
move-result v0
.line 77
.local v0, "packetBlockSize":I
iget-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->seenFirstAudioPacket:Z
if-eqz v3, :cond_1f
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->previousPacketBlockSize:I
add-int/2addr v1, v0
div-int/lit8 v1, v1, 0x4
.line 80
.local v1, "samplesInPacket":I
:cond_1f
int-to-long v3, v1
invoke-static {p1, v3, v4}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->appendNumberOfSamples(Lcom/google/android/exoplayer2/util/ParsableByteArray;J)V
.line 83
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->seenFirstAudioPacket:Z
.line 84
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->previousPacketBlockSize:I
.line 85
int-to-long v2, v1
return-wide v2
.end method
.method protected readHeaders(Lcom/google/android/exoplayer2/util/ParsableByteArray;JLcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;)Z
.registers 19
.param p1, "packet" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p2, "position" # J
.param p4, "setupData" # Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 91
move-object v0, p0
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
if-eqz v1, :cond_7
.line 92
const/4 v1, 0x0
return v1
.line 95
:cond_7
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 v1
iput-object v1, v0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
.line 96
const/4 v2, 0x1
if-nez v1, :cond_11
.line 97
return v2
.line 100
:cond_11
new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
.line 101
.local v1, "codecInitialisationData":Ljava/util/ArrayList;, "Ljava/util/ArrayList<[B>;"
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
iget-object v3, v3, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget-object v3, v3, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->data:[B
invoke-virtual {v1, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 102
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
iget-object v3, v3, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->setupHeaderData:[B
invoke-virtual {v1, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 104
const/4 v3, 0x0
const/4 v5, 0x0
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
iget-object v4, v4, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget v6, v4, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->bitrateNominal:I
const/4 v7, -0x1
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
iget-object v4, v4, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget v8, v4, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->channels:I
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
iget-object v4, v4, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;->idHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget-wide v9, v4, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->sampleRate:J
long-to-int v9, v9
const/4 v11, 0x0
const/4 v12, 0x0
const/4 v13, 0x0
const-string v4, "audio/vorbis"
move-object v10, v1
invoke-static/range {v3 .. v13}, 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 v3
move-object/from16 v4, p4
iput-object v3, v4, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader$SetupData;->format:Lcom/google/android/exoplayer2/Format;
.line 108
return v2
.end method
.method readSetupHeaders(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
.registers 12
.param p1, "scratch" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 114
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_c
.line 115
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 v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
.line 116
return-object v1
.line 119
:cond_c
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->commentHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
if-nez v0, :cond_17
.line 120
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 v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->commentHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
.line 121
return-object v1
.line 125
:cond_17
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v0
new-array v0, v0, [B
.line 127
.local v0, "setupHeaderData":[B
iget-object v1, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v2
const/4 v3, 0x0
invoke-static {v1, v3, v0, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 129
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
iget v1, v1, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;->channels:I
invoke-static {p1, v1}, 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 v7
.line 131
.local v7, "modes":[Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$Mode;
array-length v1, v7
add-int/lit8 v1, v1, -0x1
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil;->iLog(I)I
move-result v8
.line 133
.local v8, "iLogModes":I
new-instance v9, 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, v9
move-object v4, v0
move-object v5, v7
move v6, v8
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 v9
.end method
.method protected reset(Z)V
.registers 3
.param p1, "headerData" # Z
.line 49
invoke-super {p0, p1}, Lcom/google/android/exoplayer2/extractor/ogg/StreamReader;->reset(Z)V
.line 50
if-eqz p1, :cond_c
.line 51
const/4 v0, 0x0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisSetup:Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader$VorbisSetup;
.line 52
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->vorbisIdHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$VorbisIdHeader;
.line 53
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->commentHeader:Lcom/google/android/exoplayer2/extractor/ogg/VorbisUtil$CommentHeader;
.line 55
:cond_c
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->previousPacketBlockSize:I
.line 56
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ogg/VorbisReader;->seenFirstAudioPacket:Z
.line 57
return-void
.end method