Id3Peeker.smali
.class public final Lcom/google/android/exoplayer2/extractor/Id3Peeker;
.super Ljava/lang/Object;
.source "Id3Peeker.java"
# instance fields
.field private final scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>()V
.registers 3
.line 33
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 34
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0xa
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/Id3Peeker;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 35
return-void
.end method
# virtual methods
.method public peekId3Data(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)Lcom/google/android/exoplayer2/metadata/Metadata;
.registers 11
.param p1, "input" # Lcom/google/android/exoplayer2/extractor/ExtractorInput;
.param p2, "id3FramePredicate" # Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 52
const/4 v0, 0x0
.line 53
.local v0, "peekedId3Bytes":I
const/4 v1, 0x0
.line 56
.local v1, "metadata":Lcom/google/android/exoplayer2/metadata/Metadata;
:goto_2
:try_start_2
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/Id3Peeker;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v2, v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v3, 0xa
const/4 v4, 0x0
invoke-interface {p1, v2, v4, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
:try_end_c
.catch Ljava/io/EOFException; {:try_start_2 .. :try_end_c} :catch_48
.line 60
nop
.line 61
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/Id3Peeker;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v2, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 62
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/Id3Peeker;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v2
sget v5, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->ID3_TAG:I
if-eq v2, v5, :cond_1d
.line 64
goto :goto_4a
.line 66
:cond_1d
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/Id3Peeker;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v5, 0x3
invoke-virtual {v2, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 67
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/Id3Peeker;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readSynchSafeInt()I
move-result v2
.line 68
.local v2, "framesLength":I
add-int/lit8 v5, v2, 0xa
.line 70
.local v5, "tagLength":I
if-nez v1, :cond_43
.line 71
new-array v6, v5, [B
.line 72
.local v6, "id3Data":[B
iget-object v7, p0, Lcom/google/android/exoplayer2/extractor/Id3Peeker;->scratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v7, v7, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-static {v7, v4, v6, v4, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 73
invoke-interface {p1, v6, v3, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 75
new-instance v3, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;
invoke-direct {v3, p2}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;-><init>(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)V
invoke-virtual {v3, v6, v5}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decode([BI)Lcom/google/android/exoplayer2/metadata/Metadata;
move-result-object v1
.line 76
.end local v6 # "id3Data":[B
goto :goto_46
.line 77
:cond_43
invoke-interface {p1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
.line 80
:goto_46
add-int/2addr v0, v5
.line 81
.end local v2 # "framesLength":I
.end local v5 # "tagLength":I
goto :goto_2
.line 57
:catch_48
move-exception v2
.line 59
.local v2, "e":Ljava/io/EOFException;
nop
.line 83
.end local v2 # "e":Ljava/io/EOFException;
:goto_4a
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->resetPeekPosition()V
.line 84
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
.line 85
return-object v1
.end method