]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - snd_mem.c
increased build number to 79
[xonotic/darkplaces.git] / snd_mem.c
index 5420d303d8d7403f8dd31816224d2b131a374b09..f573c370365e49061e35837322f9ab92175b2591 100644 (file)
--- a/snd_mem.c
+++ b/snd_mem.c
@@ -105,8 +105,8 @@ void ResampleSfx (sfx_t *sfx, int inrate, byte *data)
                fracstep = stepscale*256;
                if ((fracstep & 255) == 0) // skipping points on perfect multiple
                {
-                       samplefrac >> 8;
                        srcsample = 0;
+                       fracstep >>= 8;
                        if (sc->width == 2)
                        {
                                short *out = (void *)sc->data, *in = (void *)data;
@@ -154,6 +154,7 @@ void ResampleSfx (sfx_t *sfx, int inrate, byte *data)
                }
                else
                {
+                       int sample;
                        if (sc->width == 2)
                        {
                                short *out = (void *)sc->data, *in = (void *)data;
@@ -163,8 +164,10 @@ void ResampleSfx (sfx_t *sfx, int inrate, byte *data)
                                        {
                                                srcsample = (samplefrac >> 7) & ~1;
                                                samplefrac += fracstep;
-                                               *out++ = (short) ((int) ((LittleShort (in[srcsample  ]) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+2]) * (samplefrac & 255)) >> 8));
-                                               *out++ = (short) ((int) ((LittleShort (in[srcsample+1]) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+3]) * (samplefrac & 255)) >> 8));
+                                               sample = (LittleShort (in[srcsample  ]) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+2]) * (samplefrac & 255)) >> 8;
+                                               *out++ = (short) sample;
+                                               sample = (LittleShort (in[srcsample+1]) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+3]) * (samplefrac & 255)) >> 8;
+                                               *out++ = (short) sample;
                                        }
                                }
                                else
@@ -173,7 +176,8 @@ void ResampleSfx (sfx_t *sfx, int inrate, byte *data)
                                        {
                                                srcsample = samplefrac >> 8;
                                                samplefrac += fracstep;
-                                               *out++ = (short) ((int) ((LittleShort (in[srcsample]  ) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+1]) * (samplefrac & 255)) >> 8));
+                                               sample = (LittleShort (in[srcsample  ]) * (256 - (samplefrac & 255)) + LittleShort (in[srcsample+1]) * (samplefrac & 255)) >> 8;
+                                               *out++ = (short) sample;
                                        }
                                }
                        }
@@ -186,8 +190,10 @@ void ResampleSfx (sfx_t *sfx, int inrate, byte *data)
                                        {
                                                srcsample = (samplefrac >> 7) & ~1;
                                                samplefrac += fracstep;
-                                               *out++ = (signed char) ((int) (((((unsigned char) in[srcsample  ] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+2] - 128) * (samplefrac & 255))) >> 8));
-                                               *out++ = (signed char) ((int) (((((unsigned char) in[srcsample+1] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+3] - 128) * (samplefrac & 255))) >> 8));
+                                               sample = ((((unsigned char) in[srcsample  ] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+2] - 128) * (samplefrac & 255))) >> 8;
+                                               *out++ = (signed char) sample;
+                                               sample = ((((unsigned char) in[srcsample+1] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+3] - 128) * (samplefrac & 255))) >> 8;
+                                               *out++ = (signed char) sample;
                                        }
                                }
                                else
@@ -196,7 +202,8 @@ void ResampleSfx (sfx_t *sfx, int inrate, byte *data)
                                        {
                                                srcsample = samplefrac >> 8;
                                                samplefrac += fracstep;
-                                               *out++ = (signed char) ((int) (((((unsigned char) in[srcsample  ] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+1] - 128) * (samplefrac & 255))) >> 8));
+                                               sample = ((((unsigned char) in[srcsample  ] - 128) * (256 - (samplefrac & 255))) + (((unsigned char) in[srcsample+1] - 128) * (samplefrac & 255))) >> 8;
+                                               *out++ = (signed char) sample;
                                        }
                                }
                        }
@@ -219,7 +226,6 @@ sfxcache_t *S_LoadSound (sfx_t *s)
        int             len;
        float   stepscale;
        sfxcache_t      *sc;
-       byte    stackbuf[1*1024];               // avoid dirtying the cache heap
 
 // see if still in memory
        sc = Cache_Check (&s->cache);
@@ -233,7 +239,7 @@ sfxcache_t *S_LoadSound (sfx_t *s)
 
 //     Con_Printf ("loading %s\n",namebuffer);
 
-       data = COM_LoadStackFile(namebuffer, stackbuf, sizeof(stackbuf), false);
+       data = COM_LoadMallocFile(namebuffer, false);
 
        if (!data)
        {
@@ -246,6 +252,7 @@ sfxcache_t *S_LoadSound (sfx_t *s)
        if (info.channels < 1 || info.channels > 2)
        {
                Con_Printf ("%s has an unsupported number of channels (%i)\n",s->name, info.channels);
+               qfree(data);
                return NULL;
        }
        /*
@@ -263,7 +270,10 @@ sfxcache_t *S_LoadSound (sfx_t *s)
 
        sc = Cache_Alloc ( &s->cache, len + sizeof(sfxcache_t), s->name);
        if (!sc)
+       {
+               qfree(data);
                return NULL;
+       }
        
        sc->length = info.samples;
        sc->loopstart = info.loopstart;
@@ -273,6 +283,7 @@ sfxcache_t *S_LoadSound (sfx_t *s)
 
        ResampleSfx (s, sc->speed, data + info.dataofs);
 
+       qfree(data);
        return sc;
 }