added cl_capturevideo_sound (defaulted to 0) to allow enabling/disabling sound saving...
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 21 Apr 2005 01:26:44 +0000 (01:26 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 21 Apr 2005 01:26:44 +0000 (01:26 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@5205 d7cf8633-e32d-0410-b094-e92efae38249

cl_screen.c
host.c

index 392feb9..9fa066f 100644 (file)
@@ -23,6 +23,7 @@ cvar_t scr_screenshot_jpeg_quality = {CVAR_SAVE, "scr_screenshot_jpeg_quality","
 cvar_t scr_screenshot_gamma = {CVAR_SAVE, "scr_screenshot_gamma","2.2"};
 cvar_t scr_screenshot_name = {0, "scr_screenshot_name","dp"};
 cvar_t cl_capturevideo = {0, "cl_capturevideo", "0"};
+cvar_t cl_capturevideo_sound = {0, "cl_capturevideo_sound", "0"};
 cvar_t cl_capturevideo_fps = {0, "cl_capturevideo_fps", "30"};
 cvar_t cl_capturevideo_rawrgb = {0, "cl_capturevideo_rawrgb", "0"};
 cvar_t cl_capturevideo_rawyv12 = {0, "cl_capturevideo_rawyv12", "0"};
@@ -466,6 +467,7 @@ void CL_Screen_Init(void)
        Cvar_RegisterVariable (&scr_screenshot_jpeg_quality);
        Cvar_RegisterVariable (&scr_screenshot_gamma);
        Cvar_RegisterVariable (&cl_capturevideo);
+       Cvar_RegisterVariable (&cl_capturevideo_sound);
        Cvar_RegisterVariable (&cl_capturevideo_fps);
        Cvar_RegisterVariable (&cl_capturevideo_rawrgb);
        Cvar_RegisterVariable (&cl_capturevideo_rawyv12);
@@ -722,7 +724,7 @@ static int cl_capturevideo_soundrate = 0;
 static int cl_capturevideo_frame = 0;
 static qbyte *cl_capturevideo_buffer = NULL;
 static qfile_t *cl_capturevideo_videofile = NULL;
-static qfile_t *cl_capturevideo_soundfile = NULL;
+qfile_t *cl_capturevideo_soundfile = NULL;
 static short cl_capturevideo_rgbtoyuvscaletable[3][3][256];
 static unsigned char cl_capturevideo_yuvnormalizetable[3][256];
 //static unsigned char cl_capturevideo_rgbgammatable[3][256];
@@ -802,11 +804,15 @@ Cr = R *  .500 + G * -.419 + B * -.0813 + 128.;
                cl_capturevideo_videofile = NULL;
        }
 
-       cl_capturevideo_soundfile = FS_Open ("video/dpvideo.wav", "wb", false, true);
-
-       // wave header will be filled out when video ends
-       memset(out, 0, 44);
-       FS_Write (cl_capturevideo_soundfile, out, 44);
+       if (cl_capturevideo_sound.integer)
+       {
+               cl_capturevideo_soundfile = FS_Open ("video/dpvideo.wav", "wb", false, true);
+               // wave header will be filled out when video ends
+               memset(out, 0, 44);
+               FS_Write (cl_capturevideo_soundfile, out, 44);
+       }
+       else
+               cl_capturevideo_soundfile = NULL;
 }
 
 void SCR_CaptureVideo_EndVideo(void)
@@ -967,6 +973,8 @@ qboolean SCR_CaptureVideo_VideoFrame(int newframenum)
 
 void SCR_CaptureVideo_SoundFrame(qbyte *bufstereo16le, size_t length, int rate)
 {
+       if (!cl_capturevideo_soundfile)
+               return;
        cl_capturevideo_soundrate = rate;
        if (FS_Write (cl_capturevideo_soundfile, bufstereo16le, 4 * length) < 4 * length)
        {
@@ -988,7 +996,13 @@ void SCR_CaptureVideo(void)
                        Con_Printf("You can not change the video framerate while recording a video.\n");
                        Cvar_SetValueQuick(&cl_capturevideo_fps, cl_capturevideo_framerate);
                }
-               newframenum = (Sys_DoubleTime() - cl_capturevideo_starttime) * cl_capturevideo_framerate;
+               if (cl_capturevideo_soundfile)
+               {
+                       // preserve sound sync by duplicating frames when running slow
+                       newframenum = (Sys_DoubleTime() - cl_capturevideo_starttime) * cl_capturevideo_framerate;
+               }
+               else
+                       newframenum = cl_capturevideo_frame + 1;
                // if falling behind more than one second, stop
                if (newframenum - cl_capturevideo_frame > (int)ceil(cl_capturevideo_framerate))
                {
diff --git a/host.c b/host.c
index 5898849..fd66518 100644 (file)
--- a/host.c
+++ b/host.c
@@ -556,6 +556,7 @@ Returns false if the time is too short to run a frame
 */
 extern qboolean cl_capturevideo_active;
 extern double cl_capturevideo_framerate;
+extern qfile_t *cl_capturevideo_soundfile;
 qboolean Host_FilterTime (double time)
 {
        double timecap, timeleft;
@@ -592,7 +593,7 @@ qboolean Host_FilterTime (double time)
                        timecap = 1.0 / cl_maxfps.value;
        }
 
-       timeleft = (oldrealtime - realtime) + timecap;
+       timeleft = timecap - (realtime - oldrealtime);
        if (timeleft > 0)
        {
                int msleft;
@@ -619,6 +620,9 @@ qboolean Host_FilterTime (double time)
        host_realframetime = host_frametime = realtime - oldrealtime;
        oldrealtime = realtime;
 
+       if (cl_capturevideo_active && !cl_capturevideo_soundfile)
+               host_frametime = timecap;
+
        // apply slowmo scaling
        host_frametime *= slowmo.value;