]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - snd_mix.c
changed surface->mesh to surface->groupmesh and added num_firsttriangle and num_first...
[xonotic/darkplaces.git] / snd_mix.c
index 4e42a9674438432bed58fcf05ec39b9477e27010..2f1a7d43d200c9d3e70464edbd3096c844993915 100644 (file)
--- a/snd_mix.c
+++ b/snd_mix.c
@@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 */
-// snd_mix.c -- portable code to mix sounds for snd_dma.c
+// snd_mix.c -- portable code to mix sounds
 
 #include "quakedef.h"
 #include "snd_main.h"
@@ -32,83 +32,29 @@ typedef struct
 #define        PAINTBUFFER_SIZE 2048
 portable_samplepair_t paintbuffer[PAINTBUFFER_SIZE];
 
-// FIXME: it desyncs with the video too easily
-extern cvar_t cl_avidemo;
-static qfile_t *cl_avidemo_soundfile = NULL;
+// FIXME: this desyncs with the video too easily
+extern qboolean cl_capturevideo_active;
+extern void SCR_CaptureVideo_SoundFrame(qbyte *bufstereo16le, size_t length, int rate);
 void S_CaptureAVISound(portable_samplepair_t *buf, size_t length)
 {
        int n;
        size_t i;
        qbyte out[PAINTBUFFER_SIZE * 4];
-
-       if (cl_avidemo.value >= 0.1f)
-       {
-               if (cl_avidemo_soundfile == NULL)
-               {
-                       cl_avidemo_soundfile = FS_Open ("video/dpavi.wav", "wb", false);
-                       memset(out, 0, 44);
-                       FS_Write (cl_avidemo_soundfile, out, 44);
-                       // header will be filled out when file is closed
-               }
-               FS_Seek (cl_avidemo_soundfile, 0, SEEK_END);
-               // write the sound buffer as little endian 16bit interleaved stereo
-               for(i = 0;i < length;i++)
-               {
-                       n = buf[i].left >> 2; // quiet enough to prevent clipping most of the time
-                       n = bound(-32768, n, 32767);
-                       out[i*4+0] = n & 0xFF;
-                       out[i*4+1] = (n >> 8) & 0xFF;
-                       n = buf[i].right >> 2; // quiet enough to prevent clipping most of the time
-                       n = bound(-32768, n, 32767);
-                       out[i*4+2] = n & 0xFF;
-                       out[i*4+3] = (n >> 8) & 0xFF;
-               }
-               if (FS_Write (cl_avidemo_soundfile, out, 4 * length) < 4 * length)
-               {
-                       Cvar_SetValueQuick(&cl_avidemo, 0);
-                       Con_Print("avi saving sound failed, out of disk space?  stopping avi demo capture.\n");
-               }
-       }
-       else if (cl_avidemo_soundfile)
+       if (!cl_capturevideo_active)
+               return;
+       // write the sound buffer as little endian 16bit interleaved stereo
+       for(i = 0;i < length;i++)
        {
-               // file has not been closed yet, close it
-               FS_Seek (cl_avidemo_soundfile, 0, SEEK_END);
-               i = FS_Tell (cl_avidemo_soundfile);
-
-               //"RIFF", (int) unknown (chunk size), "WAVE",
-               //"fmt ", (int) 16 (chunk size), (short) format 1 (uncompressed PCM), (short) 2 channels, (int) unknown rate, (int) unknown bytes per second, (short) 4 bytes per sample (channels * bytes per channel), (short) 16 bits per channel
-               //"data", (int) unknown (chunk size)
-               memcpy (out, "RIFF****WAVEfmt \x10\x00\x00\x00\x01\x00\x02\x00********\x04\x00\x10\0data****", 44);
-               // the length of the whole RIFF chunk
-               n = i - 8;
-               out[4] = (n) & 0xFF;
-               out[5] = (n >> 8) & 0xFF;
-               out[6] = (n >> 16) & 0xFF;
-               out[7] = (n >> 24) & 0xFF;
-               // rate
-               n = shm->format.speed;
-               out[24] = (n) & 0xFF;
-               out[25] = (n >> 8) & 0xFF;
-               out[26] = (n >> 16) & 0xFF;
-               out[27] = (n >> 24) & 0xFF;
-               // bytes per second (rate * channels * bytes per channel)
-               n = shm->format.speed * 2 * 2;
-               out[28] = (n) & 0xFF;
-               out[29] = (n >> 8) & 0xFF;
-               out[30] = (n >> 16) & 0xFF;
-               out[31] = (n >> 24) & 0xFF;
-               // the length of the data chunk
-               n = i - 44;
-               out[40] = (n) & 0xFF;
-               out[41] = (n >> 8) & 0xFF;
-               out[42] = (n >> 16) & 0xFF;
-               out[43] = (n >> 24) & 0xFF;
-
-               FS_Seek (cl_avidemo_soundfile, 0, SEEK_SET);
-               FS_Write (cl_avidemo_soundfile, out, 44);
-               FS_Close (cl_avidemo_soundfile);
-               cl_avidemo_soundfile = NULL;
+               n = buf[i].left;
+               n = bound(-32768, n, 32767);
+               out[i*4+0] = n & 0xFF;
+               out[i*4+1] = (n >> 8) & 0xFF;
+               n = buf[i].right;
+               n = bound(-32768, n, 32767);
+               out[i*4+2] = n & 0xFF;
+               out[i*4+3] = (n >> 8) & 0xFF;
        }
+       SCR_CaptureVideo_SoundFrame(out, length, shm->format.speed);
 }
 
 // TODO: rewrite this function