mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2024-11-27 06:13:01 +00:00
Partially applied patch from Joerg Dietrich. Fixes:
- incorrect handling of file names when opening sound files by name without extension - byte endian issues in ogg decoder.
This commit is contained in:
parent
997dffc649
commit
503c0a22c6
2 changed files with 18 additions and 6 deletions
|
@ -33,13 +33,16 @@ S_FileExtension
|
||||||
*/
|
*/
|
||||||
static char *S_FileExtension(const char *fni)
|
static char *S_FileExtension(const char *fni)
|
||||||
{
|
{
|
||||||
char *fn = (char *)fni;
|
// we should search from the ending to the last '/'
|
||||||
|
|
||||||
|
char *fn = (char *) fni + strlen(fni) - 1;
|
||||||
char *eptr = NULL;
|
char *eptr = NULL;
|
||||||
while(*fn)
|
|
||||||
|
while(*fn != '/' && fn != fni)
|
||||||
{
|
{
|
||||||
if(*fn == '.')
|
if(*fn == '.')
|
||||||
eptr = fn;
|
eptr = fn;
|
||||||
fn++;
|
fn--;
|
||||||
}
|
}
|
||||||
|
|
||||||
return eptr;
|
return eptr;
|
||||||
|
@ -63,8 +66,10 @@ static snd_codec_t *S_FindCodecForFile(const char *filename)
|
||||||
while(codec)
|
while(codec)
|
||||||
{
|
{
|
||||||
char fn[MAX_QPATH];
|
char fn[MAX_QPATH];
|
||||||
Q_strncpyz(fn, filename, sizeof(fn) - 4);
|
|
||||||
COM_DefaultExtension(fn, sizeof(fn), codec->ext);
|
// there is no extension so we do not need to subtract 4 chars
|
||||||
|
Q_strncpyz(fn, filename, MAX_QPATH);
|
||||||
|
COM_DefaultExtension(fn, MAX_QPATH, codec->ext);
|
||||||
|
|
||||||
// Check it exists
|
// Check it exists
|
||||||
if(FS_ReadFile(fn, NULL) != -1)
|
if(FS_ReadFile(fn, NULL) != -1)
|
||||||
|
|
|
@ -360,6 +360,13 @@ int S_OGG_CodecReadStream(snd_stream_t *stream, int bytes, void *buffer)
|
||||||
// Bitstream for the decoder
|
// Bitstream for the decoder
|
||||||
int BS = 0;
|
int BS = 0;
|
||||||
|
|
||||||
|
// big endian machines want their samples in big endian order
|
||||||
|
int IsBigEndian = 0;
|
||||||
|
|
||||||
|
# ifdef Q3_BIG_ENDIAN
|
||||||
|
IsBigEndian = 1;
|
||||||
|
# endif // Q3_BIG_ENDIAN
|
||||||
|
|
||||||
// check if input is valid
|
// check if input is valid
|
||||||
if(!(stream && buffer))
|
if(!(stream && buffer))
|
||||||
{
|
{
|
||||||
|
@ -379,7 +386,7 @@ int S_OGG_CodecReadStream(snd_stream_t *stream, int bytes, void *buffer)
|
||||||
while(-1)
|
while(-1)
|
||||||
{
|
{
|
||||||
// read some bytes from the OGG codec
|
// read some bytes from the OGG codec
|
||||||
c = ov_read((OggVorbis_File *) stream->ptr, bufPtr, bytesLeft, 0, OGG_SAMPLEWIDTH, 1, &BS);
|
c = ov_read((OggVorbis_File *) stream->ptr, bufPtr, bytesLeft, IsBigEndian, OGG_SAMPLEWIDTH, 1, &BS);
|
||||||
|
|
||||||
// no more bytes are left
|
// no more bytes are left
|
||||||
if(c <= 0)
|
if(c <= 0)
|
||||||
|
|
Loading…
Reference in a new issue