void Movie_Demo_Capture_f(void) { int argc; double time; char *error; error = va("Usage: %s <start time | stop>\n", Cmd_Argv(0)); if ((argc = Cmd_Argc()) != 2 && argc != 3) { Com_Printf(error); return; } if (argc == 2) { if (Q_strncasecmp("stop", Cmd_Argv(1), 4)) Com_Printf(error); else if (Movie_IsCapturing()) Movie_Stop(); else Com_Printf("%s : Not capturing\n", Cmd_Argv(0)); return; } if (Q_strncasecmp("start", Cmd_Argv(1), 5)) { Com_Printf(error); return; } else if (Movie_IsCapturing()) { Com_Printf("%s : Already capturing\n", Cmd_Argv(0)); return; } if (!cls.demoplayback || cls.timedemo) { Com_Printf("%s : Must be playing a demo to capture\n", Cmd_Argv(0)); return; } if ((time = Q_atof(Cmd_Argv(2))) <= 0) { Com_Printf("%s : Time argument must be positive\n", Cmd_Argv(0)); return; } Movie_Start(time); }
void Movie_FinishFrame(void) { char fname[128]; if (!Movie_IsCapturing()) return; #ifdef _WIN32 if (!movie_is_avi) { snprintf(fname, sizeof(fname), "%s/capture_%02d-%02d-%04d_%02d-%02d-%02d/shot-%06d.%s", movie_dir.string, movie_start_date.wDay, movie_start_date.wMonth, movie_start_date.wYear, movie_start_date.wHour, movie_start_date.wMinute, movie_start_date.wSecond, movie_frame_count, image_ext); con_suppress = true; } else { // Split up if we're over the time limit for each segment if (movie_vid_maxlen.value && cls.realtime >= movie_fragment_start_time + movie_vid_maxlen.value) { double original_start_time = movie_start_time; // Close existing, and start again avi_restarting = true; Movie_Stop(); Movie_Start_AVI_Capture(true); Movie_Start(movie_len); avi_restarting = false; // keep track of original start time so we know when to stop for good movie_start_time = original_start_time; } } #else snprintf(fname, sizeof(fname), "%s/capture_%02d-%02d-%04d_%02d-%02d-%02d/shot-%06d.%s", movie_dir.string, movie_start_date.tm_mday, movie_start_date.tm_mon, movie_start_date.tm_year, movie_start_date.tm_hour, movie_start_date.tm_min, movie_start_date.tm_sec, movie_frame_count, image_ext); con_suppress = true; #endif // _WIN32 //SCR_Screenshot(fname); //movie_frame_count++; // Only capture a frame after all views have been drawn // in multiview mode. Otherwise always. if (cl_multiview.value && cls.mvdplayback) { if (CURRVIEW == 1) { SCR_Movieshot(fname); } } else { SCR_Movieshot(fname); } #ifdef _WIN32 if (!movie_is_avi) #endif { con_suppress = false; } // Only count the frame when all the views have been drawn // in multiview mode. (Instead of counting one for each view that is drawn). if (cl_multiview.value && cls.mvdplayback) { if (CURRVIEW == 1) { movie_frame_count++; } } else { movie_frame_count++; } if (cls.realtime >= movie_start_time + movie_len) Movie_Stop(); }
void Movie_Demo_Capture_f(void) { int argc; double time; char *error; #ifdef _WIN32 error = va("Usage: %s <start time [avifile] | stop>\n", Cmd_Argv(0)); if ((argc = Cmd_Argc()) != 2 && argc != 3 && argc != 4) { #else error = va("Usage: %s <start time | stop>\n", Cmd_Argv(0)); if ((argc = Cmd_Argc()) != 2 && argc != 3) { #endif Com_Printf(error); return; } if (argc == 2) { if (strncasecmp("stop", Cmd_Argv(1), 4)) Com_Printf(error); else if (Movie_IsCapturing()) Movie_Stop(); else Com_Printf("%s : Not capturing\n", Cmd_Argv(0)); return; } if (strncasecmp("start", Cmd_Argv(1), 5)) { Com_Printf(error); return; } else if (Movie_IsCapturing()) { Com_Printf("%s : Already capturing\n", Cmd_Argv(0)); return; } if (!cls.demoplayback || cls.timedemo) { Com_Printf("%s : Must be playing a demo to capture\n", Cmd_Argv(0)); return; } if ((time = Q_atof(Cmd_Argv(2))) <= 0) { Com_Printf("%s : Time argument must be positive\n", Cmd_Argv(0)); return; } #ifdef _WIN32 //joe: capturing to avi if (argc == 4) { avi_number = 0; strlcpy(movie_avi_filename, Cmd_Argv(3), sizeof(movie_avi_filename)-10); // Store user's requested filename if (!movie_avi_loaded) { Com_Printf_State (PRINT_FAIL, "Avi capturing not initialized\n"); return; } Movie_Start_AVI_Capture(movie_vid_maxlen.value > 0 && movie_vid_maxlen.value < time); } #endif Movie_Start(time); } #ifdef _WIN32 static void Movie_Start_AVI_Capture(qbool split) { ++avi_number; // If we're going to break up the movie, append number char aviname[MAX_OSPATH]; if (split) snprintf (aviname, sizeof(aviname), "%s-%03d", movie_avi_filename, avi_number); else strlcpy (aviname, movie_avi_filename, sizeof(aviname)); if (!(Util_Is_Valid_Filename(aviname))) { Com_Printf(Util_Invalid_Filename_Msg(aviname)); return; } COM_ForceExtensionEx (aviname, ".avi", sizeof (aviname)); snprintf (avipath, sizeof(avipath), "%s/%s/%s", com_basedir, movie_dir.string, aviname); if (!(avifile = fopen(avipath, "wb"))) { FS_CreatePath (avipath); if (!(avifile = fopen(avipath, "wb"))) { Com_Printf("Error: Couldn't open %s\n", aviname); return; } } }
void Movie_Demo_Capture_f(void) { int argc; double time; char *error; #ifdef _WIN32 error = va("Usage: %s <start time [avifile] | stop>\n", Cmd_Argv(0)); if ((argc = Cmd_Argc()) != 2 && argc != 3 && argc != 4) { #else error = va("Usage: %s <start time | stop>\n", Cmd_Argv(0)); if ((argc = Cmd_Argc()) != 2 && argc != 3) { #endif Com_Printf(error); return; } if (argc == 2) { if (strncasecmp("stop", Cmd_Argv(1), 4)) Com_Printf(error); else if (Movie_IsCapturing()) Movie_Stop(); else Com_Printf("%s : Not capturing\n", Cmd_Argv(0)); return; } if (strncasecmp("start", Cmd_Argv(1), 5)) { Com_Printf(error); return; } else if (Movie_IsCapturing()) { Com_Printf("%s : Already capturing\n", Cmd_Argv(0)); return; } if (!cls.demoplayback || cls.timedemo) { Com_Printf("%s : Must be playing a demo to capture\n", Cmd_Argv(0)); return; } if ((time = Q_atof(Cmd_Argv(2))) <= 0) { Com_Printf("%s : Time argument must be positive\n", Cmd_Argv(0)); return; } #ifdef _WIN32 //joe: capturing to avi if (argc == 4) { char aviname[MAX_OSPATH]; if (!movie_avi_loaded) { Com_Printf_State (PRINT_FAIL, "Avi capturing not initialized\n"); return; } strlcpy (aviname, Cmd_Argv(3), sizeof(aviname)); if (!(Util_Is_Valid_Filename(aviname))) { Com_Printf(Util_Invalid_Filename_Msg(aviname)); return; } COM_ForceExtensionEx (aviname, ".avi", sizeof (aviname)); snprintf (avipath, sizeof(avipath), "%s/%s/%s", com_basedir, movie_dir.string, aviname); if (!(avifile = fopen(avipath, "wb"))) { FS_CreatePath (avipath); if (!(avifile = fopen(avipath, "wb"))) { Com_Printf("Error: Couldn't open %s\n", aviname); return; } } } #endif Movie_Start(time); } void Movie_Init(void) { Cvar_SetCurrentGroup(CVAR_GROUP_DEMO); Cvar_Register(&movie_fps); Cvar_Register(&movie_dir); Cvar_Register(&movie_steadycam); Cvar_ResetCurrentGroup(); Cmd_AddCommand("demo_capture", Movie_Demo_Capture_f); #ifdef _WIN32 Capture_InitAVI (); //joe: capturing to avi if (!movie_avi_loaded) return; captured_audio_samples = 0; Cvar_SetCurrentGroup(CVAR_GROUP_DEMO); Cvar_Register(&movie_codec); Cvar_ResetCurrentGroup(); Capture_InitACM (); if (!movie_acm_loaded) return; Cvar_SetCurrentGroup(CVAR_GROUP_DEMO); Cvar_Register(&movie_mp3); Cvar_Register(&movie_mp3_kbps); Cvar_ResetCurrentGroup(); #endif }