ID3v2FrameHeader.smali

.class public Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;
.super Ljava/lang/Object;
.source "ID3v2FrameHeader.java"


# instance fields
.field private bodySize:I

.field private compression:Z

.field private dataLengthIndicator:I

.field private encryption:Z

.field private frameId:Ljava/lang/String;

.field private headerSize:I

.field private unsynchronization:Z


# direct methods
.method static constructor <clinit>()V
    .registers 1

    return-void
.end method

.method public constructor <init>(Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;)V
    .registers 16
    .param p1, "input"    # Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;,
            Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2Exception;
        }
    .end annotation

    .line 29
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 30
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;->getPosition()J

    move-result-wide v0

    .line 32
    .local v0, "startPosition":J
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;->getData()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;

    move-result-object v2

    .line 37
    .local v2, "data":Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;->getTagHeader()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;

    move-result-object v3

    invoke-virtual {v3}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;->getVersion()I

    move-result v3

    const-string v4, "ISO-8859-1"

    const/4 v5, 0x4

    const/4 v6, 0x2

    const/4 v7, 0x3

    if-ne v3, v6, :cond_26

    .line 38
    new-instance v3, Ljava/lang/String;

    invoke-virtual {v2, v7}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readFully(I)[B

    move-result-object v8

    invoke-direct {v3, v8, v4}, Ljava/lang/String;-><init>([BLjava/lang/String;)V

    iput-object v3, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    goto :goto_31

    .line 40
    :cond_26
    new-instance v3, Ljava/lang/String;

    invoke-virtual {v2, v5}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readFully(I)[B

    move-result-object v8

    invoke-direct {v3, v8, v4}, Ljava/lang/String;-><init>([BLjava/lang/String;)V

    iput-object v3, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    .line 46
    :goto_31
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;->getTagHeader()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;

    move-result-object v3

    invoke-virtual {v3}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;->getVersion()I

    move-result v3

    if-ne v3, v6, :cond_56

    .line 47
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    move-result v3

    and-int/lit16 v3, v3, 0xff

    shl-int/lit8 v3, v3, 0x10

    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    move-result v4

    and-int/lit16 v4, v4, 0xff

    shl-int/lit8 v4, v4, 0x8

    or-int/2addr v3, v4

    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    move-result v4

    and-int/lit16 v4, v4, 0xff

    or-int/2addr v3, v4

    iput v3, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    goto :goto_6d

    .line 48
    :cond_56
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;->getTagHeader()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;

    move-result-object v3

    invoke-virtual {v3}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;->getVersion()I

    move-result v3

    if-ne v3, v7, :cond_67

    .line 49
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readInt()I

    move-result v3

    iput v3, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    goto :goto_6d

    .line 51
    :cond_67
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readSyncsafeInt()I

    move-result v3

    iput v3, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    .line 57
    :goto_6d
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;->getTagHeader()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;

    move-result-object v3

    invoke-virtual {v3}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;->getVersion()I

    move-result v3

    if-le v3, v6, :cond_10c

    .line 58
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    .line 59
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    move-result v3

    .line 63
    .local v3, "formatFlags":B
    const/4 v4, 0x0

    .line 64
    .local v4, "unsynchronizationMask":I
    const/4 v6, 0x0

    .line 65
    .local v6, "dataLengthIndicatorMask":I
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;->getTagHeader()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;

    move-result-object v8

    invoke-virtual {v8}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;->getVersion()I

    move-result v8

    if-ne v8, v7, :cond_91

    .line 66
    const/16 v8, 0x80

    .line 67
    .local v8, "compressionMask":I
    const/16 v9, 0x40

    .line 68
    .local v9, "encryptionMask":I
    const/16 v10, 0x20

    .local v10, "groupingIdentityMask":I
    goto :goto_98

    .line 70
    .end local v8    # "compressionMask":I
    .end local v9    # "encryptionMask":I
    .end local v10    # "groupingIdentityMask":I
    :cond_91
    const/16 v10, 0x40

    .line 71
    .restart local v10    # "groupingIdentityMask":I
    const/16 v8, 0x8

    .line 72
    .restart local v8    # "compressionMask":I
    const/4 v9, 0x4

    .line 73
    .restart local v9    # "encryptionMask":I
    const/4 v4, 0x2

    .line 74
    const/4 v6, 0x1

    .line 76
    :goto_98
    and-int v11, v3, v8

    const/4 v12, 0x0

    const/4 v13, 0x1

    if-eqz v11, :cond_a0

    const/4 v11, 0x1

    goto :goto_a1

    :cond_a0
    const/4 v11, 0x0

    :goto_a1
    iput-boolean v11, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->compression:Z

    .line 77
    and-int v11, v3, v4

    if-eqz v11, :cond_a9

    const/4 v11, 0x1

    goto :goto_aa

    :cond_a9
    const/4 v11, 0x0

    :goto_aa
    iput-boolean v11, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->unsynchronization:Z

    .line 78
    and-int v11, v3, v9

    if-eqz v11, :cond_b1

    const/4 v12, 0x1

    :cond_b1
    iput-boolean v12, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->encryption:Z

    .line 83
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;->getTagHeader()Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;

    move-result-object v11

    invoke-virtual {v11}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagHeader;->getVersion()I

    move-result v11

    if-ne v11, v7, :cond_e5

    .line 84
    iget-boolean v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->compression:Z

    if-eqz v7, :cond_cc

    .line 85
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readInt()I

    move-result v7

    iput v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->dataLengthIndicator:I

    .line 86
    iget v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    sub-int/2addr v7, v5

    iput v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    .line 88
    :cond_cc
    iget-boolean v5, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->encryption:Z

    if-eqz v5, :cond_d8

    .line 89
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    .line 90
    iget v5, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    sub-int/2addr v5, v13

    iput v5, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    .line 92
    :cond_d8
    and-int v5, v3, v10

    if-eqz v5, :cond_10c

    .line 93
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    .line 94
    iget v5, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    sub-int/2addr v5, v13

    iput v5, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    goto :goto_10c

    .line 97
    :cond_e5
    and-int v7, v3, v10

    if-eqz v7, :cond_f1

    .line 98
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    .line 99
    iget v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    sub-int/2addr v7, v13

    iput v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    .line 101
    :cond_f1
    iget-boolean v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->encryption:Z

    if-eqz v7, :cond_fd

    .line 102
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readByte()B

    .line 103
    iget v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    sub-int/2addr v7, v13

    iput v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    .line 105
    :cond_fd
    and-int v7, v3, v6

    if-eqz v7, :cond_10c

    .line 106
    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2DataInput;->readSyncsafeInt()I

    move-result v7

    iput v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->dataLengthIndicator:I

    .line 107
    iget v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    sub-int/2addr v7, v5

    iput v7, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    .line 112
    .end local v3    # "formatFlags":B
    .end local v4    # "unsynchronizationMask":I
    .end local v6    # "dataLengthIndicatorMask":I
    .end local v8    # "compressionMask":I
    .end local v9    # "encryptionMask":I
    .end local v10    # "groupingIdentityMask":I
    :cond_10c
    :goto_10c
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2TagBody;->getPosition()J

    move-result-wide v3

    sub-long/2addr v3, v0

    long-to-int v4, v3

    iput v4, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->headerSize:I

    .line 113
    return-void
.end method


# virtual methods
.method public getBodySize()I
    .registers 2

    .line 124
    iget v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    return v0
.end method

.method public getDataLengthIndicator()I
    .registers 2

    .line 140
    iget v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->dataLengthIndicator:I

    return v0
.end method

.method public getFrameId()Ljava/lang/String;
    .registers 2

    .line 116
    iget-object v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    return-object v0
.end method

.method public getHeaderSize()I
    .registers 2

    .line 120
    iget v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->headerSize:I

    return v0
.end method

.method public isCompression()Z
    .registers 2

    .line 128
    iget-boolean v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->compression:Z

    return v0
.end method

.method public isEncryption()Z
    .registers 2

    .line 132
    iget-boolean v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->encryption:Z

    return v0
.end method

.method public isPadding()Z
    .registers 4

    .line 153
    const/4 v0, 0x0

    .local v0, "i":I
    :goto_1
    iget-object v1, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    invoke-virtual {v1}, Ljava/lang/String;->length()I

    move-result v1

    const/4 v2, 0x0

    if-ge v0, v1, :cond_16

    .line 154
    iget-object v1, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    invoke-virtual {v1, v2}, Ljava/lang/String;->charAt(I)C

    move-result v1

    if-eqz v1, :cond_13

    .line 155
    return v2

    .line 153
    :cond_13
    add-int/lit8 v0, v0, 0x1

    goto :goto_1

    .line 158
    .end local v0    # "i":I
    :cond_16
    iget v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    if-nez v0, :cond_1b

    const/4 v2, 0x1

    :cond_1b
    return v2
.end method

.method public isUnsynchronization()Z
    .registers 2

    .line 136
    iget-boolean v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->unsynchronization:Z

    return v0
.end method

.method public isValid()Z
    .registers 5

    .line 144
    const/4 v0, 0x0

    .local v0, "i":I
    :goto_1
    iget-object v1, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    invoke-virtual {v1}, Ljava/lang/String;->length()I

    move-result v1

    const/4 v2, 0x0

    if-ge v0, v1, :cond_37

    .line 145
    iget-object v1, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    invoke-virtual {v1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v1

    const/16 v3, 0x41

    if-lt v1, v3, :cond_1e

    iget-object v1, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    invoke-virtual {v1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v1

    const/16 v3, 0x5a

    if-le v1, v3, :cond_33

    :cond_1e
    iget-object v1, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    invoke-virtual {v1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v1

    const/16 v3, 0x30

    if-lt v1, v3, :cond_36

    iget-object v1, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    invoke-virtual {v1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v1

    const/16 v3, 0x39

    if-le v1, v3, :cond_33

    goto :goto_36

    .line 144
    :cond_33
    add-int/lit8 v0, v0, 0x1

    goto :goto_1

    .line 146
    :cond_36
    :goto_36
    return v2

    .line 149
    .end local v0    # "i":I
    :cond_37
    iget v0, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    if-lez v0, :cond_3c

    const/4 v2, 0x1

    :cond_3c
    return v2
.end method

.method public toString()Ljava/lang/String;
    .registers 4

    .line 163
    const/4 v0, 0x3

    new-array v0, v0, [Ljava/lang/Object;

    invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;

    move-result-object v1

    const/4 v2, 0x0

    aput-object v1, v0, v2

    iget-object v1, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->frameId:Ljava/lang/String;

    const/4 v2, 0x1

    aput-object v1, v0, v2

    iget v1, p0, Lim/tpelyyftgw/messenger/audioinfo/mp3/ID3v2FrameHeader;->bodySize:I

    invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v1

    const/4 v2, 0x2

    aput-object v1, v0, v2

    const-string v1, "%s[id=%s, bodysize=%d]"

    invoke-static {v1, v0}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v0

    return-object v0
.end method