From 7f0f1ef9b02a74deeca5d37f612b603bd5ac8126 Mon Sep 17 00:00:00 2001 From: bnnm Date: Thu, 16 Jul 2020 22:07:20 +0200 Subject: [PATCH] Clean SNK SVAG --- src/formats.c | 2 +- src/meta/meta.h | 2 +- src/meta/ps2_svag_snk.c | 82 ++++++++++++----------------------------- src/vgmstream.c | 2 +- src/vgmstream.h | 2 +- 5 files changed, 28 insertions(+), 62 deletions(-) diff --git a/src/formats.c b/src/formats.c index 459e5b41..053708a5 100644 --- a/src/formats.c +++ b/src/formats.c @@ -1154,7 +1154,7 @@ static const meta_info meta_info_list[] = { {meta_MCA, "Capcom MCA header"}, {meta_XB3D_ADX, "Xenoblade 3D ADX header"}, {meta_HCA, "CRI HCA header"}, - {meta_PS2_SVAG_SNK, "SNK SVAG header"}, + {meta_SVAG_SNK, "SNK SVAG header"}, {meta_PS2_VDS_VDM, "Procyon Studio VDS/VDM header"}, {meta_FFMPEG, "FFmpeg supported file format"}, {meta_X360_CXS, "tri-Crescendo CXS header"}, diff --git a/src/meta/meta.h b/src/meta/meta.h index 5b1042c9..61b770f4 100644 --- a/src/meta/meta.h +++ b/src/meta/meta.h @@ -565,7 +565,7 @@ VGMSTREAM * init_vgmstream_mca(STREAMFILE* streamFile); VGMSTREAM * init_vgmstream_btsnd(STREAMFILE* streamFile); -VGMSTREAM * init_vgmstream_ps2_svag_snk(STREAMFILE* streamFile); +VGMSTREAM * init_vgmstream_svag_snk(STREAMFILE* streamFile); VGMSTREAM * init_vgmstream_xma(STREAMFILE* streamFile); diff --git a/src/meta/ps2_svag_snk.c b/src/meta/ps2_svag_snk.c index 6bcb220c..79ca24ec 100644 --- a/src/meta/ps2_svag_snk.c +++ b/src/meta/ps2_svag_snk.c @@ -1,80 +1,46 @@ #include "meta.h" #include "../util.h" -/* PS2 SVAG (SNK) - * - * Found in SNK's World Heroes Anthology and Fatal Fury Battle Archives 2, maybe others - * No relation with Konami's SVAG. - */ +/* .SVAG - from SNK games [World Heroes Anthology (PS2), Fatal Fury Battle Archives 2 (PS2)] */ +VGMSTREAM* init_vgmstream_svag_snk(STREAMFILE* sf) { + VGMSTREAM* vgmstream = NULL; + off_t start_offset; + int loop_flag, channel_count, loop_start_block, loop_end_block; -VGMSTREAM * init_vgmstream_ps2_svag_snk(STREAMFILE* streamFile) { - VGMSTREAM * vgmstream = NULL; - char filename[PATH_LIMIT]; - - off_t start_offset = 0x20; - - int loop_flag; - int channel_count; - int loop_start_block; - int loop_end_block; - - /* check extension, case insensitive */ - streamFile->get_name(streamFile,filename,sizeof(filename)); - if (strcasecmp("svag",filename_extension(filename))) goto fail; - - /* check SNK SVAG Header ("VAGm") */ - if (read_32bitBE(0x00,streamFile) != 0x5641476D) + /* checks */ + if (!check_extensions(sf, "svag")) + goto fail; + if (read_32bitBE(0x00,sf) != 0x5641476D) /* "VAGm" */ goto fail; - - channel_count = read_32bitLE(0x0c,streamFile); - - loop_start_block = read_32bitLE(0x18,streamFile); - loop_end_block = read_32bitLE(0x1c,streamFile); - + channel_count = read_32bitLE(0x0c,sf); + loop_start_block = read_32bitLE(0x18,sf); + loop_end_block = read_32bitLE(0x1c,sf); loop_flag = loop_end_block > 0; /* loop_start_block can be 0 */ + start_offset = 0x20; /* build the VGMSTREAM */ - vgmstream = allocate_vgmstream(channel_count,loop_flag); + vgmstream = allocate_vgmstream(channel_count, loop_flag); if (!vgmstream) goto fail; - /* header data */ - vgmstream->coding_type = coding_PSX; - vgmstream->meta_type = meta_PS2_SVAG_SNK; + vgmstream->meta_type = meta_SVAG_SNK; - vgmstream->channels = channel_count; - vgmstream->sample_rate = read_32bitLE(0x08,streamFile); - vgmstream->num_samples = read_32bitLE(0x10,streamFile) * 28; /* size in blocks */ - if( vgmstream->loop_flag ) { - vgmstream->loop_start_sample = loop_start_block * 28; - vgmstream->loop_end_sample = loop_end_block * 28; - } + vgmstream->sample_rate = read_32bitLE(0x08,sf); + vgmstream->num_samples = read_32bitLE(0x10,sf) * 28; /* size in blocks */ + vgmstream->loop_start_sample = loop_start_block * 28; + vgmstream->loop_end_sample = loop_end_block * 28; + + vgmstream->coding_type = coding_PSX; vgmstream->layout_type = layout_interleave; vgmstream->interleave_block_size = 0x10; - /* open the file for reading */ - { - int i; - STREAMFILE * file; - file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE); - if (!file) goto fail; - - for (i=0;ich[i].streamfile = file; - - vgmstream->ch[i].channel_start_offset = - vgmstream->ch[i].offset = - start_offset + vgmstream->interleave_block_size*i; - } - } - - + if (!vgmstream_open_stream(vgmstream, sf, start_offset)) + goto fail; return vgmstream; - /* clean up anything we may have opened */ fail: - if (vgmstream) close_vgmstream(vgmstream); + close_vgmstream(vgmstream); return NULL; } diff --git a/src/vgmstream.c b/src/vgmstream.c index ecb1d9d6..6c1a3cbb 100644 --- a/src/vgmstream.c +++ b/src/vgmstream.c @@ -297,7 +297,7 @@ VGMSTREAM * (*init_vgmstream_functions[])(STREAMFILE *streamFile) = { init_vgmstream_kt_wiibgm, init_vgmstream_ktss, init_vgmstream_hca, - init_vgmstream_ps2_svag_snk, + init_vgmstream_svag_snk, init_vgmstream_ps2_vds_vdm, init_vgmstream_x360_cxs, init_vgmstream_dsp_adx, diff --git a/src/vgmstream.h b/src/vgmstream.h index 57cc2e55..7d54e5d4 100644 --- a/src/vgmstream.h +++ b/src/vgmstream.h @@ -587,7 +587,7 @@ typedef enum { meta_MCA, /* Capcom MCA "MADP" */ meta_XB3D_ADX, /* Xenoblade Chronicles 3D ADX */ meta_HCA, /* CRI HCA */ - meta_PS2_SVAG_SNK, /* SNK PS2 SVAG */ + meta_SVAG_SNK, meta_PS2_VDS_VDM, /* Graffiti Kingdom */ meta_FFMPEG, /* any file supported by FFmpeg */ meta_X360_CXS, /* Eternal Sonata (Xbox 360) */