lime_qt: Added -d option for dumping video

This commit is contained in:
OpenSauce04 2024-10-05 19:20:10 +01:00 committed by OpenSauce
parent 0d8c6cdfb0
commit 60a7697982
2 changed files with 48 additions and 26 deletions

View File

@ -296,6 +296,21 @@ GMainWindow::GMainWindow(Core::System& system_)
break; break;
} }
// Dump video
if (args[i] == QStringLiteral("-d")) {
if (i >= args.size() - 1 || args[i + 1].startsWith(QChar::fromLatin1('-'))) {
continue;
}
if (!DynamicLibrary::FFmpeg::LoadFFmpeg()) {
ShowFFmpegErrorMessage();
continue;
}
video_dumping_path = args[++i];
video_dumping_on_start = true;
ui->action_Dump_Video->setChecked(true);
continue;
}
// Launch game in fullscreen mode // Launch game in fullscreen mode
if (args[i] == QStringLiteral("-f")) { if (args[i] == QStringLiteral("-f")) {
ui->action_Fullscreen->setChecked(true); ui->action_Fullscreen->setChecked(true);
@ -2797,16 +2812,7 @@ void GMainWindow::OnCaptureScreenshot() {
OnStartGame(); OnStartGame();
} }
void GMainWindow::OnDumpVideo() { void GMainWindow::ShowFFmpegErrorMessage() {
if (DynamicLibrary::FFmpeg::LoadFFmpeg()) {
if (ui->action_Dump_Video->isChecked()) {
OnStartVideoDumping();
} else {
OnStopVideoDumping();
}
} else {
ui->action_Dump_Video->setChecked(false);
QMessageBox message_box; QMessageBox message_box;
message_box.setWindowTitle(tr("Could not load video dumper")); message_box.setWindowTitle(tr("Could not load video dumper"));
message_box.setText( message_box.setText(
@ -2830,6 +2836,18 @@ void GMainWindow::OnDumpVideo() {
OnOpenFFmpeg(); OnOpenFFmpeg();
#endif #endif
} }
}
void GMainWindow::OnDumpVideo() {
if (DynamicLibrary::FFmpeg::LoadFFmpeg()) {
if (ui->action_Dump_Video->isChecked()) {
OnStartVideoDumping();
} else {
OnStopVideoDumping();
}
} else {
ui->action_Dump_Video->setChecked(false);
ShowFFmpegErrorMessage();
} }
} }
@ -2914,7 +2932,8 @@ void GMainWindow::StartVideoDumping(const QString& path) {
} else { } else {
QMessageBox::critical( QMessageBox::critical(
this, tr("Lime3DS"), this, tr("Lime3DS"),
tr("Could not start video dumping.<br>Refer to the log for details.")); tr("Could not start video dumping.<br>Please ensure that the video encoder is "
"configured correctly.<br>Refer to the log for details."));
ui->action_Dump_Video->setChecked(false); ui->action_Dump_Video->setChecked(false);
} }
} }
@ -3629,6 +3648,7 @@ static Qt::HighDpiScaleFactorRoundingPolicy GetHighDpiRoundingPolicy() {
static void PrintHelp(const char* argv0) { static void PrintHelp(const char* argv0) {
std::cout << "Usage: " << argv0 std::cout << "Usage: " << argv0
<< " [options] <filename>\n" << " [options] <filename>\n"
"-d [path] Dump video recording of emulator playback to the given file path\n"
"-f Start in fullscreen mode\n" "-f Start in fullscreen mode\n"
"-g [path] Start a game file located at the given path\n" "-g [path] Start a game file located at the given path\n"
"-h Display this help and exit\n" "-h Display this help and exit\n"
@ -3644,7 +3664,7 @@ static void PrintVersion() {
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
while (optind < argc) { while (optind < argc) {
int arg = getopt(argc, argv, "fg:hi:r:v"); int arg = getopt(argc, argv, "d:fg:hi:p:r:v");
if (arg != -1) { if (arg != -1) {
switch (static_cast<char>(arg)) { switch (static_cast<char>(arg)) {
case 'h': case 'h':

View File

@ -222,6 +222,8 @@ private:
const std::string& keywords, const std::string& name, const std::string& keywords, const std::string& name,
const bool& skip_tryexec); const bool& skip_tryexec);
void ShowFFmpegErrorMessage();
private slots: private slots:
void OnStartGame(); void OnStartGame();
void OnRestartGame(); void OnRestartGame();