- Increased maximum number of per-pattern rows for the XM loader from

256 to 1024 to deal with a module that otherwise would not load.
- Removed the artificial restriction on not supporting Vorbis-compressed
  samples in XMs if they are stereo, since it turns out that OggMod does
  support them.


SVN r1316 (trunk)
This commit is contained in:
Randy Heit 2008-12-16 00:59:20 +00:00
parent bd9e318863
commit f435576f1d
3 changed files with 13 additions and 7 deletions

View file

@ -1,3 +1,10 @@
December 15, 2008
- Increased maximum number of per-pattern rows for the XM loader from
256 to 1024 to deal with a module that otherwise would not load.
- Removed the artificial restriction on not supporting Vorbis-compressed
samples in XMs if they are stereo, since it turns out that OggMod does
support them.
December 12, 2008 (Changes by Graf Zahl) December 12, 2008 (Changes by Graf Zahl)
- Added a SECF_NORESPAWN flag for sectors that prevents players from being respawned - Added a SECF_NORESPAWN flag for sectors that prevents players from being respawned
in such a sector. As a workaround for current map formats a new actor in such a sector. As a workaround for current map formats a new actor

View file

@ -27,6 +27,7 @@
#include <malloc.h> #include <malloc.h>
#include <assert.h> #include <assert.h>
#define MAX_COLUMN_MEMORY (1024*5)
extern short *DUMBCALLBACK dumb_decode_vorbis(int outlen, const void *oggstream, int sizebytes); extern short *DUMBCALLBACK dumb_decode_vorbis(int outlen, const void *oggstream, int sizebytes);
@ -211,8 +212,8 @@ static int it_xm_read_pattern(IT_PATTERN *pattern, DUMBFILE *f, int n_channels,
if (size == 0) if (size == 0)
return 0; return 0;
if (size > 1280 * n_channels) { if (size > MAX_COLUMN_MEMORY * n_channels) {
TRACE("XM error: pattern data size > %d bytes\n", 1280 * n_channels); TRACE("XM error: pattern data size > %d bytes\n", MAX_COLUMN_MEMORY * n_channels);
return -1; return -1;
} }
@ -636,8 +637,7 @@ static int it_xm_read_sample_data(IT_SAMPLE *sample, unsigned char roguebytes, D
return -1; return -1;
/* FMOD extension: Samples compressed with Ogg Vorbis */ /* FMOD extension: Samples compressed with Ogg Vorbis */
if (!(sample->flags & IT_SAMPLE_STEREO) && if (!memcmp((char *)sample->data + 4, "OggS", 4) &&
!memcmp((char *)sample->data + 4, "OggS", 4) &&
!memcmp((char *)sample->data + 33, "vorbis", 7)) !memcmp((char *)sample->data + 33, "vorbis", 7))
{ {
int32 outlen = ((unsigned char *)(sample->data))[0] | int32 outlen = ((unsigned char *)(sample->data))[0] |
@ -859,7 +859,7 @@ static DUMB_IT_SIGDATA *it_xm_load_sigdata(DUMBFILE *f, int * version)
sigdata->pattern[i].entry = NULL; sigdata->pattern[i].entry = NULL;
{ {
unsigned char *buffer = malloc(1280 * n_channels); /* 256 rows * 5 bytes */ unsigned char *buffer = malloc(MAX_COLUMN_MEMORY * n_channels); /* 256 rows * 5 bytes */
if (!buffer) { if (!buffer) {
_dumb_it_unload_sigdata(sigdata); _dumb_it_unload_sigdata(sigdata);
return NULL; return NULL;
@ -1054,7 +1054,7 @@ static DUMB_IT_SIGDATA *it_xm_load_sigdata(DUMBFILE *f, int * version)
sigdata->pattern[i].entry = NULL; sigdata->pattern[i].entry = NULL;
{ {
unsigned char *buffer = malloc(1280 * n_channels); /* 256 rows * 5 bytes */ unsigned char *buffer = malloc(MAX_COLUMN_MEMORY * n_channels); /* 256 rows * 5 bytes */
if (!buffer) { if (!buffer) {
free(roguebytes); free(roguebytes);
_dumb_it_unload_sigdata(sigdata); _dumb_it_unload_sigdata(sigdata);

View file

@ -2397,7 +2397,6 @@ short *FMODSoundRenderer::DecodeSample(int outlen, const void *coded, int sizeby
} }
result = sound->getFormat(NULL, &format, &channels, NULL); result = sound->getFormat(NULL, &format, &channels, NULL);
// TODO: Handle more formats if it proves necessary. // TODO: Handle more formats if it proves necessary.
// Does OggMod work with stereo samples?
if (result != FMOD_OK || format != FMOD_SOUND_FORMAT_PCM16 || channels != 1) if (result != FMOD_OK || format != FMOD_SOUND_FORMAT_PCM16 || channels != 1)
{ {
sound->release(); sound->release();