/** * Refreshes the FPS throttling variables. */ void RefreshThrottleFPS() { uint64 fps = FCEUI_GetDesiredFPS(); // Do >> 24 to get in Hz desired_frametime = 16777216.0l / (fps * g_fpsScale); Lasttime=0; Nexttime=0; InFrame=0; }
#include "../../types.h" #include "../../fceu.h" #include "windows.h" #include "driver.h" static uint64 tmethod,tfreq; static uint64 desiredfps; static int32 fps_scale_table[]= { 3, 3, 4, 8, 16, 32, 64, 128, 192, 256, 384, 512, 768, 1024, 2048, 4096, 8192, 16384, 16384}; int32 fps_scale = 256; void RefreshThrottleFPS(void) { desiredfps=FCEUI_GetDesiredFPS()>>8; desiredfps=(desiredfps*fps_scale)>>8; } static uint64 GetCurTime(void) { if(tmethod) { uint64 tmp; /* Practically, LARGE_INTEGER and uint64 differ only by signness and name. */ QueryPerformanceCounter((LARGE_INTEGER*)&tmp); return(tmp); } else
#endif static uint64 tfreq; static uint64 desiredfps; int32 FCEUI_GetDesiredFPS(void) { //if(PAL) // return(838977920); // ~50.007 //else return(1008307711); // ~60.1 } void RefreshThrottleFPS(int divooder) { desiredfps=(FCEUI_GetDesiredFPS() / divooder)>>8; tfreq=1000000; tfreq<<=16; /* Adjustment for fps returned from FCEUI_GetDesiredFPS(). */ } static uint64 GetCurTime(void) { uint64 ret; struct timeval tv; gettimeofday(&tv,0); ret=(uint64)tv.tv_sec*1000000; ret+=tv.tv_usec; return(ret); }
int FCEUI_AviBegin(const char* fname) { FCEUI_AviEnd(); struct VideoSystemInfo vsi; BITMAPINFOHEADER bi; int is_pal; is_pal=FCEUI_GetCurrentVidSystem(&vsi.start_scanline, &vsi.end_scanline); vsi.fps = FCEUI_GetDesiredFPS();//is_pal ? 50 : 60; vsi.end_scanline++; memset(&bi, 0, sizeof(bi)); bi.biSize = sizeof(BITMAPINFOHEADER); bi.biPlanes = 1; bi.biBitCount = 24; bi.biWidth = VIDEO_WIDTH; bi.biHeight = vsi.end_scanline-vsi.start_scanline; bi.biSizeImage = 3 * bi.biWidth * bi.biHeight; //mbg 6/27/08 -- this was originally labeled as hacky.. WAVEFORMATEX wf; wf.cbSize = sizeof(WAVEFORMATEX); wf.nAvgBytesPerSec = soundrate * 2; wf.nBlockAlign = 2; wf.nChannels = 1; wf.nSamplesPerSec = soundrate; wf.wBitsPerSample = 16; wf.wFormatTag = WAVE_FORMAT_PCM; saved_avi_ext[0]='\0'; //mbg 8/10/08 - decide whether there will be sound in this movie //if this is a new movie.. if(!avi_file) { if(FSettings.SndRate) use_sound = true; else use_sound = false; } //mbg 8/10/08 - if there is no sound in this movie, then dont open the audio stream WAVEFORMATEX* pwf = &wf; if(!use_sound) pwf = 0; if(!avi_open(fname, &bi, pwf, &vsi)) { saved_avi_fname[0]='\0'; return 0; } // Don't display at file splits if(!avi_segnum) FCEU_DispMessage("AVI recording started.",0); strncpy(saved_cur_avi_fnameandext,fname,MAX_PATH); strncpy(saved_avi_fname,fname,MAX_PATH); char* dot = strrchr(saved_avi_fname, '.'); if(dot && dot > strrchr(saved_avi_fname, '/') && dot > strrchr(saved_avi_fname, '\\')) { strcpy(saved_avi_ext,dot); dot[0]='\0'; } return 1; }