]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - snd_mem.c
fix several issues with PRVM_64, mostly cleaning up (int) casts
[xonotic/darkplaces.git] / snd_mem.c
index 2678da63b0b2c00d17b7360d051b9587ea17f41b..635bdd3ffb63407d8a27378fb83756a6b73b8c46 100644 (file)
--- a/snd_mem.c
+++ b/snd_mem.c
@@ -59,12 +59,12 @@ snd_ringbuffer_t *Snd_CreateRingBuffer (const snd_format_t* format, unsigned int
                        maxframes = sampleframes;
 
                memsize = maxframes * format->width * format->channels;
-               ringbuffer->ring = Mem_Alloc(snd_mempool, memsize);
+               ringbuffer->ring = (unsigned char *) Mem_Alloc(snd_mempool, memsize);
                ringbuffer->maxframes = maxframes;
        }
        else
        {
-               ringbuffer->ring = buffer;
+               ringbuffer->ring = (unsigned char *) buffer;
                ringbuffer->maxframes = sampleframes;
        }
 
@@ -82,7 +82,7 @@ snd_buffer_t *Snd_CreateSndBuffer (const unsigned char *samples, unsigned int sa
        size_t newsampleframes, memsize;
        snd_buffer_t* sb;
 
-       newsampleframes = (double)sampleframes * (double)sb_speed / (double)in_format->speed;
+       newsampleframes = (size_t) ceil((double)sampleframes * (double)sb_speed / (double)in_format->speed);
 
        memsize = newsampleframes * in_format->channels * in_format->width;
        memsize += sizeof (*sb) - sizeof (sb->samples);
@@ -124,7 +124,7 @@ qboolean Snd_AppendToSndBuffer (snd_buffer_t* sb, const unsigned char *samples,
                return false;
        }
 
-       outcount = (double)sampleframes * (double)sb->format.speed / (double)format->speed;
+       outcount = (size_t) ((double)sampleframes * (double)sb->format.speed / (double)format->speed);
 
        // If the sound buffer is too short
        if (outcount > sb->maxframes - sb->nbframes)
@@ -326,6 +326,8 @@ qboolean S_LoadSound (sfx_t *sfx, qboolean complain)
        if (developer_loading.integer)
                Con_Printf("loading sound %s\n", sfx->name);
 
+       SCR_PushLoadingScreen(true, sfx->name, 1);
+
        // LordHavoc: if the sound filename does not begin with sound/, try adding it
        if (strncasecmp(sfx->name, "sound/", 6))
        {
@@ -334,18 +336,18 @@ qboolean S_LoadSound (sfx_t *sfx, qboolean complain)
                if (len >= 4 && !strcasecmp (namebuffer + len - 4, ".wav"))
                {
                        if (S_LoadWavFile (namebuffer, sfx))
-                               return true;
+                               goto loaded;
                        memcpy (namebuffer + len - 3, "ogg", 4);
                }
                if (len >= 4 && !strcasecmp (namebuffer + len - 4, ".ogg"))
                {
                        if (OGG_LoadVorbisFile (namebuffer, sfx))
-                               return true;
+                               goto loaded;
                }
                else
                {
                        if (ModPlug_LoadModPlugFile (namebuffer, sfx))
-                               return true;
+                               goto loaded;
                }
        }
 
@@ -358,23 +360,29 @@ qboolean S_LoadSound (sfx_t *sfx, qboolean complain)
        if (len >= 4 && !strcasecmp (namebuffer + len - 4, ".wav"))
        {
                if (S_LoadWavFile (namebuffer, sfx))
-                       return true;
+                       goto loaded;
                memcpy (namebuffer + len - 3, "ogg", 4);
        }
        if (len >= 4 && !strcasecmp (namebuffer + len - 4, ".ogg"))
        {
                if (OGG_LoadVorbisFile (namebuffer, sfx))
-                       return true;
+                       goto loaded;
        }
        else
        {
                if (ModPlug_LoadModPlugFile (namebuffer, sfx))
-                       return true;
+                       goto loaded;
        }
 
        // Can't load the sound!
        sfx->flags |= SFXFLAG_FILEMISSING;
        if (complain)
                Con_DPrintf("failed to load sound \"%s\"\n", sfx->name);
+
+       SCR_PopLoadingScreen(false);
        return false;
+
+loaded:
+       SCR_PopLoadingScreen(false);
+       return true;
 }