Added snap by number of frames (instead of by time) option for Qt state recorder.
This commit is contained in:
parent
0942d160ca
commit
084b2b9ccc
|
@ -35,6 +35,7 @@
|
||||||
|
|
||||||
#include "../../fceu.h"
|
#include "../../fceu.h"
|
||||||
#include "../../state.h"
|
#include "../../state.h"
|
||||||
|
#include "../../driver.h"
|
||||||
#include "../../emufile.h"
|
#include "../../emufile.h"
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -54,14 +55,19 @@ StateRecorderDialog_t::StateRecorderDialog_t(QWidget *parent)
|
||||||
grid = new QGridLayout();
|
grid = new QGridLayout();
|
||||||
|
|
||||||
recorderEnable = new QCheckBox(tr("Auto Start Recorder at ROM Load"));
|
recorderEnable = new QCheckBox(tr("Auto Start Recorder at ROM Load"));
|
||||||
|
snapFrames = new QSpinBox();
|
||||||
snapMinutes = new QSpinBox();
|
snapMinutes = new QSpinBox();
|
||||||
snapSeconds = new QSpinBox();
|
snapSeconds = new QSpinBox();
|
||||||
historyDuration = new QSpinBox();
|
historyDuration = new QSpinBox();
|
||||||
|
snapFrameSelBtn = new QRadioButton( tr("By Frames") );
|
||||||
|
snapTimeSelBtn = new QRadioButton( tr("By Time") );
|
||||||
|
|
||||||
recorderEnable->setChecked( FCEU_StateRecorderIsEnabled() );
|
recorderEnable->setChecked( FCEU_StateRecorderIsEnabled() );
|
||||||
|
|
||||||
connect( recorderEnable, SIGNAL(stateChanged(int)), this, SLOT(enableChanged(int)) );
|
connect( recorderEnable, SIGNAL(stateChanged(int)), this, SLOT(enableChanged(int)) );
|
||||||
|
|
||||||
|
snapFrames->setMinimum(1);
|
||||||
|
snapFrames->setMaximum(10000);
|
||||||
snapSeconds->setMinimum(0);
|
snapSeconds->setMinimum(0);
|
||||||
snapSeconds->setMaximum(60);
|
snapSeconds->setMaximum(60);
|
||||||
snapMinutes->setMinimum(0);
|
snapMinutes->setMinimum(0);
|
||||||
|
@ -69,6 +75,10 @@ StateRecorderDialog_t::StateRecorderDialog_t(QWidget *parent)
|
||||||
historyDuration->setMinimum(1);
|
historyDuration->setMinimum(1);
|
||||||
historyDuration->setMaximum(180);
|
historyDuration->setMaximum(180);
|
||||||
|
|
||||||
|
opt = 10;
|
||||||
|
g_config->getOption("SDL.StateRecorderFramesBetweenSnaps", &opt);
|
||||||
|
snapFrames->setValue(opt);
|
||||||
|
|
||||||
opt = 15;
|
opt = 15;
|
||||||
g_config->getOption("SDL.StateRecorderHistoryDurationMin", &opt );
|
g_config->getOption("SDL.StateRecorderHistoryDurationMin", &opt );
|
||||||
historyDuration->setValue(opt);
|
historyDuration->setValue(opt);
|
||||||
|
@ -81,6 +91,14 @@ StateRecorderDialog_t::StateRecorderDialog_t(QWidget *parent)
|
||||||
g_config->getOption("SDL.StateRecorderTimeBetweenSnapsSec", &opt);
|
g_config->getOption("SDL.StateRecorderTimeBetweenSnapsSec", &opt);
|
||||||
snapSeconds->setValue(opt);
|
snapSeconds->setValue(opt);
|
||||||
|
|
||||||
|
opt = 0;
|
||||||
|
g_config->getOption("SDL.StateRecorderTimingMode", &opt);
|
||||||
|
|
||||||
|
snapFrameSelBtn->setChecked(opt == 0);
|
||||||
|
snapTimeSelBtn->setChecked(opt == 1);
|
||||||
|
snapUseTime = opt ? true : false;
|
||||||
|
|
||||||
|
connect( snapFrames , SIGNAL(valueChanged(int)), this, SLOT(spinBoxValueChanged(int)) );
|
||||||
connect( snapSeconds, SIGNAL(valueChanged(int)), this, SLOT(spinBoxValueChanged(int)) );
|
connect( snapSeconds, SIGNAL(valueChanged(int)), this, SLOT(spinBoxValueChanged(int)) );
|
||||||
connect( snapMinutes, SIGNAL(valueChanged(int)), this, SLOT(spinBoxValueChanged(int)) );
|
connect( snapMinutes, SIGNAL(valueChanged(int)), this, SLOT(spinBoxValueChanged(int)) );
|
||||||
connect( historyDuration, SIGNAL(valueChanged(int)), this, SLOT(spinBoxValueChanged(int)) );
|
connect( historyDuration, SIGNAL(valueChanged(int)), this, SLOT(spinBoxValueChanged(int)) );
|
||||||
|
@ -122,11 +140,31 @@ StateRecorderDialog_t::StateRecorderDialog_t(QWidget *parent)
|
||||||
frame->setLayout(hbox);
|
frame->setLayout(hbox);
|
||||||
grid->addWidget( frame, 1, 1 );
|
grid->addWidget( frame, 1, 1 );
|
||||||
|
|
||||||
frame1 = new QGroupBox(tr("Time Between Snapshots:"));
|
frame1 = new QGroupBox(tr("Snapshot Timing Setting:"));
|
||||||
hbox1 = new QHBoxLayout();
|
hbox1 = new QHBoxLayout();
|
||||||
frame1->setLayout(hbox1);
|
frame1->setLayout(hbox1);
|
||||||
grid->addWidget( frame1, 2, 0, 1, 2 );
|
grid->addWidget( frame1, 2, 0, 1, 2 );
|
||||||
|
|
||||||
|
g_config->getOption("SDL.StateRecorderTimingMode", &opt);
|
||||||
|
|
||||||
|
hbox1->addWidget( snapFrameSelBtn );
|
||||||
|
hbox1->addWidget( snapTimeSelBtn );
|
||||||
|
|
||||||
|
snapFramesGroup = new QGroupBox(tr("Frames Between Snapshots:"));
|
||||||
|
hbox1 = new QHBoxLayout();
|
||||||
|
snapFramesGroup->setLayout(hbox1);
|
||||||
|
snapFramesGroup->setEnabled(snapFrameSelBtn->isChecked());
|
||||||
|
grid->addWidget( snapFramesGroup, 3, 0, 1, 2 );
|
||||||
|
|
||||||
|
hbox1->addWidget( snapFrames);
|
||||||
|
hbox1->addWidget( new QLabel( tr("Range (1 - 10000)") ) );
|
||||||
|
|
||||||
|
snapTimeGroup = new QGroupBox(tr("Time Between Snapshots:"));
|
||||||
|
hbox1 = new QHBoxLayout();
|
||||||
|
snapTimeGroup->setLayout(hbox1);
|
||||||
|
snapTimeGroup->setEnabled(snapTimeSelBtn->isChecked());
|
||||||
|
grid->addWidget( snapTimeGroup, 4, 0, 1, 2 );
|
||||||
|
|
||||||
frame = new QGroupBox();
|
frame = new QGroupBox();
|
||||||
hbox = new QHBoxLayout();
|
hbox = new QHBoxLayout();
|
||||||
|
|
||||||
|
@ -178,7 +216,7 @@ StateRecorderDialog_t::StateRecorderDialog_t(QWidget *parent)
|
||||||
|
|
||||||
frame->setLayout(hbox);
|
frame->setLayout(hbox);
|
||||||
|
|
||||||
grid->addWidget(frame1, 3, 0, 2, 1);
|
grid->addWidget(frame1, 4, 3, 2, 1);
|
||||||
|
|
||||||
frame = new QGroupBox( tr("Memory Usage:") );
|
frame = new QGroupBox( tr("Memory Usage:") );
|
||||||
memStatsGrid = new QGridLayout();
|
memStatsGrid = new QGridLayout();
|
||||||
|
@ -236,6 +274,8 @@ StateRecorderDialog_t::StateRecorderDialog_t(QWidget *parent)
|
||||||
updateRecorderStatusLabel();
|
updateRecorderStatusLabel();
|
||||||
|
|
||||||
connect(startStopButton, SIGNAL(clicked(void)), this, SLOT(startStopClicked(void)));
|
connect(startStopButton, SIGNAL(clicked(void)), this, SLOT(startStopClicked(void)));
|
||||||
|
connect(snapFrameSelBtn, SIGNAL(clicked(void)), this, SLOT(snapFrameModeClicked(void)));
|
||||||
|
connect(snapTimeSelBtn , SIGNAL(clicked(void)), this, SLOT(snapTimeModeClicked(void)));
|
||||||
|
|
||||||
frame = new QGroupBox();
|
frame = new QGroupBox();
|
||||||
hbox = new QHBoxLayout();
|
hbox = new QHBoxLayout();
|
||||||
|
@ -288,6 +328,7 @@ StateRecorderDialog_t::StateRecorderDialog_t(QWidget *parent)
|
||||||
restoreGeometry(settings.value("stateRecorderWindow/geometry").toByteArray());
|
restoreGeometry(settings.value("stateRecorderWindow/geometry").toByteArray());
|
||||||
|
|
||||||
recalcMemoryUsage();
|
recalcMemoryUsage();
|
||||||
|
|
||||||
pauseOnLoadChanged( pauseOnLoadCbox->currentIndex() );
|
pauseOnLoadChanged( pauseOnLoadCbox->currentIndex() );
|
||||||
|
|
||||||
updateTimer = new QTimer(this);
|
updateTimer = new QTimer(this);
|
||||||
|
@ -329,6 +370,10 @@ void StateRecorderDialog_t::closeWindow(void)
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void StateRecorderDialog_t::packConfig( StateRecorderConfigData &config )
|
void StateRecorderDialog_t::packConfig( StateRecorderConfigData &config )
|
||||||
{
|
{
|
||||||
|
config.timingMode = snapTimeSelBtn->isChecked() ?
|
||||||
|
StateRecorderConfigData::TIME : StateRecorderConfigData::FRAMES;
|
||||||
|
|
||||||
|
config.framesBetweenSnaps = snapFrames->value();
|
||||||
config.historyDurationMinutes = static_cast<float>( historyDuration->value() );
|
config.historyDurationMinutes = static_cast<float>( historyDuration->value() );
|
||||||
config.timeBetweenSnapsMinutes = static_cast<float>( snapMinutes->value() ) +
|
config.timeBetweenSnapsMinutes = static_cast<float>( snapMinutes->value() ) +
|
||||||
( static_cast<float>( snapSeconds->value() ) / 60.0f );
|
( static_cast<float>( snapSeconds->value() ) / 60.0f );
|
||||||
|
@ -393,6 +438,8 @@ void StateRecorderDialog_t::applyChanges(void)
|
||||||
FCEU_WRAPPER_UNLOCK();
|
FCEU_WRAPPER_UNLOCK();
|
||||||
|
|
||||||
g_config->setOption("SDL.StateRecorderHistoryDurationMin", historyDuration->value() );
|
g_config->setOption("SDL.StateRecorderHistoryDurationMin", historyDuration->value() );
|
||||||
|
g_config->setOption("SDL.StateRecorderTimingMode", snapTimeSelBtn->isChecked() ? 1 : 0);
|
||||||
|
g_config->setOption("SDL.StateRecorderFramesBetweenSnaps", snapFrames->value() );
|
||||||
g_config->setOption("SDL.StateRecorderTimeBetweenSnapsMin", snapMinutes->value() );
|
g_config->setOption("SDL.StateRecorderTimeBetweenSnapsMin", snapMinutes->value() );
|
||||||
g_config->setOption("SDL.StateRecorderTimeBetweenSnapsSec", snapSeconds->value() );
|
g_config->setOption("SDL.StateRecorderTimeBetweenSnapsSec", snapSeconds->value() );
|
||||||
g_config->setOption("SDL.StateRecorderCompressionLevel", config.compressionLevel);
|
g_config->setOption("SDL.StateRecorderCompressionLevel", config.compressionLevel);
|
||||||
|
@ -420,6 +467,24 @@ void StateRecorderDialog_t::startStopClicked(void)
|
||||||
FCEU_WRAPPER_UNLOCK();
|
FCEU_WRAPPER_UNLOCK();
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
void StateRecorderDialog_t::snapFrameModeClicked(void)
|
||||||
|
{
|
||||||
|
snapUseTime = false;
|
||||||
|
snapTimeGroup->setEnabled(false);
|
||||||
|
snapFramesGroup->setEnabled(true);
|
||||||
|
|
||||||
|
recalcMemoryUsage();
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void StateRecorderDialog_t::snapTimeModeClicked(void)
|
||||||
|
{
|
||||||
|
snapUseTime = true;
|
||||||
|
snapFramesGroup->setEnabled(false);
|
||||||
|
snapTimeGroup->setEnabled(true);
|
||||||
|
|
||||||
|
recalcMemoryUsage();
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
void StateRecorderDialog_t::updateStartStopBuffon(void)
|
void StateRecorderDialog_t::updateStartStopBuffon(void)
|
||||||
{
|
{
|
||||||
bool isRunning = FCEU_StateRecorderRunning();
|
bool isRunning = FCEU_StateRecorderRunning();
|
||||||
|
@ -517,9 +582,21 @@ void StateRecorderDialog_t::recalcMemoryUsage(void)
|
||||||
{
|
{
|
||||||
char stmp[64];
|
char stmp[64];
|
||||||
|
|
||||||
|
float fsnapMin = 1.0;
|
||||||
float fhistMin = static_cast<float>( historyDuration->value() );
|
float fhistMin = static_cast<float>( historyDuration->value() );
|
||||||
float fsnapMin = static_cast<float>( snapMinutes->value() ) +
|
|
||||||
|
if (snapUseTime)
|
||||||
|
{
|
||||||
|
fsnapMin = static_cast<float>( snapMinutes->value() ) +
|
||||||
( static_cast<float>( snapSeconds->value() ) / 60.0f );
|
( static_cast<float>( snapSeconds->value() ) / 60.0f );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int32_t fps = FCEUI_GetDesiredFPS(); // Do >> 24 to get in Hz
|
||||||
|
double hz = ( ((double)fps) / 16777216.0 );
|
||||||
|
|
||||||
|
fsnapMin = static_cast<double>(snapFrames->value()) / (hz * 60.0);
|
||||||
|
}
|
||||||
|
|
||||||
float fnumSnaps = fhistMin / fsnapMin;
|
float fnumSnaps = fhistMin / fsnapMin;
|
||||||
float fsnapSize = 10.0f * 1024.0f;
|
float fsnapSize = 10.0f * 1024.0f;
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <QSpinBox>
|
#include <QSpinBox>
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
#include <QRadioButton>
|
||||||
#include <QProgressBar>
|
#include <QProgressBar>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
@ -34,6 +35,7 @@ protected:
|
||||||
|
|
||||||
QSpinBox *snapMinutes;
|
QSpinBox *snapMinutes;
|
||||||
QSpinBox *snapSeconds;
|
QSpinBox *snapSeconds;
|
||||||
|
QSpinBox *snapFrames;
|
||||||
QSpinBox *historyDuration;
|
QSpinBox *historyDuration;
|
||||||
QSpinBox *pauseDuration;
|
QSpinBox *pauseDuration;
|
||||||
QCheckBox *recorderEnable;
|
QCheckBox *recorderEnable;
|
||||||
|
@ -45,6 +47,10 @@ protected:
|
||||||
QPushButton *closeButton;
|
QPushButton *closeButton;
|
||||||
QComboBox *cmprLvlCbox;
|
QComboBox *cmprLvlCbox;
|
||||||
QComboBox *pauseOnLoadCbox;
|
QComboBox *pauseOnLoadCbox;
|
||||||
|
QGroupBox *snapTimeGroup;
|
||||||
|
QGroupBox *snapFramesGroup;
|
||||||
|
QRadioButton *snapFrameSelBtn;
|
||||||
|
QRadioButton *snapTimeSelBtn;
|
||||||
QLineEdit *recStatusLbl;
|
QLineEdit *recStatusLbl;
|
||||||
QLineEdit *recBufSizeLbl;
|
QLineEdit *recBufSizeLbl;
|
||||||
QPushButton *startStopButton;
|
QPushButton *startStopButton;
|
||||||
|
@ -52,6 +58,7 @@ protected:
|
||||||
QTimer *updateTimer;
|
QTimer *updateTimer;
|
||||||
|
|
||||||
double saveTimeMs;
|
double saveTimeMs;
|
||||||
|
bool snapUseTime;
|
||||||
|
|
||||||
bool dataSavedCheck(void);
|
bool dataSavedCheck(void);
|
||||||
void recalcMemoryUsage(void);
|
void recalcMemoryUsage(void);
|
||||||
|
@ -67,6 +74,8 @@ private slots:
|
||||||
void applyChanges(void);
|
void applyChanges(void);
|
||||||
void updatePeriodic(void);
|
void updatePeriodic(void);
|
||||||
void startStopClicked(void);
|
void startStopClicked(void);
|
||||||
|
void snapTimeModeClicked(void);
|
||||||
|
void snapFrameModeClicked(void);
|
||||||
void spinBoxValueChanged(int newValue);
|
void spinBoxValueChanged(int newValue);
|
||||||
void enableChanged(int);
|
void enableChanged(int);
|
||||||
void compressionLevelChanged(int newValue);
|
void compressionLevelChanged(int newValue);
|
||||||
|
|
|
@ -756,6 +756,8 @@ InitConfig()
|
||||||
|
|
||||||
config->addOption("SDL.StateRecorderEnable", false);
|
config->addOption("SDL.StateRecorderEnable", false);
|
||||||
config->addOption("SDL.StateRecorderHistoryDurationMin", 15);
|
config->addOption("SDL.StateRecorderHistoryDurationMin", 15);
|
||||||
|
config->addOption("SDL.StateRecorderTimingMode", 0);
|
||||||
|
config->addOption("SDL.StateRecorderFramesBetweenSnaps", 60);
|
||||||
config->addOption("SDL.StateRecorderTimeBetweenSnapsMin", 0);
|
config->addOption("SDL.StateRecorderTimeBetweenSnapsMin", 0);
|
||||||
config->addOption("SDL.StateRecorderTimeBetweenSnapsSec", 3);
|
config->addOption("SDL.StateRecorderTimeBetweenSnapsSec", 3);
|
||||||
config->addOption("SDL.StateRecorderCompressionLevel", 0);
|
config->addOption("SDL.StateRecorderCompressionLevel", 0);
|
||||||
|
|
|
@ -976,7 +976,9 @@ int fceuWrapperInit( int argc, char *argv[] )
|
||||||
// Initialize the State Recorder
|
// Initialize the State Recorder
|
||||||
{
|
{
|
||||||
bool srEnable = false;
|
bool srEnable = false;
|
||||||
|
bool srUseTimeMode = false;
|
||||||
int srHistDurMin = 15;
|
int srHistDurMin = 15;
|
||||||
|
int srFramesBtwSnaps = 60;
|
||||||
int srTimeBtwSnapsMin = 0;
|
int srTimeBtwSnapsMin = 0;
|
||||||
int srTimeBtwSnapsSec = 3;
|
int srTimeBtwSnapsSec = 3;
|
||||||
int srCompressionLevel = 0;
|
int srCompressionLevel = 0;
|
||||||
|
@ -984,7 +986,9 @@ int fceuWrapperInit( int argc, char *argv[] )
|
||||||
int pauseOnLoad = StateRecorderConfigData::TEMPORARY_PAUSE;
|
int pauseOnLoad = StateRecorderConfigData::TEMPORARY_PAUSE;
|
||||||
|
|
||||||
g_config->getOption("SDL.StateRecorderEnable", &srEnable);
|
g_config->getOption("SDL.StateRecorderEnable", &srEnable);
|
||||||
|
g_config->getOption("SDL.StateRecorderTimingMode", &srUseTimeMode);
|
||||||
g_config->getOption("SDL.StateRecorderHistoryDurationMin", &srHistDurMin);
|
g_config->getOption("SDL.StateRecorderHistoryDurationMin", &srHistDurMin);
|
||||||
|
g_config->getOption("SDL.StateRecorderFramesBetweenSnaps", &srFramesBtwSnaps);
|
||||||
g_config->getOption("SDL.StateRecorderTimeBetweenSnapsMin", &srTimeBtwSnapsMin);
|
g_config->getOption("SDL.StateRecorderTimeBetweenSnapsMin", &srTimeBtwSnapsMin);
|
||||||
g_config->getOption("SDL.StateRecorderTimeBetweenSnapsSec", &srTimeBtwSnapsSec);
|
g_config->getOption("SDL.StateRecorderTimeBetweenSnapsSec", &srTimeBtwSnapsSec);
|
||||||
g_config->getOption("SDL.StateRecorderCompressionLevel", &srCompressionLevel);
|
g_config->getOption("SDL.StateRecorderCompressionLevel", &srCompressionLevel);
|
||||||
|
@ -994,8 +998,11 @@ int fceuWrapperInit( int argc, char *argv[] )
|
||||||
StateRecorderConfigData srConfig;
|
StateRecorderConfigData srConfig;
|
||||||
|
|
||||||
srConfig.historyDurationMinutes = srHistDurMin;
|
srConfig.historyDurationMinutes = srHistDurMin;
|
||||||
|
srConfig.timingMode = srUseTimeMode ?
|
||||||
|
StateRecorderConfigData::TIME : StateRecorderConfigData::FRAMES;
|
||||||
srConfig.timeBetweenSnapsMinutes = static_cast<float>( srTimeBtwSnapsMin ) +
|
srConfig.timeBetweenSnapsMinutes = static_cast<float>( srTimeBtwSnapsMin ) +
|
||||||
( static_cast<float>( srTimeBtwSnapsSec ) / 60.0f );
|
( static_cast<float>( srTimeBtwSnapsSec ) / 60.0f );
|
||||||
|
srConfig.framesBetweenSnaps = srFramesBtwSnaps;
|
||||||
srConfig.compressionLevel = srCompressionLevel;
|
srConfig.compressionLevel = srCompressionLevel;
|
||||||
srConfig.loadPauseTimeSeconds = pauseOnLoadTime;
|
srConfig.loadPauseTimeSeconds = pauseOnLoadTime;
|
||||||
srConfig.pauseOnLoad = static_cast<StateRecorderConfigData::PauseType>(pauseOnLoad);
|
srConfig.pauseOnLoad = static_cast<StateRecorderConfigData::PauseType>(pauseOnLoad);
|
||||||
|
|
|
@ -1218,6 +1218,10 @@ class StateRecorder
|
||||||
|
|
||||||
void loadConfig( StateRecorderConfigData &config )
|
void loadConfig( StateRecorderConfigData &config )
|
||||||
{
|
{
|
||||||
|
if (config.framesBetweenSnaps < 1)
|
||||||
|
{
|
||||||
|
config.framesBetweenSnaps = 1;
|
||||||
|
}
|
||||||
if (config.timeBetweenSnapsMinutes < 0.0)
|
if (config.timeBetweenSnapsMinutes < 0.0)
|
||||||
{
|
{
|
||||||
config.timeBetweenSnapsMinutes = 3.0f / 60.0f;
|
config.timeBetweenSnapsMinutes = 3.0f / 60.0f;
|
||||||
|
@ -1226,19 +1230,35 @@ class StateRecorder
|
||||||
{
|
{
|
||||||
config.historyDurationMinutes = config.timeBetweenSnapsMinutes;
|
config.historyDurationMinutes = config.timeBetweenSnapsMinutes;
|
||||||
}
|
}
|
||||||
const double fhistMin = config.historyDurationMinutes;
|
|
||||||
const double fsnapMin = config.timeBetweenSnapsMinutes;
|
|
||||||
const double fnumSnaps = fhistMin / fsnapMin;
|
|
||||||
|
|
||||||
ringBufSize = static_cast<int>( fnumSnaps + 0.5f );
|
if (config.timingMode)
|
||||||
|
{
|
||||||
|
const double fhistMin = config.historyDurationMinutes;
|
||||||
|
const double fsnapMin = config.timeBetweenSnapsMinutes;
|
||||||
|
const double fnumSnaps = fhistMin / fsnapMin;
|
||||||
|
|
||||||
int32_t fps = FCEUI_GetDesiredFPS(); // Do >> 24 to get in Hz
|
ringBufSize = static_cast<int>( fnumSnaps + 0.5f );
|
||||||
|
|
||||||
double hz = ( ((double)fps) / 16777216.0 );
|
int32_t fps = FCEUI_GetDesiredFPS(); // Do >> 24 to get in Hz
|
||||||
|
|
||||||
double framesPerSnapf = hz * fsnapMin * 60.0;
|
double hz = ( ((double)fps) / 16777216.0 );
|
||||||
|
|
||||||
framesPerSnap = static_cast<unsigned int>( framesPerSnapf + 0.50 );
|
double framesPerSnapf = hz * fsnapMin * 60.0;
|
||||||
|
|
||||||
|
framesPerSnap = static_cast<unsigned int>( framesPerSnapf + 0.50 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const double fhistMin = config.historyDurationMinutes;
|
||||||
|
int32_t fps = FCEUI_GetDesiredFPS(); // Do >> 24 to get in Hz
|
||||||
|
double hz = ( ((double)fps) / 16777216.0 );
|
||||||
|
|
||||||
|
const double fsnapMin = static_cast<double>(config.framesBetweenSnaps) / (hz * 60.0);
|
||||||
|
const double fnumSnaps = fhistMin / fsnapMin;
|
||||||
|
|
||||||
|
ringBufSize = static_cast<int>( fnumSnaps + 0.5f );
|
||||||
|
framesPerSnap = config.framesBetweenSnaps;
|
||||||
|
}
|
||||||
|
|
||||||
printf("ringBufSize:%i framesPerSnap:%i\n", ringBufSize, framesPerSnap );
|
printf("ringBufSize:%i framesPerSnap:%i\n", ringBufSize, framesPerSnap );
|
||||||
|
|
||||||
|
|
|
@ -84,9 +84,16 @@ struct StateRecorderConfigData
|
||||||
{
|
{
|
||||||
float historyDurationMinutes;
|
float historyDurationMinutes;
|
||||||
float timeBetweenSnapsMinutes;
|
float timeBetweenSnapsMinutes;
|
||||||
|
int framesBetweenSnaps;
|
||||||
int compressionLevel;
|
int compressionLevel;
|
||||||
int loadPauseTimeSeconds;
|
int loadPauseTimeSeconds;
|
||||||
|
|
||||||
|
enum TimingType
|
||||||
|
{
|
||||||
|
FRAMES = 0,
|
||||||
|
TIME,
|
||||||
|
} timingMode;
|
||||||
|
|
||||||
enum PauseType
|
enum PauseType
|
||||||
{
|
{
|
||||||
NO_PAUSE = 0,
|
NO_PAUSE = 0,
|
||||||
|
@ -96,11 +103,13 @@ struct StateRecorderConfigData
|
||||||
|
|
||||||
StateRecorderConfigData(void)
|
StateRecorderConfigData(void)
|
||||||
{
|
{
|
||||||
|
framesBetweenSnaps = 60;
|
||||||
historyDurationMinutes = 15.0f;
|
historyDurationMinutes = 15.0f;
|
||||||
timeBetweenSnapsMinutes = 3.0f / 60.0f;
|
timeBetweenSnapsMinutes = 3.0f / 60.0f;
|
||||||
compressionLevel = 0;
|
compressionLevel = 0;
|
||||||
loadPauseTimeSeconds = 3;
|
loadPauseTimeSeconds = 3;
|
||||||
pauseOnLoad = TEMPORARY_PAUSE;
|
pauseOnLoad = TEMPORARY_PAUSE;
|
||||||
|
timingMode = FRAMES;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool compare( const StateRecorderConfigData &other )
|
bool compare( const StateRecorderConfigData &other )
|
||||||
|
|
Loading…
Reference in New Issue