mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-02-01 12:27:56 +01:00
Fix FSB3 using XMA2 instead of XMA1 (no diffs) [Guitar Hero III (X360)]
This commit is contained in:
parent
877d791d90
commit
7935682c6c
@ -67,7 +67,7 @@
|
||||
|
||||
|
||||
/* simplified struct based on the original definitions */
|
||||
typedef enum { MPEG, IMA, PSX, XMA2, DSP, CELT, PCM8, PCM16 } fsb_codec_t;
|
||||
typedef enum { MPEG, IMA, PSX, XMA, DSP, CELT, PCM8, PCM16 } fsb_codec_t;
|
||||
typedef struct {
|
||||
/* main header */
|
||||
uint32_t id;
|
||||
@ -269,7 +269,7 @@ VGMSTREAM* init_vgmstream_fsb(STREAMFILE* sf) {
|
||||
if (fsb.mode & FSOUND_MPEG) fsb.codec = MPEG;
|
||||
else if (fsb.mode & FSOUND_IMAADPCM) fsb.codec = IMA;
|
||||
else if (fsb.mode & FSOUND_VAG) fsb.codec = PSX;
|
||||
else if (fsb.mode & FSOUND_XMA) fsb.codec = XMA2;
|
||||
else if (fsb.mode & FSOUND_XMA) fsb.codec = XMA;
|
||||
else if (fsb.mode & FSOUND_GCADPCM) fsb.codec = DSP;
|
||||
else if (fsb.mode & FSOUND_CELT) fsb.codec = CELT;
|
||||
else if (fsb.mode & FSOUND_8BITS) fsb.codec = PCM8;
|
||||
@ -382,14 +382,19 @@ VGMSTREAM* init_vgmstream_fsb(STREAMFILE* sf) {
|
||||
break;
|
||||
|
||||
#ifdef VGM_USE_FFMPEG
|
||||
case XMA2: { /* FSB3: The Bourne Conspiracy 2008 (X360), FSB4: Armored Core V (X360), Hard Corps (X360) */
|
||||
case XMA: { /* FSB3: The Bourne Conspiracy 2008 (X360), FSB4: Armored Core V (X360), Hard Corps (X360) */
|
||||
uint8_t buf[0x100];
|
||||
size_t bytes, block_size, block_count;
|
||||
|
||||
block_size = 0x8000; /* FSB default */
|
||||
block_count = fsb.stream_size / block_size; /* not accurate but not needed (custom_data_offset+0x14 -1?) */
|
||||
if (fsb.version != FMOD_FSB_VERSION_4_0) { /* 3.x, though no actual output changes [ex. Guitar Hero III (X360)] */
|
||||
bytes = ffmpeg_make_riff_xma1(buf, sizeof(buf), fsb.num_samples, fsb.stream_size, fsb.channels, fsb.sample_rate, 0);
|
||||
}
|
||||
else {
|
||||
block_size = 0x8000; /* FSB default */
|
||||
block_count = fsb.stream_size / block_size; /* not accurate but not needed (custom_data_offset+0x14 -1?) */
|
||||
|
||||
bytes = ffmpeg_make_riff_xma2(buf,0x100, fsb.num_samples, fsb.stream_size, fsb.channels, fsb.sample_rate, block_count, block_size);
|
||||
bytes = ffmpeg_make_riff_xma2(buf, sizeof(buf), fsb.num_samples, fsb.stream_size, fsb.channels, fsb.sample_rate, block_count, block_size);
|
||||
}
|
||||
vgmstream->codec_data = init_ffmpeg_header_offset(sf, buf,bytes, fsb.stream_offset,fsb.stream_size);
|
||||
if (!vgmstream->codec_data) goto fail;
|
||||
vgmstream->coding_type = coding_FFmpeg;
|
||||
|
Loading…
x
Reference in New Issue
Block a user