MpegAudioReader.smali
.class public final Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;
.super Ljava/lang/Object;
.source "MpegAudioReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
# static fields
.field private static final HEADER_SIZE:I
.field private static final STATE_FINDING_HEADER:I
.field private static final STATE_READING_FRAME:I
.field private static final STATE_READING_HEADER:I
# instance fields
.field private formatId:Ljava/lang/String;
.field private frameBytesRead:I
.field private frameDurationUs:J
.field private frameSize:I
.field private hasOutputFormat:Z
.field private final header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
.field private final headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final language:Ljava/lang/String;
.field private lastByteWasFF:Z
.field private output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private state:I
.field private timeUs:J
# direct methods
.method static constructor <clinit>()V
.registers 1
const v0, 0x156b
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->HEADER_SIZE:I
const v0, 0x156f
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->STATE_FINDING_HEADER:I
const v0, 0x156d
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->STATE_READING_FRAME:I
const v0, 0x156e
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->STATE_READING_HEADER:I
return-void
.end method
.method public constructor <init>()V
.registers 2
.line 59
const/4 v0, 0x0
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;-><init>(Ljava/lang/String;)V
.line 60
return-void
.end method
.method public constructor <init>(Ljava/lang/String;)V
.registers 5
.param p1, "language" # Ljava/lang/String;
.line 62
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 63
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
.line 65
new-instance v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v2, 0x4
invoke-direct {v1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 66
iget-object v1, v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v2, -0x1
aput-byte v2, v1, v0
.line 67
new-instance v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
.line 68
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->language:Ljava/lang/String;
.line 69
return-void
.end method
.method private findHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.registers 11
.param p1, "source" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 127
iget-object v0, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 128
.local v0, "data":[B
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v1
.line 129
.local v1, "startOffset":I
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v2
.line 130
.local v2, "endOffset":I
move v3, v1
.local v3, "i":I
:goto_b
if-ge v3, v2, :cond_43
.line 131
aget-byte v4, v0, v3
const/16 v5, 0xff
and-int/2addr v4, v5
const/4 v6, 0x0
const/4 v7, 0x1
if-ne v4, v5, :cond_18
const/4 v4, 0x1
goto :goto_19
:cond_18
const/4 v4, 0x0
.line 132
.local v4, "byteIsFF":Z
:goto_19
iget-boolean v5, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->lastByteWasFF:Z
if-eqz v5, :cond_26
aget-byte v5, v0, v3
const/16 v8, 0xe0
and-int/2addr v5, v8
if-ne v5, v8, :cond_26
const/4 v5, 0x1
goto :goto_27
:cond_26
const/4 v5, 0x0
.line 133
.local v5, "found":Z
:goto_27
iput-boolean v4, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->lastByteWasFF:Z
.line 134
if-eqz v5, :cond_40
.line 135
add-int/lit8 v8, v3, 0x1
invoke-virtual {p1, v8}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 137
iput-boolean v6, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->lastByteWasFF:Z
.line 138
iget-object v6, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v6, v6, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
aget-byte v8, v0, v3
aput-byte v8, v6, v7
.line 139
const/4 v6, 0x2
iput v6, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 140
iput v7, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
.line 141
return-void
.line 130
.end local v4 # "byteIsFF":Z
.end local v5 # "found":Z
:cond_40
add-int/lit8 v3, v3, 0x1
goto :goto_b
.line 144
.end local v3 # "i":I
:cond_43
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 145
return-void
.end method
.method private readFrameRemainder(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.registers 11
.param p1, "source" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 209
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameSize:I
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
sub-int/2addr v1, v2
invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
move-result v0
.line 210
.local v0, "bytesToRead":I
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v1, p1, v0}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 211
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
add-int/2addr v1, v0
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 212
iget v6, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameSize:I
if-ge v1, v6, :cond_1c
.line 214
return-void
.line 217
:cond_1c
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->timeUs:J
const/4 v5, 0x1
const/4 v7, 0x0
const/4 v8, 0x0
invoke-interface/range {v2 .. v8}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIIILcom/google/android/exoplayer2/extractor/TrackOutput$CryptoData;)V
.line 218
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->timeUs:J
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameDurationUs:J
add-long/2addr v1, v3
iput-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->timeUs:J
.line 219
const/4 v1, 0x0
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 220
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
.line 221
return-void
.end method
.method private readHeaderRemainder(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.registers 24
.param p1, "source" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 164
move-object/from16 v0, p0
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v1
iget v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
const/4 v3, 0x4
rsub-int/lit8 v2, v2, 0x4
invoke-static {v1, v2}, Ljava/lang/Math;->min(II)I
move-result v1
.line 165
.local v1, "bytesToRead":I
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v2, v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v4, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
move-object/from16 v5, p1
invoke-virtual {v5, v2, v4, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 166
iget v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
add-int/2addr v2, v1
iput v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 167
if-ge v2, v3, :cond_22
.line 169
return-void
.line 172
:cond_22
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v4, 0x0
invoke-virtual {v2, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 173
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v2
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
invoke-static {v2, v6}, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->populateHeader(ILcom/google/android/exoplayer2/extractor/MpegAudioHeader;)Z
move-result v2
.line 174
.local v2, "parsedHeader":Z
const/4 v6, 0x1
if-nez v2, :cond_3c
.line 176
iput v4, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 177
iput v6, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
.line 178
return-void
.line 181
:cond_3c
iget-object v7, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
iget v7, v7, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->frameSize:I
iput v7, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameSize:I
.line 182
iget-boolean v7, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->hasOutputFormat:Z
if-nez v7, :cond_83
.line 183
const-wide/32 v7, 0xf4240
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
iget v9, v9, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->samplesPerFrame:I
int-to-long v9, v9
mul-long v9, v9, v7
iget-object v7, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
iget v7, v7, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->sampleRate:I
int-to-long v7, v7
div-long/2addr v9, v7
iput-wide v9, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameDurationUs:J
.line 184
iget-object v11, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->formatId:Ljava/lang/String;
iget-object v7, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
iget-object v12, v7, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->mimeType:Ljava/lang/String;
const/4 v13, 0x0
const/4 v14, -0x1
const/16 v15, 0x1000
iget-object v7, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
iget v7, v7, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->channels:I
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
iget v8, v8, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->sampleRate:I
const/16 v18, 0x0
const/16 v19, 0x0
const/16 v20, 0x0
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->language:Ljava/lang/String;
move/from16 v16, v7
move/from16 v17, v8
move-object/from16 v21, v9
invoke-static/range {v11 .. v21}, 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 v7
.line 187
.local v7, "format":Lcom/google/android/exoplayer2/Format;
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v8, v7}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 188
iput-boolean v6, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->hasOutputFormat:Z
.line 191
.end local v7 # "format":Lcom/google/android/exoplayer2/Format;
:cond_83
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v6, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 192
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-interface {v4, v6, v3}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 193
const/4 v3, 0x2
iput v3, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
.line 194
return-void
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.registers 4
.param p1, "data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 92
:goto_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
if-lez v0, :cond_22
.line 93
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
if-eqz v0, :cond_1e
const/4 v1, 0x1
if-eq v0, v1, :cond_1a
const/4 v1, 0x2
if-ne v0, v1, :cond_14
.line 101
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->readFrameRemainder(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.line 102
goto :goto_0
.line 104
:cond_14
new-instance v0, Ljava/lang/IllegalStateException;
invoke-direct {v0}, Ljava/lang/IllegalStateException;-><init>()V
throw v0
.line 98
:cond_1a
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->readHeaderRemainder(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.line 99
goto :goto_0
.line 95
:cond_1e
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->findHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.line 96
goto :goto_0
.line 107
:cond_22
return-void
.end method
.method public createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.registers 5
.param p1, "extractorOutput" # Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.param p2, "idGenerator" # Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;
.line 80
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 81
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->formatId:Ljava/lang/String;
.line 82
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result v0
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/ts/MpegAudioReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 83
return-void
.end method
.method public packetFinished()V
.registers 1
.line 112
return-void
.end method
.method public packetStarted(JI)V
.registers 4
.param p1, "pesTimeUs" # J
.param p3, "flags" # I
.line 87
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->timeUs:J
.line 88
return-void
.end method
.method public seek()V
.registers 2
.line 73
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
.line 74
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 75
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->lastByteWasFF:Z
.line 76
return-void
.end method