2022-06-10 21:38:30 +09:00

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