WavExtractor.smali
.class public final Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;
.super Ljava/lang/Object;
.source "WavExtractor.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_INPUT_SIZE:I = 0x8000
# instance fields
.field private bytesPerFrame:I
.field private extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.field private pendingBytes:I
.field private trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 37
sget-object v0, Lcom/google/android/exoplayer2/extractor/wav/-$$Lambda$WavExtractor$5r6M_S0QCNNj_Xavzq9WwuFHep0;->INSTANCE:Lcom/google/android/exoplayer2/extractor/wav/-$$Lambda$WavExtractor$5r6M_S0QCNNj_Xavzq9WwuFHep0;
sput-object v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
return-void
.end method
.method public constructor <init>()V
.registers 1
.line 34
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method static synthetic lambda$static$0()[Lcom/google/android/exoplayer2/extractor/Extractor;
.registers 3
.line 37
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
new-instance v1, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
# virtual methods
.method public init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
.registers 4
.param p1, "output" # Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.line 55
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.line 56
const/4 v0, 0x0
const/4 v1, 0x1
invoke-interface {p1, v0, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 57
const/4 v0, 0x0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
.line 58
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->endTracks()V
.line 59
return-void
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.registers 24
.param p1, "input" # Lcom/google/android/exoplayer2/extractor/ExtractorInput;
.param p2, "seekPosition" # Lcom/google/android/exoplayer2/extractor/PositionHolder;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 74
move-object/from16 v0, p0
move-object/from16 v1, p1
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
if-nez v2, :cond_4b
.line 75
invoke-static/range {p1 .. p1}, Lcom/google/android/exoplayer2/extractor/wav/WavHeaderReader;->peek(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
move-result-object v2
iput-object v2, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
.line 76
if-eqz v2, :cond_43
.line 80
const/4 v3, 0x0
const/4 v5, 0x0
.line 81
invoke-virtual {v2}, Lcom/google/android/exoplayer2/extractor/wav/WavHeader;->getBitrate()I
move-result v6
const v7, 0x8000
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/extractor/wav/WavHeader;->getNumChannels()I
move-result v8
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
.line 82
invoke-virtual {v2}, Lcom/google/android/exoplayer2/extractor/wav/WavHeader;->getSampleRateHz()I
move-result v9
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/extractor/wav/WavHeader;->getEncoding()I
move-result v10
const/4 v11, 0x0
const/4 v12, 0x0
const/4 v13, 0x0
const/4 v14, 0x0
.line 80
const-string v4, "audio/raw"
invoke-static/range {v3 .. v14}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;
move-result-object v2
.line 83
.local v2, "format":Lcom/google/android/exoplayer2/Format;
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v3, v2}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 84
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
invoke-virtual {v3}, Lcom/google/android/exoplayer2/extractor/wav/WavHeader;->getBytesPerFrame()I
move-result v3
iput v3, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->bytesPerFrame:I
goto :goto_4b
.line 78
.end local v2 # "format":Lcom/google/android/exoplayer2/Format;
:cond_43
new-instance v2, Lcom/google/android/exoplayer2/ParserException;
const-string v3, "Unsupported or unrecognized wav header."
invoke-direct {v2, v3}, Lcom/google/android/exoplayer2/ParserException;-><init>(Ljava/lang/String;)V
throw v2
.line 87
:cond_4b
:goto_4b
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/extractor/wav/WavHeader;->hasDataBounds()Z
move-result v2
if-nez v2, :cond_5f
.line 88
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
invoke-static {v1, v2}, Lcom/google/android/exoplayer2/extractor/wav/WavHeaderReader;->skipToData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/wav/WavHeader;)V
.line 89
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->extractorOutput:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
invoke-interface {v2, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->seekMap(Lcom/google/android/exoplayer2/extractor/SeekMap;)V
.line 92
:cond_5f
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/extractor/wav/WavHeader;->getDataLimit()J
move-result-wide v2
.line 93
.local v2, "dataLimit":J
const-wide/16 v4, -0x1
const/4 v6, 0x1
const/4 v7, 0x0
cmp-long v8, v2, v4
if-eqz v8, :cond_6f
const/4 v4, 0x1
goto :goto_70
:cond_6f
const/4 v4, 0x0
:goto_70
invoke-static {v4}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 95
invoke-interface/range {p1 .. p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v4
sub-long v4, v2, v4
.line 96
.local v4, "bytesLeft":J
const-wide/16 v8, 0x0
const/4 v10, -0x1
cmp-long v11, v4, v8
if-gtz v11, :cond_81
.line 97
return v10
.line 100
:cond_81
const v8, 0x8000
iget v9, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->pendingBytes:I
sub-int/2addr v8, v9
int-to-long v8, v8
invoke-static {v8, v9, v4, v5}, Ljava/lang/Math;->min(JJ)J
move-result-wide v8
long-to-int v9, v8
.line 101
.local v9, "maxBytesToRead":I
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v8, v1, v9, v6}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/extractor/ExtractorInput;IZ)I
move-result v6
.line 102
.local v6, "bytesAppended":I
if-eq v6, v10, :cond_9a
.line 103
iget v8, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->pendingBytes:I
add-int/2addr v8, v6
iput v8, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->pendingBytes:I
.line 107
:cond_9a
iget v8, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->pendingBytes:I
iget v11, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->bytesPerFrame:I
div-int/2addr v8, v11
.line 108
.local v8, "pendingFrames":I
if-lez v8, :cond_c7
.line 109
iget-object v11, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->wavHeader:Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
invoke-interface/range {p1 .. p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v12
iget v14, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->pendingBytes:I
int-to-long v14, v14
sub-long/2addr v12, v14
invoke-virtual {v11, v12, v13}, Lcom/google/android/exoplayer2/extractor/wav/WavHeader;->getTimeUs(J)J
move-result-wide v11
.line 110
.local v11, "timeUs":J
iget v13, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->bytesPerFrame:I
mul-int v13, v13, v8
.line 111
.local v13, "size":I
iget v14, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->pendingBytes:I
sub-int v15, v14, v13
iput v15, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->pendingBytes:I
.line 112
iget-object v14, v0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->trackOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
const/16 v17, 0x1
const/16 v20, 0x0
move/from16 v19, v15
move-wide v15, v11
move/from16 v18, v13
invoke-interface/range {v14 .. v20}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIIILcom/google/android/exoplayer2/extractor/TrackOutput$CryptoData;)V
.line 115
.end local v11 # "timeUs":J
.end local v13 # "size":I
:cond_c7
if-ne v6, v10, :cond_ca
const/4 v7, -0x1
:cond_ca
return v7
.end method
.method public release()V
.registers 1
.line 69
return-void
.end method
.method public seek(JJ)V
.registers 6
.param p1, "position" # J
.param p3, "timeUs" # J
.line 63
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/wav/WavExtractor;->pendingBytes:I
.line 64
return-void
.end method
.method public sniff(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.registers 3
.param p1, "input" # Lcom/google/android/exoplayer2/extractor/ExtractorInput;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 50
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/wav/WavHeaderReader;->peek(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Lcom/google/android/exoplayer2/extractor/wav/WavHeader;
move-result-object v0
if-eqz v0, :cond_8
const/4 v0, 0x1
goto :goto_9
:cond_8
const/4 v0, 0x0
:goto_9
return v0
.end method