]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - snd_ogg.c
Merge remote branch 'origin/master' into akari/irc
[xonotic/darkplaces.git] / snd_ogg.c
index 66ad014dc82106947a18bf1599a4e01b745daf74..0ee16bab4bd7f70cfd64d7310b6b9ba8f72001d9 100644 (file)
--- a/snd_ogg.c
+++ b/snd_ogg.c
@@ -222,7 +222,7 @@ typedef struct
 static int (*qov_clear) (OggVorbis_File *vf);
 static vorbis_info* (*qov_info) (OggVorbis_File *vf,int link);
 static vorbis_comment* (*qov_comment) (OggVorbis_File *vf,int link);
-static char * (*qvorbis_comment_query) (vorbis_comment *vc, char *tag, int count);
+static char * (*qvorbis_comment_query) (vorbis_comment *vc, const char *tag, int count);
 static int (*qov_open_callbacks) (void *datasource, OggVorbis_File *vf,
                                                                  char *initial, long ibytes,
                                                                  ov_callbacks callbacks);
@@ -534,10 +534,11 @@ static const snd_buffer_t* OGG_FetchSound (void *sfxfetcher, void **chfetcherpoi
        // 1- to ensure we won't lose many samples during the resampling process
        // 2- to reduce calls to OGG_FetchSound to regulate workload
        newlength = (int)(per_sfx->format.speed*STREAM_BUFFER_FILL);
-       if (newlength + sb->nbframes > sb->maxframes)
+       // this is how much we FETCH...
+       if ((size_t) ((double) newlength * (double)sb->format.speed / (double)per_sfx->format.speed) + sb->nbframes > sb->maxframes)
        {
-               Con_Printf ("OGG_FetchSound: stream buffer overflow (%u sample frames / %u)\n",
-                                       sb->format.speed + sb->nbframes, sb->maxframes);
+               Con_Printf ("OGG_FetchSound: stream buffer overflow (%u + %u = %u sample frames / %u)\n",
+                                       (unsigned int) ((double) newlength * (double)sb->format.speed / (double)per_sfx->format.speed), sb->nbframes, (unsigned int) ((double) newlength * (double)sb->format.speed / (double)per_sfx->format.speed) + sb->nbframes, sb->maxframes);
                return NULL;
        }
        newlength *= factor; // convert from sample frames to bytes