473 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Smali
		
	
	
	
	
	
			
		
		
	
	
			473 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Smali
		
	
	
	
	
	
.class public Lorg/kc7bfi/jflac/metadata/CueSheet;
 | 
						|
.super Lorg/kc7bfi/jflac/metadata/Metadata;
 | 
						|
.source "CueSheet.java"
 | 
						|
 | 
						|
 | 
						|
# static fields
 | 
						|
.field private static final CUESHEET_IS_CD_LEN:I = 0x1
 | 
						|
 | 
						|
.field private static final CUESHEET_LEAD_IN_LEN:I = 0x40
 | 
						|
 | 
						|
.field private static final CUESHEET_MEDIA_CATALOG_NUMBER_LEN:I = 0x400
 | 
						|
 | 
						|
.field private static final CUESHEET_NUM_TRACKS_LEN:I = 0x8
 | 
						|
 | 
						|
.field private static final CUESHEET_RESERVED_LEN:I = 0x817
 | 
						|
 | 
						|
 | 
						|
# instance fields
 | 
						|
.field public isCD:Z
 | 
						|
 | 
						|
.field public leadIn:J
 | 
						|
 | 
						|
.field public mediaCatalogNumber:[B
 | 
						|
 | 
						|
.field public numTracks:I
 | 
						|
 | 
						|
.field public tracks:[Lorg/kc7bfi/jflac/metadata/CueTrack;
 | 
						|
 | 
						|
 | 
						|
# direct methods
 | 
						|
.method public constructor <init>(Lorg/kc7bfi/jflac/io/BitInputStream;IZ)V
 | 
						|
    .locals 2
 | 
						|
    .annotation system Ldalvik/annotation/Throws;
 | 
						|
        value = {
 | 
						|
            Ljava/io/IOException;
 | 
						|
        }
 | 
						|
    .end annotation
 | 
						|
 | 
						|
    .line 1
 | 
						|
    invoke-direct {p0, p3}, Lorg/kc7bfi/jflac/metadata/Metadata;-><init>(Z)V
 | 
						|
 | 
						|
    const/16 p2, 0x81
 | 
						|
 | 
						|
    new-array p2, p2, [B
 | 
						|
 | 
						|
    .line 2
 | 
						|
    iput-object p2, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->mediaCatalogNumber:[B
 | 
						|
 | 
						|
    const-wide/16 v0, 0x0
 | 
						|
 | 
						|
    .line 3
 | 
						|
    iput-wide v0, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->leadIn:J
 | 
						|
 | 
						|
    const/4 p3, 0x0
 | 
						|
 | 
						|
    .line 4
 | 
						|
    iput-boolean p3, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->isCD:Z
 | 
						|
 | 
						|
    .line 5
 | 
						|
    iput p3, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->numTracks:I
 | 
						|
 | 
						|
    const/16 v0, 0x80
 | 
						|
 | 
						|
    .line 6
 | 
						|
    invoke-virtual {p1, p2, v0}, Lorg/kc7bfi/jflac/io/BitInputStream;->readByteBlockAlignedNoCRC([BI)V
 | 
						|
 | 
						|
    const/16 p2, 0x40
 | 
						|
 | 
						|
    .line 7
 | 
						|
    invoke-virtual {p1, p2}, Lorg/kc7bfi/jflac/io/BitInputStream;->readRawULong(I)J
 | 
						|
 | 
						|
    move-result-wide v0
 | 
						|
 | 
						|
    iput-wide v0, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->leadIn:J
 | 
						|
 | 
						|
    const/4 p2, 0x1
 | 
						|
 | 
						|
    .line 8
 | 
						|
    invoke-virtual {p1, p2}, Lorg/kc7bfi/jflac/io/BitInputStream;->readRawUInt(I)I
 | 
						|
 | 
						|
    move-result v0
 | 
						|
 | 
						|
    if-eqz v0, :cond_0
 | 
						|
 | 
						|
    goto :goto_0
 | 
						|
 | 
						|
    :cond_0
 | 
						|
    move p2, p3
 | 
						|
 | 
						|
    :goto_0
 | 
						|
    iput-boolean p2, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->isCD:Z
 | 
						|
 | 
						|
    const/16 p2, 0x817
 | 
						|
 | 
						|
    .line 9
 | 
						|
    invoke-virtual {p1, p2}, Lorg/kc7bfi/jflac/io/BitInputStream;->skipBitsNoCRC(I)V
 | 
						|
 | 
						|
    const/16 p2, 0x8
 | 
						|
 | 
						|
    .line 10
 | 
						|
    invoke-virtual {p1, p2}, Lorg/kc7bfi/jflac/io/BitInputStream;->readRawUInt(I)I
 | 
						|
 | 
						|
    move-result p2
 | 
						|
 | 
						|
    iput p2, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->numTracks:I
 | 
						|
 | 
						|
    if-lez p2, :cond_1
 | 
						|
 | 
						|
    .line 11
 | 
						|
    new-array p2, p2, [Lorg/kc7bfi/jflac/metadata/CueTrack;
 | 
						|
 | 
						|
    iput-object p2, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->tracks:[Lorg/kc7bfi/jflac/metadata/CueTrack;
 | 
						|
 | 
						|
    .line 12
 | 
						|
    :goto_1
 | 
						|
    iget p2, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->numTracks:I
 | 
						|
 | 
						|
    if-ge p3, p2, :cond_1
 | 
						|
 | 
						|
    .line 13
 | 
						|
    iget-object p2, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->tracks:[Lorg/kc7bfi/jflac/metadata/CueTrack;
 | 
						|
 | 
						|
    new-instance v0, Lorg/kc7bfi/jflac/metadata/CueTrack;
 | 
						|
 | 
						|
    invoke-direct {v0, p1}, Lorg/kc7bfi/jflac/metadata/CueTrack;-><init>(Lorg/kc7bfi/jflac/io/BitInputStream;)V
 | 
						|
 | 
						|
    aput-object v0, p2, p3
 | 
						|
 | 
						|
    add-int/lit8 p3, p3, 0x1
 | 
						|
 | 
						|
    goto :goto_1
 | 
						|
 | 
						|
    :cond_1
 | 
						|
    return-void
 | 
						|
.end method
 | 
						|
 | 
						|
 | 
						|
# virtual methods
 | 
						|
.method public isLegal(Z)V
 | 
						|
    .locals 12
 | 
						|
    .annotation system Ldalvik/annotation/Throws;
 | 
						|
        value = {
 | 
						|
            Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
        }
 | 
						|
    .end annotation
 | 
						|
 | 
						|
    const-wide/16 v0, 0x0
 | 
						|
 | 
						|
    const-wide/16 v2, 0x24c
 | 
						|
 | 
						|
    if-eqz p1, :cond_2
 | 
						|
 | 
						|
    .line 1
 | 
						|
    iget-wide v4, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->leadIn:J
 | 
						|
 | 
						|
    const-wide/32 v6, 0x15888
 | 
						|
 | 
						|
    cmp-long v6, v4, v6
 | 
						|
 | 
						|
    if-ltz v6, :cond_1
 | 
						|
 | 
						|
    .line 2
 | 
						|
    rem-long/2addr v4, v2
 | 
						|
 | 
						|
    cmp-long v4, v4, v0
 | 
						|
 | 
						|
    if-nez v4, :cond_0
 | 
						|
 | 
						|
    goto :goto_0
 | 
						|
 | 
						|
    .line 3
 | 
						|
    :cond_0
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "CD-DA cue sheet lead-in length must be evenly divisible by 588 samples"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
 | 
						|
    .line 4
 | 
						|
    :cond_1
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "CD-DA cue sheet must have a lead-in length of at least 2 seconds"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
 | 
						|
    .line 5
 | 
						|
    :cond_2
 | 
						|
    :goto_0
 | 
						|
    iget v4, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->numTracks:I
 | 
						|
 | 
						|
    if-eqz v4, :cond_14
 | 
						|
 | 
						|
    const/16 v5, 0xaa
 | 
						|
 | 
						|
    const/4 v6, 0x1
 | 
						|
 | 
						|
    if-eqz p1, :cond_4
 | 
						|
 | 
						|
    .line 6
 | 
						|
    iget-object v7, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->tracks:[Lorg/kc7bfi/jflac/metadata/CueTrack;
 | 
						|
 | 
						|
    sub-int/2addr v4, v6
 | 
						|
 | 
						|
    aget-object v4, v7, v4
 | 
						|
 | 
						|
    iget-byte v4, v4, Lorg/kc7bfi/jflac/metadata/CueTrack;->number:B
 | 
						|
 | 
						|
    if-ne v4, v5, :cond_3
 | 
						|
 | 
						|
    goto :goto_1
 | 
						|
 | 
						|
    .line 7
 | 
						|
    :cond_3
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "CD-DA cue sheet must have a lead-out track number 170 (0xAA)"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
 | 
						|
    :cond_4
 | 
						|
    :goto_1
 | 
						|
    const/4 v4, 0x0
 | 
						|
 | 
						|
    move v7, v4
 | 
						|
 | 
						|
    .line 8
 | 
						|
    :goto_2
 | 
						|
    iget v8, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->numTracks:I
 | 
						|
 | 
						|
    if-ge v7, v8, :cond_13
 | 
						|
 | 
						|
    .line 9
 | 
						|
    iget-object v9, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->tracks:[Lorg/kc7bfi/jflac/metadata/CueTrack;
 | 
						|
 | 
						|
    aget-object v10, v9, v7
 | 
						|
 | 
						|
    iget-byte v10, v10, Lorg/kc7bfi/jflac/metadata/CueTrack;->number:B
 | 
						|
 | 
						|
    if-eqz v10, :cond_12
 | 
						|
 | 
						|
    if-eqz p1, :cond_7
 | 
						|
 | 
						|
    .line 10
 | 
						|
    aget-object v10, v9, v7
 | 
						|
 | 
						|
    iget-byte v10, v10, Lorg/kc7bfi/jflac/metadata/CueTrack;->number:B
 | 
						|
 | 
						|
    if-lt v10, v6, :cond_5
 | 
						|
 | 
						|
    aget-object v10, v9, v7
 | 
						|
 | 
						|
    iget-byte v10, v10, Lorg/kc7bfi/jflac/metadata/CueTrack;->number:B
 | 
						|
 | 
						|
    const/16 v11, 0x63
 | 
						|
 | 
						|
    if-le v10, v11, :cond_7
 | 
						|
 | 
						|
    :cond_5
 | 
						|
    aget-object v10, v9, v7
 | 
						|
 | 
						|
    iget-byte v10, v10, Lorg/kc7bfi/jflac/metadata/CueTrack;->number:B
 | 
						|
 | 
						|
    if-ne v10, v5, :cond_6
 | 
						|
 | 
						|
    goto :goto_3
 | 
						|
 | 
						|
    .line 11
 | 
						|
    :cond_6
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "CD-DA cue sheet track number must be 1-99 or 170"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
 | 
						|
    :cond_7
 | 
						|
    :goto_3
 | 
						|
    if-eqz p1, :cond_9
 | 
						|
 | 
						|
    .line 12
 | 
						|
    aget-object v10, v9, v7
 | 
						|
 | 
						|
    iget-wide v10, v10, Lorg/kc7bfi/jflac/metadata/CueTrack;->offset:J
 | 
						|
 | 
						|
    rem-long/2addr v10, v2
 | 
						|
 | 
						|
    cmp-long v10, v10, v0
 | 
						|
 | 
						|
    if-nez v10, :cond_8
 | 
						|
 | 
						|
    goto :goto_4
 | 
						|
 | 
						|
    .line 13
 | 
						|
    :cond_8
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "CD-DA cue sheet track offset must be evenly divisible by 588 samples"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
 | 
						|
    :cond_9
 | 
						|
    :goto_4
 | 
						|
    add-int/lit8 v8, v8, -0x1
 | 
						|
 | 
						|
    if-ge v7, v8, :cond_c
 | 
						|
 | 
						|
    .line 14
 | 
						|
    aget-object v8, v9, v7
 | 
						|
 | 
						|
    iget-byte v8, v8, Lorg/kc7bfi/jflac/metadata/CueTrack;->numIndices:B
 | 
						|
 | 
						|
    if-eqz v8, :cond_b
 | 
						|
 | 
						|
    .line 15
 | 
						|
    aget-object v8, v9, v7
 | 
						|
 | 
						|
    iget-object v8, v8, Lorg/kc7bfi/jflac/metadata/CueTrack;->indices:[Lorg/kc7bfi/jflac/metadata/CueIndex;
 | 
						|
 | 
						|
    aget-object v8, v8, v4
 | 
						|
 | 
						|
    iget-byte v8, v8, Lorg/kc7bfi/jflac/metadata/CueIndex;->number:B
 | 
						|
 | 
						|
    if-gt v8, v6, :cond_a
 | 
						|
 | 
						|
    goto :goto_5
 | 
						|
 | 
						|
    .line 16
 | 
						|
    :cond_a
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "cue sheet track\'s first index number must be 0 or 1"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
 | 
						|
    .line 17
 | 
						|
    :cond_b
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "cue sheet track must have at least one index point"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
 | 
						|
    :cond_c
 | 
						|
    :goto_5
 | 
						|
    move v8, v4
 | 
						|
 | 
						|
    .line 18
 | 
						|
    :goto_6
 | 
						|
    iget-object v9, p0, Lorg/kc7bfi/jflac/metadata/CueSheet;->tracks:[Lorg/kc7bfi/jflac/metadata/CueTrack;
 | 
						|
 | 
						|
    aget-object v10, v9, v7
 | 
						|
 | 
						|
    iget-byte v10, v10, Lorg/kc7bfi/jflac/metadata/CueTrack;->numIndices:B
 | 
						|
 | 
						|
    if-ge v8, v10, :cond_11
 | 
						|
 | 
						|
    if-eqz p1, :cond_e
 | 
						|
 | 
						|
    .line 19
 | 
						|
    aget-object v10, v9, v7
 | 
						|
 | 
						|
    iget-object v10, v10, Lorg/kc7bfi/jflac/metadata/CueTrack;->indices:[Lorg/kc7bfi/jflac/metadata/CueIndex;
 | 
						|
 | 
						|
    aget-object v10, v10, v8
 | 
						|
 | 
						|
    iget-wide v10, v10, Lorg/kc7bfi/jflac/metadata/CueIndex;->offset:J
 | 
						|
 | 
						|
    rem-long/2addr v10, v2
 | 
						|
 | 
						|
    cmp-long v10, v10, v0
 | 
						|
 | 
						|
    if-nez v10, :cond_d
 | 
						|
 | 
						|
    goto :goto_7
 | 
						|
 | 
						|
    .line 20
 | 
						|
    :cond_d
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "CD-DA cue sheet track index offset must be evenly divisible by 588 samples"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
 | 
						|
    :cond_e
 | 
						|
    :goto_7
 | 
						|
    if-lez v8, :cond_10
 | 
						|
 | 
						|
    .line 21
 | 
						|
    aget-object v10, v9, v7
 | 
						|
 | 
						|
    iget-object v10, v10, Lorg/kc7bfi/jflac/metadata/CueTrack;->indices:[Lorg/kc7bfi/jflac/metadata/CueIndex;
 | 
						|
 | 
						|
    aget-object v10, v10, v8
 | 
						|
 | 
						|
    iget-byte v10, v10, Lorg/kc7bfi/jflac/metadata/CueIndex;->number:B
 | 
						|
 | 
						|
    aget-object v9, v9, v7
 | 
						|
 | 
						|
    iget-object v9, v9, Lorg/kc7bfi/jflac/metadata/CueTrack;->indices:[Lorg/kc7bfi/jflac/metadata/CueIndex;
 | 
						|
 | 
						|
    add-int/lit8 v11, v8, -0x1
 | 
						|
 | 
						|
    aget-object v9, v9, v11
 | 
						|
 | 
						|
    iget-byte v9, v9, Lorg/kc7bfi/jflac/metadata/CueIndex;->number:B
 | 
						|
 | 
						|
    add-int/2addr v9, v6
 | 
						|
 | 
						|
    if-ne v10, v9, :cond_f
 | 
						|
 | 
						|
    goto :goto_8
 | 
						|
 | 
						|
    .line 22
 | 
						|
    :cond_f
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "cue sheet track index numbers must increase by 1"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
 | 
						|
    :cond_10
 | 
						|
    :goto_8
 | 
						|
    add-int/lit8 v8, v8, 0x1
 | 
						|
 | 
						|
    goto :goto_6
 | 
						|
 | 
						|
    :cond_11
 | 
						|
    add-int/lit8 v7, v7, 0x1
 | 
						|
 | 
						|
    goto/16 :goto_2
 | 
						|
 | 
						|
    .line 23
 | 
						|
    :cond_12
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "cue sheet may not have a track number 0"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
 | 
						|
    :cond_13
 | 
						|
    return-void
 | 
						|
 | 
						|
    .line 24
 | 
						|
    :cond_14
 | 
						|
    new-instance p1, Lorg/kc7bfi/jflac/metadata/Violation;
 | 
						|
 | 
						|
    const-string v0, "cue sheet must have at least one track (the lead-out)"
 | 
						|
 | 
						|
    invoke-direct {p1, v0}, Lorg/kc7bfi/jflac/metadata/Violation;-><init>(Ljava/lang/String;)V
 | 
						|
 | 
						|
    throw p1
 | 
						|
.end method
 |