Id3Decoder.smali
.class public final Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;
.super Ljava/lang/Object;
.source "Id3Decoder.java"
# interfaces
.implements Lcom/google/android/exoplayer2/metadata/MetadataDecoder;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;,
Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
}
.end annotation
# static fields
.field private static final FRAME_FLAG_V3_HAS_GROUP_IDENTIFIER:I = 0x20
.field private static final FRAME_FLAG_V3_IS_COMPRESSED:I = 0x80
.field private static final FRAME_FLAG_V3_IS_ENCRYPTED:I = 0x40
.field private static final FRAME_FLAG_V4_HAS_DATA_LENGTH:I = 0x1
.field private static final FRAME_FLAG_V4_HAS_GROUP_IDENTIFIER:I = 0x40
.field private static final FRAME_FLAG_V4_IS_COMPRESSED:I = 0x8
.field private static final FRAME_FLAG_V4_IS_ENCRYPTED:I = 0x4
.field private static final FRAME_FLAG_V4_IS_UNSYNCHRONIZED:I = 0x2
.field public static final ID3_HEADER_LENGTH:I = 0xa
.field public static final ID3_TAG:I
.field private static final ID3_TEXT_ENCODING_ISO_8859_1:I = 0x0
.field private static final ID3_TEXT_ENCODING_UTF_16:I = 0x1
.field private static final ID3_TEXT_ENCODING_UTF_16BE:I = 0x2
.field private static final ID3_TEXT_ENCODING_UTF_8:I = 0x3
.field public static final NO_FRAMES_PREDICATE:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
.field private static final TAG:Ljava/lang/String; = "Id3Decoder"
# instance fields
.field private final framePredicate:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 59
sget-object v0, Lcom/google/android/exoplayer2/metadata/id3/-$$Lambda$Id3Decoder$7M0gB-IGKaTbyTVX-WCb62bIHyc;->INSTANCE:Lcom/google/android/exoplayer2/metadata/id3/-$$Lambda$Id3Decoder$7M0gB-IGKaTbyTVX-WCb62bIHyc;
sput-object v0, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->NO_FRAMES_PREDICATE:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
.line 67
const-string v0, "ID3"
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->ID3_TAG:I
return-void
.end method
.method public constructor <init>()V
.registers 2
.line 90
const/4 v0, 0x0
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;-><init>(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)V
.line 91
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)V
.registers 2
.param p1, "framePredicate" # Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
.line 96
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 97
iput-object p1, p0, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->framePredicate:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
.line 98
return-void
.end method
.method private static copyOfRangeIfValid([BII)[B
.registers 4
.param p0, "data" # [B
.param p1, "from" # I
.param p2, "to" # I
.line 793
if-gt p2, p1, :cond_5
.line 795
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->EMPTY_BYTE_ARRAY:[B
return-object v0
.line 797
:cond_5
invoke-static {p0, p1, p2}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v0
return-object v0
.end method
.method private static decodeApicFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;II)Lcom/google/android/exoplayer2/metadata/id3/ApicFrame;
.registers 15
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.param p2, "majorVersion" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 524
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
.line 525
.local v0, "encoding":I
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->getCharsetName(I)Ljava/lang/String;
move-result-object v1
.line 527
.local v1, "charset":Ljava/lang/String;
add-int/lit8 v2, p1, -0x1
new-array v2, v2, [B
.line 528
.local v2, "data":[B
add-int/lit8 v3, p1, -0x1
const/4 v4, 0x0
invoke-virtual {p0, v2, v4, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 532
const-string v3, "image/"
const-string v5, "ISO-8859-1"
const/4 v6, 0x2
if-ne p2, v6, :cond_3e
.line 533
const/4 v6, 0x2
.line 534
.local v6, "mimeTypeEndIndex":I
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
new-instance v3, Ljava/lang/String;
const/4 v8, 0x3
invoke-direct {v3, v2, v4, v8, v5}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
invoke-static {v3}, Lcom/google/android/exoplayer2/util/Util;->toLowerInvariant(Ljava/lang/String;)Ljava/lang/String;
move-result-object v3
invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
.line 535
.local v3, "mimeType":Ljava/lang/String;
const-string v4, "image/jpg"
invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_65
.line 536
const-string v3, "image/jpeg"
goto :goto_65
.line 539
.end local v3 # "mimeType":Ljava/lang/String;
.end local v6 # "mimeTypeEndIndex":I
:cond_3e
invoke-static {v2, v4}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfZeroByte([BI)I
move-result v6
.line 540
.restart local v6 # "mimeTypeEndIndex":I
new-instance v7, Ljava/lang/String;
invoke-direct {v7, v2, v4, v6, v5}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
invoke-static {v7}, Lcom/google/android/exoplayer2/util/Util;->toLowerInvariant(Ljava/lang/String;)Ljava/lang/String;
move-result-object v4
.line 541
.local v4, "mimeType":Ljava/lang/String;
const/16 v5, 0x2f
invoke-virtual {v4, v5}, Ljava/lang/String;->indexOf(I)I
move-result v5
const/4 v7, -0x1
if-ne v5, v7, :cond_64
.line 542
new-instance v5, Ljava/lang/StringBuilder;
invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v5, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v5, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
.end local v4 # "mimeType":Ljava/lang/String;
.restart local v3 # "mimeType":Ljava/lang/String;
goto :goto_65
.line 541
.end local v3 # "mimeType":Ljava/lang/String;
.restart local v4 # "mimeType":Ljava/lang/String;
:cond_64
move-object v3, v4
.line 546
.end local v4 # "mimeType":Ljava/lang/String;
.restart local v3 # "mimeType":Ljava/lang/String;
:cond_65
:goto_65
add-int/lit8 v4, v6, 0x1
aget-byte v4, v2, v4
and-int/lit16 v4, v4, 0xff
.line 548
.local v4, "pictureType":I
add-int/lit8 v5, v6, 0x2
.line 549
.local v5, "descriptionStartIndex":I
invoke-static {v2, v5, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfEos([BII)I
move-result v7
.line 550
.local v7, "descriptionEndIndex":I
new-instance v8, Ljava/lang/String;
sub-int v9, v7, v5
invoke-direct {v8, v2, v5, v9, v1}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
.line 553
.local v8, "description":Ljava/lang/String;
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->delimiterLength(I)I
move-result v9
add-int/2addr v9, v7
.line 554
.local v9, "pictureDataStartIndex":I
array-length v10, v2
invoke-static {v2, v9, v10}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->copyOfRangeIfValid([BII)[B
move-result-object v10
.line 556
.local v10, "pictureData":[B
new-instance v11, Lcom/google/android/exoplayer2/metadata/id3/ApicFrame;
invoke-direct {v11, v3, v8, v4, v10}, Lcom/google/android/exoplayer2/metadata/id3/ApicFrame;-><init>(Ljava/lang/String;Ljava/lang/String;I[B)V
return-object v11
.end method
.method private static decodeBinaryFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;ILjava/lang/String;)Lcom/google/android/exoplayer2/metadata/id3/BinaryFrame;
.registers 5
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.param p2, "id" # Ljava/lang/String;
.line 700
new-array v0, p1, [B
.line 701
.local v0, "frame":[B
const/4 v1, 0x0
invoke-virtual {p0, v0, v1, p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 703
new-instance v1, Lcom/google/android/exoplayer2/metadata/id3/BinaryFrame;
invoke-direct {v1, p2, v0}, Lcom/google/android/exoplayer2/metadata/id3/BinaryFrame;-><init>(Ljava/lang/String;[B)V
return-object v1
.end method
.method private static decodeChapterFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;IIZILcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)Lcom/google/android/exoplayer2/metadata/id3/ChapterFrame;
.registers 28
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.param p2, "majorVersion" # I
.param p3, "unsignedIntFrameSizeHack" # Z
.param p4, "frameHeaderSize" # I
.param p5, "framePredicate" # Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 594
move-object/from16 v0, p0
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v1
.line 595
.local v1, "framePosition":I
iget-object v2, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-static {v2, v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfZeroByte([BI)I
move-result v2
.line 596
.local v2, "chapterIdEndIndex":I
new-instance v4, Ljava/lang/String;
iget-object v3, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
sub-int v5, v2, v1
const-string v6, "ISO-8859-1"
invoke-direct {v4, v3, v1, v5, v6}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
.line 598
.local v4, "chapterId":Ljava/lang/String;
add-int/lit8 v3, v2, 0x1
invoke-virtual {v0, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 600
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v12
.line 601
.local v12, "startTime":I
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v13
.line 602
.local v13, "endTime":I
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v5
.line 603
.local v5, "startOffset":J
const-wide v7, 0xffffffffL
cmp-long v3, v5, v7
if-nez v3, :cond_35
.line 604
const-wide/16 v5, -0x1
move-wide v14, v5
goto :goto_36
.line 603
:cond_35
move-wide v14, v5
.line 606
.end local v5 # "startOffset":J
.local v14, "startOffset":J
:goto_36
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v5
.line 607
.local v5, "endOffset":J
cmp-long v3, v5, v7
if-nez v3, :cond_43
.line 608
const-wide/16 v5, -0x1
move-wide/from16 v16, v5
goto :goto_45
.line 607
:cond_43
move-wide/from16 v16, v5
.line 611
.end local v5 # "endOffset":J
.local v16, "endOffset":J
:goto_45
new-instance v3, Ljava/util/ArrayList;
invoke-direct {v3}, Ljava/util/ArrayList;-><init>()V
move-object v11, v3
.line 612
.local v11, "subFrames":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;>;"
add-int v9, v1, p1
.line 613
.local v9, "limit":I
:goto_4d
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v3
if-ge v3, v9, :cond_65
.line 614
move/from16 v10, p2
move/from16 v7, p3
move/from16 v8, p4
move-object/from16 v6, p5
invoke-static {v10, v0, v7, v8, v6}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeFrame(ILcom/google/android/exoplayer2/util/ParsableByteArray;ZILcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
move-result-object v3
.line 616
.local v3, "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
if-eqz v3, :cond_64
.line 617
invoke-virtual {v11, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 619
.end local v3 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_64
goto :goto_4d
.line 621
:cond_65
move/from16 v10, p2
move/from16 v7, p3
move/from16 v8, p4
move-object/from16 v6, p5
invoke-virtual {v11}, Ljava/util/ArrayList;->size()I
move-result v3
new-array v5, v3, [Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
.line 622
.local v5, "subFrameArray":[Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
invoke-virtual {v11, v5}, Ljava/util/ArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
.line 623
new-instance v18, Lcom/google/android/exoplayer2/metadata/id3/ChapterFrame;
move-object/from16 v3, v18
move-object/from16 v19, v5
.end local v5 # "subFrameArray":[Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
.local v19, "subFrameArray":[Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
move v5, v12
move v6, v13
move-wide v7, v14
move/from16 v20, v9
.end local v9 # "limit":I
.local v20, "limit":I
move-wide/from16 v9, v16
move-object/from16 v21, v11
.end local v11 # "subFrames":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;>;"
.local v21, "subFrames":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;>;"
move-object/from16 v11, v19
invoke-direct/range {v3 .. v11}, Lcom/google/android/exoplayer2/metadata/id3/ChapterFrame;-><init>(Ljava/lang/String;IIJJ[Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;)V
return-object v18
.end method
.method private static decodeChapterTOCFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;IIZILcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)Lcom/google/android/exoplayer2/metadata/id3/ChapterTocFrame;
.registers 24
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.param p2, "majorVersion" # I
.param p3, "unsignedIntFrameSizeHack" # Z
.param p4, "frameHeaderSize" # I
.param p5, "framePredicate" # Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 634
move-object/from16 v0, p0
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v1
.line 635
.local v1, "framePosition":I
iget-object v2, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-static {v2, v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfZeroByte([BI)I
move-result v2
.line 636
.local v2, "elementIdEndIndex":I
new-instance v4, Ljava/lang/String;
iget-object v3, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
sub-int v5, v2, v1
const-string v7, "ISO-8859-1"
invoke-direct {v4, v3, v1, v5, v7}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
.line 638
.local v4, "elementId":Ljava/lang/String;
add-int/lit8 v3, v2, 0x1
invoke-virtual {v0, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 640
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v9
.line 641
.local v9, "ctocFlags":I
and-int/lit8 v3, v9, 0x2
const/4 v6, 0x0
const/4 v8, 0x1
if-eqz v3, :cond_28
const/4 v5, 0x1
goto :goto_29
:cond_28
const/4 v5, 0x0
.line 642
.local v5, "isRoot":Z
:goto_29
and-int/lit8 v3, v9, 0x1
if-eqz v3, :cond_2e
const/4 v6, 0x1
.line 644
.local v6, "isOrdered":Z
:cond_2e
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v10
.line 645
.local v10, "childCount":I
new-array v11, v10, [Ljava/lang/String;
.line 646
.local v11, "children":[Ljava/lang/String;
const/4 v3, 0x0
.local v3, "i":I
:goto_35
if-ge v3, v10, :cond_54
.line 647
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v8
.line 648
.local v8, "startIndex":I
iget-object v12, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-static {v12, v8}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfZeroByte([BI)I
move-result v12
.line 649
.local v12, "endIndex":I
new-instance v13, Ljava/lang/String;
iget-object v14, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
sub-int v15, v12, v8
invoke-direct {v13, v14, v8, v15, v7}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
aput-object v13, v11, v3
.line 650
add-int/lit8 v13, v12, 0x1
invoke-virtual {v0, v13}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 646
.end local v8 # "startIndex":I
.end local v12 # "endIndex":I
add-int/lit8 v3, v3, 0x1
goto :goto_35
.line 653
.end local v3 # "i":I
:cond_54
new-instance v3, Ljava/util/ArrayList;
invoke-direct {v3}, Ljava/util/ArrayList;-><init>()V
move-object v12, v3
.line 654
.local v12, "subFrames":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;>;"
add-int v13, v1, p1
.line 655
.local v13, "limit":I
:goto_5c
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v3
if-ge v3, v13, :cond_74
.line 656
move/from16 v14, p2
move/from16 v15, p3
move/from16 v8, p4
move-object/from16 v7, p5
invoke-static {v14, v0, v15, v8, v7}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeFrame(ILcom/google/android/exoplayer2/util/ParsableByteArray;ZILcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
move-result-object v3
.line 658
.local v3, "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
if-eqz v3, :cond_73
.line 659
invoke-virtual {v12, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 661
.end local v3 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_73
goto :goto_5c
.line 663
:cond_74
move/from16 v14, p2
move/from16 v15, p3
move/from16 v8, p4
move-object/from16 v7, p5
invoke-virtual {v12}, Ljava/util/ArrayList;->size()I
move-result v3
new-array v3, v3, [Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
.line 664
.local v3, "subFrameArray":[Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
invoke-virtual {v12, v3}, Ljava/util/ArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
.line 665
new-instance v16, Lcom/google/android/exoplayer2/metadata/id3/ChapterTocFrame;
move-object/from16 v17, v3
.end local v3 # "subFrameArray":[Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
.local v17, "subFrameArray":[Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
move-object/from16 v3, v16
move-object v7, v11
move-object/from16 v8, v17
invoke-direct/range {v3 .. v8}, Lcom/google/android/exoplayer2/metadata/id3/ChapterTocFrame;-><init>(Ljava/lang/String;ZZ[Ljava/lang/String;[Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;)V
return-object v16
.end method
.method private static decodeCommentFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/CommentFrame;
.registers 12
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 561
const/4 v0, 0x4
if-ge p1, v0, :cond_5
.line 563
const/4 v0, 0x0
return-object v0
.line 566
:cond_5
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
.line 567
.local v0, "encoding":I
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->getCharsetName(I)Ljava/lang/String;
move-result-object v1
.line 569
.local v1, "charset":Ljava/lang/String;
const/4 v2, 0x3
new-array v3, v2, [B
.line 570
.local v3, "data":[B
const/4 v4, 0x0
invoke-virtual {p0, v3, v4, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 571
new-instance v5, Ljava/lang/String;
invoke-direct {v5, v3, v4, v2}, Ljava/lang/String;-><init>([BII)V
move-object v2, v5
.line 573
.local v2, "language":Ljava/lang/String;
add-int/lit8 v5, p1, -0x4
new-array v3, v5, [B
.line 574
add-int/lit8 v5, p1, -0x4
invoke-virtual {p0, v3, v4, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 576
invoke-static {v3, v4, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfEos([BII)I
move-result v5
.line 577
.local v5, "descriptionEndIndex":I
new-instance v6, Ljava/lang/String;
invoke-direct {v6, v3, v4, v5, v1}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
move-object v4, v6
.line 579
.local v4, "description":Ljava/lang/String;
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->delimiterLength(I)I
move-result v6
add-int/2addr v6, v5
.line 580
.local v6, "textStartIndex":I
invoke-static {v3, v6, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfEos([BII)I
move-result v7
.line 581
.local v7, "textEndIndex":I
invoke-static {v3, v6, v7, v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeStringIfValid([BIILjava/lang/String;)Ljava/lang/String;
move-result-object v8
.line 583
.local v8, "text":Ljava/lang/String;
new-instance v9, Lcom/google/android/exoplayer2/metadata/id3/CommentFrame;
invoke-direct {v9, v2, v4, v8}, Lcom/google/android/exoplayer2/metadata/id3/CommentFrame;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
return-object v9
.end method
.method private static decodeFrame(ILcom/google/android/exoplayer2/util/ParsableByteArray;ZILcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
.registers 28
.param p0, "majorVersion" # I
.param p1, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p2, "unsignedIntFrameSizeHack" # Z
.param p3, "frameHeaderSize" # I
.param p4, "framePredicate" # Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
.line 277
move/from16 v7, p0
move-object/from16 v8, p1
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v9
.line 278
.local v9, "frameId0":I
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v10
.line 279
.local v10, "frameId1":I
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v11
.line 280
.local v11, "frameId2":I
const/4 v0, 0x3
if-lt v7, v0, :cond_18
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v1
goto :goto_19
:cond_18
const/4 v1, 0x0
:goto_19
move v13, v1
.line 283
.local v13, "frameId3":I
const/4 v14, 0x4
if-ne v7, v14, :cond_3f
.line 284
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v1
.line 285
.local v1, "frameSize":I
if-nez p2, :cond_3d
.line 286
and-int/lit16 v2, v1, 0xff
shr-int/lit8 v3, v1, 0x8
and-int/lit16 v3, v3, 0xff
shl-int/lit8 v3, v3, 0x7
or-int/2addr v2, v3
shr-int/lit8 v3, v1, 0x10
and-int/lit16 v3, v3, 0xff
shl-int/lit8 v3, v3, 0xe
or-int/2addr v2, v3
shr-int/lit8 v3, v1, 0x18
and-int/lit16 v3, v3, 0xff
shl-int/lit8 v3, v3, 0x15
or-int v1, v2, v3
move v15, v1
goto :goto_4c
.line 285
:cond_3d
move v15, v1
goto :goto_4c
.line 289
.end local v1 # "frameSize":I
:cond_3f
if-ne v7, v0, :cond_47
.line 290
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v1
move v15, v1
.restart local v1 # "frameSize":I
goto :goto_4c
.line 292
.end local v1 # "frameSize":I
:cond_47
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v1
move v15, v1
.line 295
.local v15, "frameSize":I
:goto_4c
if-lt v7, v0, :cond_53
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v1
goto :goto_54
:cond_53
const/4 v1, 0x0
:goto_54
move v6, v1
.line 296
.local v6, "flags":I
const/16 v16, 0x0
if-nez v9, :cond_6b
if-nez v10, :cond_6b
if-nez v11, :cond_6b
if-nez v13, :cond_6b
if-nez v15, :cond_6b
if-nez v6, :cond_6b
.line 299
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v0
invoke-virtual {v8, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 300
return-object v16
.line 303
:cond_6b
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v1
add-int v5, v1, v15
.line 304
.local v5, "nextFramePosition":I
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v1
const-string v4, "Id3Decoder"
if-le v5, v1, :cond_86
.line 305
const-string v0, "Frame size exceeds remaining tag data"
invoke-static {v4, v0}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 306
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v0
invoke-virtual {v8, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 307
return-object v16
.line 310
:cond_86
if-eqz p4, :cond_9f
.line 311
move-object/from16 v1, p4
move/from16 v2, p0
move v3, v9
move-object v12, v4
move v4, v10
move v14, v5
.end local v5 # "nextFramePosition":I
.local v14, "nextFramePosition":I
move v5, v11
move-object/from16 v18, v12
move v12, v6
.end local v6 # "flags":I
.local v12, "flags":I
move v6, v13
invoke-interface/range {v1 .. v6}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;->evaluate(IIIII)Z
move-result v1
if-nez v1, :cond_a3
.line 313
invoke-virtual {v8, v14}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 314
return-object v16
.line 310
.end local v12 # "flags":I
.end local v14 # "nextFramePosition":I
.restart local v5 # "nextFramePosition":I
.restart local v6 # "flags":I
:cond_9f
move-object/from16 v18, v4
move v14, v5
move v12, v6
.line 318
.end local v5 # "nextFramePosition":I
.end local v6 # "flags":I
.restart local v12 # "flags":I
.restart local v14 # "nextFramePosition":I
:cond_a3
const/4 v1, 0x0
.line 319
.local v1, "isCompressed":Z
const/4 v2, 0x0
.line 320
.local v2, "isEncrypted":Z
const/4 v3, 0x0
.line 321
.local v3, "isUnsynchronized":Z
const/4 v4, 0x0
.line 322
.local v4, "hasDataLength":Z
const/4 v5, 0x0
.line 323
.local v5, "hasGroupIdentifier":Z
const/4 v6, 0x1
if-ne v7, v0, :cond_d2
.line 324
and-int/lit16 v0, v12, 0x80
if-eqz v0, :cond_b1
const/4 v0, 0x1
goto :goto_b2
:cond_b1
const/4 v0, 0x0
:goto_b2
move v1, v0
.line 325
and-int/lit8 v0, v12, 0x40
if-eqz v0, :cond_b9
const/4 v0, 0x1
goto :goto_ba
:cond_b9
const/4 v0, 0x0
:goto_ba
move v2, v0
.line 326
and-int/lit8 v0, v12, 0x20
if-eqz v0, :cond_c2
const/16 v17, 0x1
goto :goto_c4
:cond_c2
const/16 v17, 0x0
:goto_c4
move/from16 v5, v17
.line 328
move v4, v1
move/from16 v17, v1
move/from16 v19, v2
move/from16 v20, v3
move/from16 v21, v4
move/from16 v22, v5
goto :goto_115
.line 329
:cond_d2
const/4 v0, 0x4
if-ne v7, v0, :cond_10b
.line 330
and-int/lit8 v0, v12, 0x40
if-eqz v0, :cond_db
const/4 v0, 0x1
goto :goto_dc
:cond_db
const/4 v0, 0x0
:goto_dc
move v5, v0
.line 331
and-int/lit8 v0, v12, 0x8
if-eqz v0, :cond_e3
const/4 v0, 0x1
goto :goto_e4
:cond_e3
const/4 v0, 0x0
:goto_e4
move v1, v0
.line 332
and-int/lit8 v0, v12, 0x4
if-eqz v0, :cond_eb
const/4 v0, 0x1
goto :goto_ec
:cond_eb
const/4 v0, 0x0
:goto_ec
move v2, v0
.line 333
and-int/lit8 v0, v12, 0x2
if-eqz v0, :cond_f3
const/4 v0, 0x1
goto :goto_f4
:cond_f3
const/4 v0, 0x0
:goto_f4
move v3, v0
.line 334
and-int/lit8 v0, v12, 0x1
if-eqz v0, :cond_fc
const/16 v17, 0x1
goto :goto_fe
:cond_fc
const/16 v17, 0x0
:goto_fe
move/from16 v4, v17
move/from16 v17, v1
move/from16 v19, v2
move/from16 v20, v3
move/from16 v21, v4
move/from16 v22, v5
goto :goto_115
.line 329
:cond_10b
move/from16 v17, v1
move/from16 v19, v2
move/from16 v20, v3
move/from16 v21, v4
move/from16 v22, v5
.line 337
.end local v1 # "isCompressed":Z
.end local v2 # "isEncrypted":Z
.end local v3 # "isUnsynchronized":Z
.end local v4 # "hasDataLength":Z
.end local v5 # "hasGroupIdentifier":Z
.local v17, "isCompressed":Z
.local v19, "isEncrypted":Z
.local v20, "isUnsynchronized":Z
.local v21, "hasDataLength":Z
.local v22, "hasGroupIdentifier":Z
:goto_115
if-nez v17, :cond_259
if-eqz v19, :cond_11d
move-object/from16 v2, v18
goto/16 :goto_25b
.line 343
:cond_11d
if-eqz v22, :cond_124
.line 344
add-int/lit8 v15, v15, -0x1
.line 345
invoke-virtual {v8, v6}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 347
:cond_124
if-eqz v21, :cond_12c
.line 348
add-int/lit8 v15, v15, -0x4
.line 349
const/4 v0, 0x4
invoke-virtual {v8, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 351
:cond_12c
if-eqz v20, :cond_132
.line 352
invoke-static {v8, v15}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->removeUnsynchronization(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)I
move-result v15
.line 357
:cond_132
const/16 v0, 0x54
const/4 v1, 0x2
const/16 v2, 0x58
if-ne v9, v0, :cond_147
if-ne v10, v2, :cond_147
if-ne v11, v2, :cond_147
if-eq v7, v1, :cond_141
if-ne v13, v2, :cond_147
.line 359
:cond_141
:try_start_141
invoke-static {v8, v15}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeTxxxFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/TextInformationFrame;
move-result-object v0
.local v0, "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto/16 :goto_21f
.line 360
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_147
if-ne v9, v0, :cond_15c
.line 361
invoke-static {v7, v9, v10, v11, v13}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->getFrameId(IIIII)Ljava/lang/String;
move-result-object v0
.line 362
.local v0, "id":Ljava/lang/String;
invoke-static {v8, v15, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeTextInformationFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;ILjava/lang/String;)Lcom/google/android/exoplayer2/metadata/id3/TextInformationFrame;
move-result-object v1
move-object v0, v1
.line 363
.local v0, "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto/16 :goto_21f
.line 402
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:catchall_154
move-exception v0
goto/16 :goto_255
.line 398
:catch_157
move-exception v0
move-object/from16 v2, v18
goto/16 :goto_24b
.line 363
:cond_15c
const/16 v3, 0x57
if-ne v9, v3, :cond_16e
if-ne v10, v2, :cond_16e
if-ne v11, v2, :cond_16e
if-eq v7, v1, :cond_168
if-ne v13, v2, :cond_16e
.line 365
:cond_168
invoke-static {v8, v15}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeWxxxFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/UrlLinkFrame;
move-result-object v0
.restart local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto/16 :goto_21f
.line 366
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_16e
if-ne v9, v3, :cond_17b
.line 367
invoke-static {v7, v9, v10, v11, v13}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->getFrameId(IIIII)Ljava/lang/String;
move-result-object v0
.line 368
.local v0, "id":Ljava/lang/String;
invoke-static {v8, v15, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeUrlLinkFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;ILjava/lang/String;)Lcom/google/android/exoplayer2/metadata/id3/UrlLinkFrame;
move-result-object v1
move-object v0, v1
.line 369
.local v0, "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto/16 :goto_21f
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_17b
const/16 v2, 0x49
const/16 v3, 0x50
if-ne v9, v3, :cond_191
const/16 v4, 0x52
if-ne v10, v4, :cond_191
if-ne v11, v2, :cond_191
const/16 v4, 0x56
if-ne v13, v4, :cond_191
.line 370
invoke-static {v8, v15}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodePrivFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/PrivFrame;
move-result-object v0
.restart local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto/16 :goto_21f
.line 371
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_191
const/16 v4, 0x47
const/16 v5, 0x4f
if-ne v9, v4, :cond_1a9
const/16 v4, 0x45
if-ne v10, v4, :cond_1a9
if-ne v11, v5, :cond_1a9
const/16 v4, 0x42
if-eq v13, v4, :cond_1a3
if-ne v7, v1, :cond_1a9
.line 373
:cond_1a3
invoke-static {v8, v15}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeGeobFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/GeobFrame;
move-result-object v0
.restart local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto/16 :goto_21f
.line 374
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_1a9
const/16 v4, 0x41
const/16 v6, 0x43
if-ne v7, v1, :cond_1b6
if-ne v9, v3, :cond_1c4
if-ne v10, v2, :cond_1c4
if-ne v11, v6, :cond_1c4
goto :goto_1be
:cond_1b6
if-ne v9, v4, :cond_1c4
if-ne v10, v3, :cond_1c4
if-ne v11, v2, :cond_1c4
if-ne v13, v6, :cond_1c4
.line 376
:goto_1be
invoke-static {v8, v15, v7}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeApicFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;II)Lcom/google/android/exoplayer2/metadata/id3/ApicFrame;
move-result-object v0
.restart local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto/16 :goto_21f
.line 377
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_1c4
const/16 v2, 0x4d
if-ne v9, v6, :cond_1d5
if-ne v10, v5, :cond_1d5
if-ne v11, v2, :cond_1d5
if-eq v13, v2, :cond_1d0
if-ne v7, v1, :cond_1d5
.line 379
:cond_1d0
invoke-static {v8, v15}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeCommentFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/CommentFrame;
move-result-object v0
.restart local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto :goto_21f
.line 380
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_1d5
if-ne v9, v6, :cond_1ef
const/16 v1, 0x48
if-ne v10, v1, :cond_1ef
if-ne v11, v4, :cond_1ef
if-ne v13, v3, :cond_1ef
.line 381
move-object/from16 v1, p1
move v2, v15
move/from16 v3, p0
move/from16 v4, p2
move/from16 v5, p3
move-object/from16 v6, p4
invoke-static/range {v1 .. v6}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeChapterFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;IIZILcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)Lcom/google/android/exoplayer2/metadata/id3/ChapterFrame;
move-result-object v0
.restart local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto :goto_21f
.line 383
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_1ef
if-ne v9, v6, :cond_207
if-ne v10, v0, :cond_207
if-ne v11, v5, :cond_207
if-ne v13, v6, :cond_207
.line 384
move-object/from16 v1, p1
move v2, v15
move/from16 v3, p0
move/from16 v4, p2
move/from16 v5, p3
move-object/from16 v6, p4
invoke-static/range {v1 .. v6}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeChapterTOCFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;IIZILcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)Lcom/google/android/exoplayer2/metadata/id3/ChapterTocFrame;
move-result-object v0
.restart local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto :goto_21f
.line 386
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_207
if-ne v9, v2, :cond_216
const/16 v1, 0x4c
if-ne v10, v1, :cond_216
if-ne v11, v1, :cond_216
if-ne v13, v0, :cond_216
.line 387
invoke-static {v8, v15}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeMlltFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/MlltFrame;
move-result-object v0
.restart local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
goto :goto_21f
.line 389
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_216
invoke-static {v7, v9, v10, v11, v13}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->getFrameId(IIIII)Ljava/lang/String;
move-result-object v0
.line 390
.local v0, "id":Ljava/lang/String;
invoke-static {v8, v15, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeBinaryFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;ILjava/lang/String;)Lcom/google/android/exoplayer2/metadata/id3/BinaryFrame;
move-result-object v1
move-object v0, v1
.line 392
.local v0, "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:goto_21f
if-nez v0, :cond_246
.line 393
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Failed to decode frame: id="
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 394
invoke-static {v7, v9, v10, v11, v13}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->getFrameId(IIIII)Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v2, ", frameSize="
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, v15}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
:try_end_23e
.catch Ljava/io/UnsupportedEncodingException; {:try_start_141 .. :try_end_23e} :catch_157
.catchall {:try_start_141 .. :try_end_23e} :catchall_154
.line 393
move-object/from16 v2, v18
:try_start_240
invoke-static {v2, v1}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
:try_end_243
.catch Ljava/io/UnsupportedEncodingException; {:try_start_240 .. :try_end_243} :catch_244
.catchall {:try_start_240 .. :try_end_243} :catchall_154
goto :goto_246
.line 398
.end local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:catch_244
move-exception v0
goto :goto_24b
.line 397
.restart local v0 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_246
:goto_246
nop
.line 402
invoke-virtual {v8, v14}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 397
return-object v0
.line 399
.local v0, "e":Ljava/io/UnsupportedEncodingException;
:goto_24b
:try_start_24b
const-string v1, "Unsupported character encoding"
invoke-static {v2, v1}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
:try_end_250
.catchall {:try_start_24b .. :try_end_250} :catchall_154
.line 400
nop
.line 402
invoke-virtual {v8, v14}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 400
return-object v16
.line 402
.end local v0 # "e":Ljava/io/UnsupportedEncodingException;
:goto_255
invoke-virtual {v8, v14}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 403
throw v0
.line 337
:cond_259
move-object/from16 v2, v18
.line 338
:goto_25b
const-string v0, "Skipping unsupported compressed or encrypted frame"
invoke-static {v2, v0}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 339
invoke-virtual {v8, v14}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 340
return-object v16
.end method
.method private static decodeGeobFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/GeobFrame;
.registers 16
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 498
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
.line 499
.local v0, "encoding":I
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->getCharsetName(I)Ljava/lang/String;
move-result-object v1
.line 501
.local v1, "charset":Ljava/lang/String;
add-int/lit8 v2, p1, -0x1
new-array v2, v2, [B
.line 502
.local v2, "data":[B
add-int/lit8 v3, p1, -0x1
const/4 v4, 0x0
invoke-virtual {p0, v2, v4, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 504
invoke-static {v2, v4}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfZeroByte([BI)I
move-result v3
.line 505
.local v3, "mimeTypeEndIndex":I
new-instance v5, Ljava/lang/String;
const-string v6, "ISO-8859-1"
invoke-direct {v5, v2, v4, v3, v6}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
move-object v4, v5
.line 507
.local v4, "mimeType":Ljava/lang/String;
add-int/lit8 v5, v3, 0x1
.line 508
.local v5, "filenameStartIndex":I
invoke-static {v2, v5, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfEos([BII)I
move-result v6
.line 509
.local v6, "filenameEndIndex":I
invoke-static {v2, v5, v6, v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeStringIfValid([BIILjava/lang/String;)Ljava/lang/String;
move-result-object v7
.line 511
.local v7, "filename":Ljava/lang/String;
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->delimiterLength(I)I
move-result v8
add-int/2addr v8, v6
.line 512
.local v8, "descriptionStartIndex":I
invoke-static {v2, v8, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfEos([BII)I
move-result v9
.line 513
.local v9, "descriptionEndIndex":I
nop
.line 514
invoke-static {v2, v8, v9, v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeStringIfValid([BIILjava/lang/String;)Ljava/lang/String;
move-result-object v10
.line 516
.local v10, "description":Ljava/lang/String;
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->delimiterLength(I)I
move-result v11
add-int/2addr v11, v9
.line 517
.local v11, "objectDataStartIndex":I
array-length v12, v2
invoke-static {v2, v11, v12}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->copyOfRangeIfValid([BII)[B
move-result-object v12
.line 519
.local v12, "objectData":[B
new-instance v13, Lcom/google/android/exoplayer2/metadata/id3/GeobFrame;
invoke-direct {v13, v4, v7, v10, v12}, Lcom/google/android/exoplayer2/metadata/id3/GeobFrame;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[B)V
return-object v13
.end method
.method private static decodeHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;
.registers 11
.param p0, "data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 158
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
const/4 v1, 0x0
const-string v2, "Id3Decoder"
const/16 v3, 0xa
if-ge v0, v3, :cond_11
.line 159
const-string v0, "Data too short to be an ID3 tag"
invoke-static {v2, v0}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 160
return-object v1
.line 163
:cond_11
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v0
.line 164
.local v0, "id":I
sget v3, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->ID3_TAG:I
if-eq v0, v3, :cond_2e
.line 165
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "Unexpected first three bytes of ID3 tag header: "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-static {v2, v3}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 166
return-object v1
.line 169
:cond_2e
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v3
.line 170
.local v3, "majorVersion":I
const/4 v4, 0x1
invoke-virtual {p0, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 171
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v5
.line 172
.local v5, "flags":I
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readSynchSafeInt()I
move-result v6
.line 174
.local v6, "framesSize":I
const/4 v7, 0x2
const/4 v8, 0x4
const/4 v9, 0x0
if-ne v3, v7, :cond_53
.line 175
and-int/lit8 v7, v5, 0x40
if-eqz v7, :cond_49
const/4 v7, 0x1
goto :goto_4a
:cond_49
const/4 v7, 0x0
.line 176
.local v7, "isCompressed":Z
:goto_4a
if-eqz v7, :cond_52
.line 177
const-string v4, "Skipped ID3 tag with majorVersion=2 and undefined compression scheme"
invoke-static {v2, v4}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 178
return-object v1
.line 180
.end local v7 # "isCompressed":Z
:cond_52
goto :goto_8b
:cond_53
const/4 v7, 0x3
if-ne v3, v7, :cond_6a
.line 181
and-int/lit8 v1, v5, 0x40
if-eqz v1, :cond_5c
const/4 v1, 0x1
goto :goto_5d
:cond_5c
const/4 v1, 0x0
.line 182
.local v1, "hasExtendedHeader":Z
:goto_5d
if-eqz v1, :cond_69
.line 183
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v2
.line 184
.local v2, "extendedHeaderSize":I
invoke-virtual {p0, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 185
add-int/lit8 v7, v2, 0x4
sub-int/2addr v6, v7
.line 187
.end local v1 # "hasExtendedHeader":Z
.end local v2 # "extendedHeaderSize":I
:cond_69
goto :goto_8b
:cond_6a
if-ne v3, v8, :cond_9a
.line 188
and-int/lit8 v1, v5, 0x40
if-eqz v1, :cond_72
const/4 v1, 0x1
goto :goto_73
:cond_72
const/4 v1, 0x0
.line 189
.restart local v1 # "hasExtendedHeader":Z
:goto_73
if-eqz v1, :cond_7f
.line 190
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readSynchSafeInt()I
move-result v2
.line 191
.restart local v2 # "extendedHeaderSize":I
add-int/lit8 v7, v2, -0x4
invoke-virtual {p0, v7}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 192
sub-int/2addr v6, v2
.line 194
.end local v2 # "extendedHeaderSize":I
:cond_7f
and-int/lit8 v2, v5, 0x10
if-eqz v2, :cond_85
const/4 v2, 0x1
goto :goto_86
:cond_85
const/4 v2, 0x0
.line 195
.local v2, "hasFooter":Z
:goto_86
if-eqz v2, :cond_8a
.line 196
add-int/lit8 v6, v6, -0xa
.line 198
.end local v1 # "hasExtendedHeader":Z
.end local v2 # "hasFooter":Z
:cond_8a
nop
.line 204
:goto_8b
if-ge v3, v8, :cond_92
and-int/lit16 v1, v5, 0x80
if-eqz v1, :cond_92
goto :goto_93
:cond_92
const/4 v4, 0x0
:goto_93
move v1, v4
.line 205
.local v1, "isUnsynchronized":Z
new-instance v2, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;
invoke-direct {v2, v3, v1, v6}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;-><init>(IZI)V
return-object v2
.line 199
.end local v1 # "isUnsynchronized":Z
:cond_9a
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
const-string v7, "Skipped ID3 tag with unsupported majorVersion="
invoke-virtual {v4, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-static {v2, v4}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 200
return-object v1
.end method
.method private static decodeMlltFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/MlltFrame;
.registers 21
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.line 670
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v6
.line 671
.local v6, "mpegFramesBetweenReference":I
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v7
.line 672
.local v7, "bytesBetweenReference":I
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v8
.line 673
.local v8, "millisecondsBetweenReference":I
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v9
.line 674
.local v9, "bitsForBytesDeviation":I
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v10
.line 676
.local v10, "bitsForMillisecondsDeviation":I
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-direct {v0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;-><init>()V
move-object v11, v0
.line 677
.local v11, "references":Lcom/google/android/exoplayer2/util/ParsableBitArray;
move-object/from16 v12, p0
invoke-virtual {v11, v12}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->reset(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.line 678
add-int/lit8 v0, p1, -0xa
mul-int/lit8 v13, v0, 0x8
.line 679
.local v13, "referencesBits":I
add-int v14, v9, v10
.line 680
.local v14, "bitsPerReference":I
div-int v15, v13, v14
.line 681
.local v15, "referencesCount":I
new-array v5, v15, [I
.line 682
.local v5, "bytesDeviations":[I
new-array v4, v15, [I
.line 683
.local v4, "millisecondsDeviations":[I
const/4 v0, 0x0
.local v0, "i":I
:goto_2c
if-ge v0, v15, :cond_3d
.line 684
invoke-virtual {v11, v9}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v1
.line 685
.local v1, "bytesDeviation":I
invoke-virtual {v11, v10}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v2
.line 686
.local v2, "millisecondsDeviation":I
aput v1, v5, v0
.line 687
aput v2, v4, v0
.line 683
.end local v1 # "bytesDeviation":I
.end local v2 # "millisecondsDeviation":I
add-int/lit8 v0, v0, 0x1
goto :goto_2c
.line 690
.end local v0 # "i":I
:cond_3d
new-instance v16, Lcom/google/android/exoplayer2/metadata/id3/MlltFrame;
move-object/from16 v0, v16
move v1, v6
move v2, v7
move v3, v8
move-object/from16 v17, v4
.end local v4 # "millisecondsDeviations":[I
.local v17, "millisecondsDeviations":[I
move-object v4, v5
move-object/from16 v18, v5
.end local v5 # "bytesDeviations":[I
.local v18, "bytesDeviations":[I
move-object/from16 v5, v17
invoke-direct/range {v0 .. v5}, Lcom/google/android/exoplayer2/metadata/id3/MlltFrame;-><init>(III[I[I)V
return-object v16
.end method
.method private static decodePrivFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/PrivFrame;
.registers 8
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 484
new-array v0, p1, [B
.line 485
.local v0, "data":[B
const/4 v1, 0x0
invoke-virtual {p0, v0, v1, p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 487
invoke-static {v0, v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfZeroByte([BI)I
move-result v2
.line 488
.local v2, "ownerEndIndex":I
new-instance v3, Ljava/lang/String;
const-string v4, "ISO-8859-1"
invoke-direct {v3, v0, v1, v2, v4}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
move-object v1, v3
.line 490
.local v1, "owner":Ljava/lang/String;
add-int/lit8 v3, v2, 0x1
.line 491
.local v3, "privateDataStartIndex":I
array-length v4, v0
invoke-static {v0, v3, v4}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->copyOfRangeIfValid([BII)[B
move-result-object v4
.line 493
.local v4, "privateData":[B
new-instance v5, Lcom/google/android/exoplayer2/metadata/id3/PrivFrame;
invoke-direct {v5, v1, v4}, Lcom/google/android/exoplayer2/metadata/id3/PrivFrame;-><init>(Ljava/lang/String;[B)V
return-object v5
.end method
.method private static decodeStringIfValid([BIILjava/lang/String;)Ljava/lang/String;
.registers 6
.param p0, "data" # [B
.param p1, "from" # I
.param p2, "to" # I
.param p3, "charsetName" # Ljava/lang/String;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 813
if-le p2, p1, :cond_e
array-length v0, p0
if-le p2, v0, :cond_6
goto :goto_e
.line 816
:cond_6
new-instance v0, Ljava/lang/String;
sub-int v1, p2, p1
invoke-direct {v0, p0, p1, v1, p3}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
return-object v0
.line 814
:cond_e
:goto_e
const-string v0, ""
return-object v0
.end method
.method private static decodeTextInformationFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;ILjava/lang/String;)Lcom/google/android/exoplayer2/metadata/id3/TextInformationFrame;
.registers 10
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.param p2, "id" # Ljava/lang/String;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 431
const/4 v0, 0x0
const/4 v1, 0x1
if-ge p1, v1, :cond_5
.line 433
return-object v0
.line 436
:cond_5
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v1
.line 437
.local v1, "encoding":I
invoke-static {v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->getCharsetName(I)Ljava/lang/String;
move-result-object v2
.line 439
.local v2, "charset":Ljava/lang/String;
add-int/lit8 v3, p1, -0x1
new-array v3, v3, [B
.line 440
.local v3, "data":[B
add-int/lit8 v4, p1, -0x1
const/4 v5, 0x0
invoke-virtual {p0, v3, v5, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 442
invoke-static {v3, v5, v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfEos([BII)I
move-result v4
.line 443
.local v4, "valueEndIndex":I
new-instance v6, Ljava/lang/String;
invoke-direct {v6, v3, v5, v4, v2}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
move-object v5, v6
.line 445
.local v5, "value":Ljava/lang/String;
new-instance v6, Lcom/google/android/exoplayer2/metadata/id3/TextInformationFrame;
invoke-direct {v6, p2, v0, v5}, Lcom/google/android/exoplayer2/metadata/id3/TextInformationFrame;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
return-object v6
.end method
.method private static decodeTxxxFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/TextInformationFrame;
.registers 12
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 408
const/4 v0, 0x1
if-ge p1, v0, :cond_5
.line 410
const/4 v0, 0x0
return-object v0
.line 413
:cond_5
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
.line 414
.local v0, "encoding":I
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->getCharsetName(I)Ljava/lang/String;
move-result-object v1
.line 416
.local v1, "charset":Ljava/lang/String;
add-int/lit8 v2, p1, -0x1
new-array v2, v2, [B
.line 417
.local v2, "data":[B
add-int/lit8 v3, p1, -0x1
const/4 v4, 0x0
invoke-virtual {p0, v2, v4, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 419
invoke-static {v2, v4, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfEos([BII)I
move-result v3
.line 420
.local v3, "descriptionEndIndex":I
new-instance v5, Ljava/lang/String;
invoke-direct {v5, v2, v4, v3, v1}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
move-object v4, v5
.line 422
.local v4, "description":Ljava/lang/String;
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->delimiterLength(I)I
move-result v5
add-int/2addr v5, v3
.line 423
.local v5, "valueStartIndex":I
invoke-static {v2, v5, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfEos([BII)I
move-result v6
.line 424
.local v6, "valueEndIndex":I
invoke-static {v2, v5, v6, v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeStringIfValid([BIILjava/lang/String;)Ljava/lang/String;
move-result-object v7
.line 426
.local v7, "value":Ljava/lang/String;
new-instance v8, Lcom/google/android/exoplayer2/metadata/id3/TextInformationFrame;
const-string v9, "TXXX"
invoke-direct {v8, v9, v4, v7}, Lcom/google/android/exoplayer2/metadata/id3/TextInformationFrame;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
return-object v8
.end method
.method private static decodeUrlLinkFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;ILjava/lang/String;)Lcom/google/android/exoplayer2/metadata/id3/UrlLinkFrame;
.registers 8
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.param p2, "id" # Ljava/lang/String;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 473
new-array v0, p1, [B
.line 474
.local v0, "data":[B
const/4 v1, 0x0
invoke-virtual {p0, v0, v1, p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 476
invoke-static {v0, v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfZeroByte([BI)I
move-result v2
.line 477
.local v2, "urlEndIndex":I
new-instance v3, Ljava/lang/String;
const-string v4, "ISO-8859-1"
invoke-direct {v3, v0, v1, v2, v4}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
move-object v1, v3
.line 479
.local v1, "url":Ljava/lang/String;
new-instance v3, Lcom/google/android/exoplayer2/metadata/id3/UrlLinkFrame;
const/4 v4, 0x0
invoke-direct {v3, p2, v4, v1}, Lcom/google/android/exoplayer2/metadata/id3/UrlLinkFrame;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
return-object v3
.end method
.method private static decodeWxxxFrame(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/metadata/id3/UrlLinkFrame;
.registers 12
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "frameSize" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/UnsupportedEncodingException;
}
.end annotation
.line 450
const/4 v0, 0x1
if-ge p1, v0, :cond_5
.line 452
const/4 v0, 0x0
return-object v0
.line 455
:cond_5
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
.line 456
.local v0, "encoding":I
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->getCharsetName(I)Ljava/lang/String;
move-result-object v1
.line 458
.local v1, "charset":Ljava/lang/String;
add-int/lit8 v2, p1, -0x1
new-array v2, v2, [B
.line 459
.local v2, "data":[B
add-int/lit8 v3, p1, -0x1
const/4 v4, 0x0
invoke-virtual {p0, v2, v4, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 461
invoke-static {v2, v4, v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfEos([BII)I
move-result v3
.line 462
.local v3, "descriptionEndIndex":I
new-instance v5, Ljava/lang/String;
invoke-direct {v5, v2, v4, v3, v1}, Ljava/lang/String;-><init>([BIILjava/lang/String;)V
move-object v4, v5
.line 464
.local v4, "description":Ljava/lang/String;
invoke-static {v0}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->delimiterLength(I)I
move-result v5
add-int/2addr v5, v3
.line 465
.local v5, "urlStartIndex":I
invoke-static {v2, v5}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfZeroByte([BI)I
move-result v6
.line 466
.local v6, "urlEndIndex":I
const-string v7, "ISO-8859-1"
invoke-static {v2, v5, v6, v7}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeStringIfValid([BIILjava/lang/String;)Ljava/lang/String;
move-result-object v7
.line 468
.local v7, "url":Ljava/lang/String;
new-instance v8, Lcom/google/android/exoplayer2/metadata/id3/UrlLinkFrame;
const-string v9, "WXXX"
invoke-direct {v8, v9, v4, v7}, Lcom/google/android/exoplayer2/metadata/id3/UrlLinkFrame;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
return-object v8
.end method
.method private static delimiterLength(I)I
.registers 2
.param p0, "encodingByte" # I
.line 780
if-eqz p0, :cond_8
const/4 v0, 0x3
if-ne p0, v0, :cond_6
goto :goto_8
:cond_6
const/4 v0, 0x2
goto :goto_9
:cond_8
:goto_8
const/4 v0, 0x1
:goto_9
return v0
.end method
.method private static getCharsetName(I)Ljava/lang/String;
.registers 2
.param p0, "encodingByte" # I
.line 732
const/4 v0, 0x1
if-eq p0, v0, :cond_12
const/4 v0, 0x2
if-eq p0, v0, :cond_f
const/4 v0, 0x3
if-eq p0, v0, :cond_c
.line 741
const-string v0, "ISO-8859-1"
return-object v0
.line 738
:cond_c
const-string v0, "UTF-8"
return-object v0
.line 736
:cond_f
const-string v0, "UTF-16BE"
return-object v0
.line 734
:cond_12
const-string v0, "UTF-16"
return-object v0
.end method
.method private static getFrameId(IIIII)Ljava/lang/String;
.registers 12
.param p0, "majorVersion" # I
.param p1, "frameId0" # I
.param p2, "frameId1" # I
.param p3, "frameId2" # I
.param p4, "frameId3" # I
.line 747
const/4 v0, 0x3
const/4 v1, 0x1
const/4 v2, 0x0
const/4 v3, 0x2
sget-object v4, Ljava/util/Locale;->US:Ljava/util/Locale;
if-ne p0, v3, :cond_23
new-array v0, v0, [Ljava/lang/Object;
invoke-static {p1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v5
aput-object v5, v0, v2
invoke-static {p2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
aput-object v2, v0, v1
invoke-static {p3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v1
aput-object v1, v0, v3
const-string v1, "%c%c%c"
invoke-static {v4, v1, v0}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
goto :goto_44
:cond_23
const/4 v5, 0x4
new-array v5, v5, [Ljava/lang/Object;
.line 748
invoke-static {p1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v6
aput-object v6, v5, v2
invoke-static {p2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
aput-object v2, v5, v1
invoke-static {p3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v1
aput-object v1, v5, v3
invoke-static {p4}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v1
aput-object v1, v5, v0
const-string v0, "%c%c%c%c"
invoke-static {v4, v0, v5}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
.line 747
:goto_44
return-object v0
.end method
.method private static indexOfEos([BII)I
.registers 5
.param p0, "data" # [B
.param p1, "fromIndex" # I
.param p2, "encoding" # I
.line 752
invoke-static {p0, p1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfZeroByte([BI)I
move-result v0
.line 755
.local v0, "terminationPos":I
if-eqz p2, :cond_23
const/4 v1, 0x3
if-ne p2, v1, :cond_a
goto :goto_23
.line 760
:cond_a
:goto_a
array-length v1, p0
add-int/lit8 v1, v1, -0x1
if-ge v0, v1, :cond_21
.line 761
rem-int/lit8 v1, v0, 0x2
if-nez v1, :cond_1a
add-int/lit8 v1, v0, 0x1
aget-byte v1, p0, v1
if-nez v1, :cond_1a
.line 762
return v0
.line 764
:cond_1a
add-int/lit8 v1, v0, 0x1
invoke-static {p0, v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->indexOfZeroByte([BI)I
move-result v0
goto :goto_a
.line 767
:cond_21
array-length v1, p0
return v1
.line 756
:cond_23
:goto_23
return v0
.end method
.method private static indexOfZeroByte([BI)I
.registers 4
.param p0, "data" # [B
.param p1, "fromIndex" # I
.line 771
move v0, p1
.local v0, "i":I
:goto_1
array-length v1, p0
if-ge v0, v1, :cond_c
.line 772
aget-byte v1, p0, v0
if-nez v1, :cond_9
.line 773
return v0
.line 771
:cond_9
add-int/lit8 v0, v0, 0x1
goto :goto_1
.line 776
.end local v0 # "i":I
:cond_c
array-length v0, p0
return v0
.end method
.method static synthetic lambda$static$0(IIIII)Z
.registers 6
.param p0, "majorVersion" # I
.param p1, "id0" # I
.param p2, "id1" # I
.param p3, "id2" # I
.param p4, "id3" # I
.line 60
const/4 v0, 0x0
return v0
.end method
.method private static removeUnsynchronization(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)I
.registers 7
.param p0, "data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "length" # I
.line 715
iget-object v0, p0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 716
.local v0, "bytes":[B
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v1
.local v1, "i":I
:goto_6
add-int/lit8 v2, v1, 0x1
if-ge v2, p1, :cond_27
.line 717
aget-byte v2, v0, v1
const/16 v3, 0xff
and-int/2addr v2, v3
if-ne v2, v3, :cond_24
add-int/lit8 v2, v1, 0x1
aget-byte v2, v0, v2
if-nez v2, :cond_24
.line 718
add-int/lit8 v2, v1, 0x2
add-int/lit8 v3, v1, 0x1
sub-int v4, p1, v1
add-int/lit8 v4, v4, -0x2
invoke-static {v0, v2, v0, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 719
add-int/lit8 p1, p1, -0x1
.line 716
:cond_24
add-int/lit8 v1, v1, 0x1
goto :goto_6
.line 722
.end local v1 # "i":I
:cond_27
return p1
.end method
.method private static validateFrames(Lcom/google/android/exoplayer2/util/ParsableByteArray;IIZ)Z
.registers 23
.param p0, "id3Data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "majorVersion" # I
.param p2, "frameHeaderSize" # I
.param p3, "unsignedIntFrameSizeHack" # Z
.line 210
move-object/from16 v1, p0
move/from16 v2, p1
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v3
.line 212
.local v3, "startPosition":I
:goto_8
:try_start_8
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
:try_end_c
.catchall {:try_start_8 .. :try_end_c} :catchall_c8
const/4 v4, 0x1
move/from16 v5, p2
if-lt v0, v5, :cond_c3
.line 217
const/4 v0, 0x3
if-lt v2, v0, :cond_21
.line 218
:try_start_14
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v6
.line 219
.local v6, "id":I
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v7
.line 220
.local v7, "frameSize":J
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v9
.local v9, "flags":I
goto :goto_2b
.line 222
.end local v6 # "id":I
.end local v7 # "frameSize":J
.end local v9 # "flags":I
:cond_21
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v6
.line 223
.restart local v6 # "id":I
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v7
:try_end_29
.catchall {:try_start_14 .. :try_end_29} :catchall_c1
int-to-long v7, v7
.line 224
.restart local v7 # "frameSize":J
const/4 v9, 0x0
.line 227
.restart local v9 # "flags":I
:goto_2b
const-wide/16 v10, 0x0
if-nez v6, :cond_3a
cmp-long v12, v7, v10
if-nez v12, :cond_3a
if-nez v9, :cond_3a
.line 229
nop
.line 267
invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 229
return v4
.line 231
:cond_3a
const/4 v12, 0x4
const/4 v13, 0x0
if-ne v2, v12, :cond_75
if-nez p3, :cond_75
.line 233
const-wide/32 v14, 0x808080
and-long/2addr v14, v7
cmp-long v16, v14, v10
if-eqz v16, :cond_4d
.line 234
nop
.line 267
invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 234
return v13
.line 236
:cond_4d
const-wide/16 v10, 0xff
and-long v14, v7, v10
const/16 v16, 0x8
shr-long v16, v7, v16
and-long v16, v16, v10
const/16 v18, 0x7
shl-long v16, v16, v18
or-long v14, v14, v16
const/16 v16, 0x10
shr-long v16, v7, v16
and-long v16, v16, v10
const/16 v18, 0xe
shl-long v16, v16, v18
or-long v14, v14, v16
const/16 v16, 0x18
shr-long v16, v7, v16
and-long v10, v16, v10
const/16 v16, 0x15
shl-long v10, v10, v16
or-long v7, v14, v10
.line 239
:cond_75
const/4 v10, 0x0
.line 240
.local v10, "hasGroupIdentifier":Z
const/4 v11, 0x0
.line 241
.local v11, "hasDataLength":Z
if-ne v2, v12, :cond_89
.line 242
and-int/lit8 v0, v9, 0x40
if-eqz v0, :cond_7f
const/4 v0, 0x1
goto :goto_80
:cond_7f
const/4 v0, 0x0
:goto_80
move v10, v0
.line 243
and-int/lit8 v0, v9, 0x1
if-eqz v0, :cond_86
goto :goto_87
:cond_86
const/4 v4, 0x0
:goto_87
move v11, v4
goto :goto_9a
.line 244
:cond_89
if-ne v2, v0, :cond_9a
.line 245
and-int/lit8 v0, v9, 0x20
if-eqz v0, :cond_91
const/4 v0, 0x1
goto :goto_92
:cond_91
const/4 v0, 0x0
:goto_92
move v10, v0
.line 247
and-int/lit16 v0, v9, 0x80
if-eqz v0, :cond_98
goto :goto_99
:cond_98
const/4 v4, 0x0
:goto_99
move v11, v4
.line 249
:cond_9a
:goto_9a
const/4 v0, 0x0
.line 250
.local v0, "minimumFrameSize":I
if-eqz v10, :cond_9f
.line 251
add-int/lit8 v0, v0, 0x1
.line 253
:cond_9f
if-eqz v11, :cond_a3
.line 254
add-int/lit8 v0, v0, 0x4
.line 256
:cond_a3
int-to-long v14, v0
cmp-long v4, v7, v14
if-gez v4, :cond_ad
.line 257
nop
.line 267
invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 257
return v13
.line 259
:cond_ad
:try_start_ad
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v4
:try_end_b1
.catchall {:try_start_ad .. :try_end_b1} :catchall_c1
int-to-long v14, v4
cmp-long v4, v14, v7
if-gez v4, :cond_bb
.line 260
nop
.line 267
invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 260
return v13
.line 262
:cond_bb
long-to-int v4, v7
:try_start_bc
invoke-virtual {v1, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
:try_end_bf
.catchall {:try_start_bc .. :try_end_bf} :catchall_c1
.line 264
.end local v0 # "minimumFrameSize":I
.end local v6 # "id":I
.end local v7 # "frameSize":J
.end local v9 # "flags":I
.end local v10 # "hasGroupIdentifier":Z
.end local v11 # "hasDataLength":Z
goto/16 :goto_8
.line 267
:catchall_c1
move-exception v0
goto :goto_cb
.line 265
:cond_c3
nop
.line 267
invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 265
return v4
.line 267
:catchall_c8
move-exception v0
move/from16 v5, p2
:goto_cb
invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 268
goto :goto_d0
:goto_cf
throw v0
:goto_d0
goto :goto_cf
.end method
# virtual methods
.method public decode(Lcom/google/android/exoplayer2/metadata/MetadataInputBuffer;)Lcom/google/android/exoplayer2/metadata/Metadata;
.registers 5
.param p1, "inputBuffer" # Lcom/google/android/exoplayer2/metadata/MetadataInputBuffer;
.line 103
iget-object v0, p1, Lcom/google/android/exoplayer2/metadata/MetadataInputBuffer;->data:Ljava/nio/ByteBuffer;
.line 104
.local v0, "buffer":Ljava/nio/ByteBuffer;
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->array()[B
move-result-object v1
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->limit()I
move-result v2
invoke-virtual {p0, v1, v2}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decode([BI)Lcom/google/android/exoplayer2/metadata/Metadata;
move-result-object v1
return-object v1
.end method
.method public decode([BI)Lcom/google/android/exoplayer2/metadata/Metadata;
.registers 13
.param p1, "data" # [B
.param p2, "size" # I
.line 116
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 117
.local v0, "id3Frames":Ljava/util/List;, "Ljava/util/List<Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;>;"
new-instance v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-direct {v1, p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([BI)V
.line 119
.local v1, "id3Data":Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-static {v1}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;
move-result-object v2
.line 120
.local v2, "id3Header":Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;
const/4 v3, 0x0
if-nez v2, :cond_12
.line 121
return-object v3
.line 124
:cond_12
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v4
.line 125
.local v4, "startPosition":I
invoke-static {v2}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;->access$000(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;)I
move-result v5
const/4 v6, 0x2
if-ne v5, v6, :cond_1f
const/4 v5, 0x6
goto :goto_21
:cond_1f
const/16 v5, 0xa
.line 126
.local v5, "frameHeaderSize":I
:goto_21
invoke-static {v2}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;->access$100(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;)I
move-result v6
.line 127
.local v6, "framesSize":I
invoke-static {v2}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;->access$200(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;)Z
move-result v7
if-eqz v7, :cond_33
.line 128
invoke-static {v2}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;->access$100(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;)I
move-result v7
invoke-static {v1, v7}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->removeUnsynchronization(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)I
move-result v6
.line 130
:cond_33
add-int v7, v4, v6
invoke-virtual {v1, v7}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
.line 132
const/4 v7, 0x0
.line 133
.local v7, "unsignedIntFrameSizeHack":Z
invoke-static {v2}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;->access$000(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;)I
move-result v8
const/4 v9, 0x0
invoke-static {v1, v8, v5, v9}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->validateFrames(Lcom/google/android/exoplayer2/util/ParsableByteArray;IIZ)Z
move-result v8
if-nez v8, :cond_6f
.line 134
invoke-static {v2}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;->access$000(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;)I
move-result v8
const/4 v9, 0x4
if-ne v8, v9, :cond_54
const/4 v8, 0x1
invoke-static {v1, v9, v5, v8}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->validateFrames(Lcom/google/android/exoplayer2/util/ParsableByteArray;IIZ)Z
move-result v8
if-eqz v8, :cond_54
.line 135
const/4 v7, 0x1
goto :goto_6f
.line 137
:cond_54
new-instance v8, Ljava/lang/StringBuilder;
invoke-direct {v8}, Ljava/lang/StringBuilder;-><init>()V
const-string v9, "Failed to validate ID3 tag with majorVersion="
invoke-virtual {v8, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-static {v2}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;->access$000(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;)I
move-result v9
invoke-virtual {v8, v9}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v8}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v8
const-string v9, "Id3Decoder"
invoke-static {v9, v8}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 138
return-object v3
.line 142
:cond_6f
:goto_6f
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v3
if-lt v3, v5, :cond_85
.line 143
invoke-static {v2}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;->access$000(Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$Id3Header;)I
move-result v3
iget-object v8, p0, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->framePredicate:Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;
invoke-static {v3, v1, v7, v5, v8}, Lcom/google/android/exoplayer2/metadata/id3/Id3Decoder;->decodeFrame(ILcom/google/android/exoplayer2/util/ParsableByteArray;ZILcom/google/android/exoplayer2/metadata/id3/Id3Decoder$FramePredicate;)Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
move-result-object v3
.line 145
.local v3, "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
if-eqz v3, :cond_84
.line 146
invoke-interface {v0, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 148
.end local v3 # "frame":Lcom/google/android/exoplayer2/metadata/id3/Id3Frame;
:cond_84
goto :goto_6f
.line 150
:cond_85
new-instance v3, Lcom/google/android/exoplayer2/metadata/Metadata;
invoke-direct {v3, v0}, Lcom/google/android/exoplayer2/metadata/Metadata;-><init>(Ljava/util/List;)V
return-object v3
.end method