aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorthilo <thilo@edf5b092-35ff-0310-97b2-ce42778d08ea>2006-06-01 00:14:56 +0000
committerthilo <thilo@edf5b092-35ff-0310-97b2-ce42778d08ea>2006-06-01 00:14:56 +0000
commitdbe20c32ad1d8212dbf71c624c8574deac2b224d (patch)
tree18c35c27dce5eab05bc7cd4e1bb1703d2fd4d83d
parentcf0ba61ef51c48e1b61d342f91d0a8eebc8ac309 (diff)
downloadioquake3-aero-dbe20c32ad1d8212dbf71c624c8574deac2b224d.tar.gz
ioquake3-aero-dbe20c32ad1d8212dbf71c624c8574deac2b224d.zip
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. git-svn-id: svn://svn.icculus.org/quake3/trunk@793 edf5b092-35ff-0310-97b2-ce42778d08ea
-rw-r--r--code/client/snd_codec.c15
-rw-r--r--code/client/snd_codec_ogg.c9
2 files changed, 18 insertions, 6 deletions
diff --git a/code/client/snd_codec.c b/code/client/snd_codec.c
index 666452b..1c1a42a 100644
--- a/code/client/snd_codec.c
+++ b/code/client/snd_codec.c
@@ -33,13 +33,16 @@ S_FileExtension
*/
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;
- while(*fn)
+
+ while(*fn != '/' && fn != fni)
{
if(*fn == '.')
eptr = fn;
- fn++;
+ fn--;
}
return eptr;
@@ -63,8 +66,10 @@ static snd_codec_t *S_FindCodecForFile(const char *filename)
while(codec)
{
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
if(FS_ReadFile(fn, NULL) != -1)
diff --git a/code/client/snd_codec_ogg.c b/code/client/snd_codec_ogg.c
index 9c17c0b..72ece94 100644
--- a/code/client/snd_codec_ogg.c
+++ b/code/client/snd_codec_ogg.c
@@ -360,6 +360,13 @@ int S_OGG_CodecReadStream(snd_stream_t *stream, int bytes, void *buffer)
// Bitstream for the decoder
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
if(!(stream && buffer))
{
@@ -379,7 +386,7 @@ int S_OGG_CodecReadStream(snd_stream_t *stream, int bytes, void *buffer)
while(-1)
{
// 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
if(c <= 0)