mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-29 15:22:08 +00:00
- 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:
parent
bd9e318863
commit
f435576f1d
3 changed files with 13 additions and 7 deletions
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue