diff --git a/README.md b/README.md index d8c456f6..6b7598ad 100644 --- a/README.md +++ b/README.md @@ -233,6 +233,14 @@ channel mask to allow only certain channels (ex. "song.adx#c1,2"). Creation of those files is meant for advanced users, docs can be found in vgmstream source. +### Plugin conflicts +Since vgmstream supports a huge amount of formats it's possibly that some of +them are also supported in other plugins, and this sometimes causes conflicts. +If a file that should isn't playing or looping, first make sure vgmstream is +really opening it (should show "vgmstream" somewhere in the file info), and +try to remove a few other plugins. foobar's ffmpeg plugin and foo_adpcm are +known to cause issues. + ## Tagging Some of vgmstream's plugins support simple read-only tagging via external files. @@ -282,7 +290,7 @@ are used in few games. - Sony PSX ADPCM a.k.a VAG (standard, badflags, configurable) - Sony HEVAG - Electronic Arts EA-XA (stereo, mono, Maxis) -- Electronic Arts EA-XAS +- Electronic Arts EA-XAS (v0, v1) - DVI/IMA ADPCM (stereo/mono + high/low nibble, 3DS, Omikron, SNDS, etc) - Microsoft MS IMA ADPCM (standard, Xbox, NDS, Radical, Wwise, FSB, WV6, etc) - Microsoft MS ADPCM (standard, Cricket Audio) @@ -298,7 +306,7 @@ are used in few games. - Konami XMD 4-bit ADPCM - Argonaut ASF 4-bit ADPCM - Circus XPCM ADPCM -- PC-FX ADPCM +- OKI 4-bit ADPCM (16-bit output, PC-FX) - SDX2 2:1 Squareroot-Delta-Exact compression DPCM - CBD2 2:1 Cuberoot-Delta-Exact compression DPCM - Activision EXAKT SASSC DPCM @@ -560,6 +568,8 @@ This list is not complete and many other files are supported. - .um3 (Ogg Vorbis) - .xa (CD-ROM XA audio) - .xma (MS XMA/XMA2) + - .sb0/sb1/sb2/sb3/sb4/sb5/sb6/sb7 (many) + - .sm0/sm1/sm2/sm3/sm4/sm5/sm6/sm7 (many) - artificial/generic headers: - .genh (lots) - .txth (lots) diff --git a/src/layout/blocked_mul.c b/src/layout/blocked_mul.c index 716e03c6..e9a4944a 100644 --- a/src/layout/blocked_mul.c +++ b/src/layout/blocked_mul.c @@ -44,7 +44,5 @@ void block_update_mul(off_t block_offset, VGMSTREAM * vgmstream) { for (i = 0; i < vgmstream->channels; i++) { vgmstream->ch[i].offset = block_offset + block_header + data_header + vgmstream->current_block_size*i; - //VGM_LOG("ch%i of=%lx\n", i, vgmstream->ch[i].offset); } - //getchar(); } diff --git a/src/vgmstream.c b/src/vgmstream.c index fe415d31..e94d296a 100644 --- a/src/vgmstream.c +++ b/src/vgmstream.c @@ -2279,14 +2279,25 @@ void describe_vgmstream(VGMSTREAM * vgmstream, char * desc, int length) { "encoding: "); concatn(length,desc,temp); switch (vgmstream->coding_type) { + + //todo codec bugs with layout inside layouts (ex. TXTP) #ifdef VGM_USE_FFMPEG case coding_FFmpeg: { - ffmpeg_codec_data *data = (ffmpeg_codec_data *)vgmstream->codec_data; - if (!data && vgmstream->layout_data) { + ffmpeg_codec_data *data = NULL; + + if (vgmstream->layout_type == layout_layered) { layered_layout_data* layout_data = vgmstream->layout_data; if (layout_data->layers[0]->coding_type == coding_FFmpeg) data = layout_data->layers[0]->codec_data; } + else if (vgmstream->layout_type == layout_segmented) { + segmented_layout_data* layout_data = vgmstream->layout_data; + if (layout_data->segments[0]->coding_type == coding_FFmpeg) + data = layout_data->segments[0]->codec_data; + } + else { + data = vgmstream->codec_data; + } if (data) { if (data->codec && data->codec->long_name) { @@ -2636,7 +2647,7 @@ int get_vgmstream_average_bitrate(VGMSTREAM * vgmstream) { return get_vgmstream_average_bitrate_from_size(vgmstream->stream_size, sample_rate, length_samples); } - + //todo bitrate bugs with layout inside layouts (ex. TXTP) /* make a list of used streamfiles (repeats will be filtered below) */ if (vgmstream->layout_type==layout_segmented) { segmented_layout_data *data = (segmented_layout_data *) vgmstream->layout_data;