diff --git a/src/shared/WobblyProject.cpp b/src/shared/WobblyProject.cpp index 8bd101a..f8494bd 100644 --- a/src/shared/WobblyProject.cpp +++ b/src/shared/WobblyProject.cpp @@ -4199,7 +4199,7 @@ void WobblyProject::freezeFramesToScript(std::string &script) const { } -void WobblyProject::decimatedFramesToScript(std::string &script) const { +void WobblyProject::decimatedFramesToScript(std::string &script, DecimationFunction decimation_function) const { std::string delete_frames; const DecimationRangeVector &decimation_ranges = getDecimationRanges(); @@ -4283,7 +4283,7 @@ void WobblyProject::decimatedFramesToScript(std::string &script) const { select_every += "\n" + splice + "])\n\n"; - if (delete_frames.size() < select_every.size()) + if (decimation_function == DELETEFRAMES || (decimation_function == AUTO && delete_frames.size() < select_every.size())) script += delete_frames; else script += select_every; @@ -4328,7 +4328,7 @@ void WobblyProject::setOutputToScript(std::string &script) const { } -std::string WobblyProject::generateFinalScript(bool save_source_node) const { +std::string WobblyProject::generateFinalScript(bool save_source_node, FinalScriptFormat format) const { // XXX Insert comments before and after each part. std::string script; @@ -4361,7 +4361,7 @@ std::string WobblyProject::generateFinalScript(bool save_source_node) const { break; } if (decimation_needed) - decimatedFramesToScript(script); + decimatedFramesToScript(script, format.decimation_function); customListsToScript(script, PostDecimate); diff --git a/src/shared/WobblyProject.h b/src/shared/WobblyProject.h index 95148cb..544e20a 100644 --- a/src/shared/WobblyProject.h +++ b/src/shared/WobblyProject.h @@ -103,6 +103,16 @@ struct UndoStep { }; +enum DecimationFunction { + AUTO = 0, + SELECTEVERY, + DELETEFRAMES, +}; + +struct FinalScriptFormat { + DecimationFunction decimation_function; +}; + class WobblyProject : public QObject { Q_OBJECT @@ -432,12 +442,12 @@ class WobblyProject : public QObject { void trimToScript(std::string &script) const; void fieldHintToScript(std::string &script) const; void freezeFramesToScript(std::string &script) const; - void decimatedFramesToScript(std::string &script) const; + void decimatedFramesToScript(std::string &script, DecimationFunction decimation_function) const; void cropToScript(std::string &script) const; void resizeAndBitDepthToScript(std::string &script, bool resize_enabled, bool depth_enabled) const; void setOutputToScript(std::string &script) const; - std::string generateFinalScript(bool save_source_node = true) const; + std::string generateFinalScript(bool save_source_node = true, FinalScriptFormat format = {}) const; std::string generateMainDisplayScript() const; std::string generateTimecodesV1() const; diff --git a/src/wobbly/WobblyWindow.cpp b/src/wobbly/WobblyWindow.cpp index 7988f38..61c7cc3 100644 --- a/src/wobbly/WobblyWindow.cpp +++ b/src/wobbly/WobblyWindow.cpp @@ -75,6 +75,7 @@ SOFTWARE. #define KEY_COMPACT_PROJECT_FILES QStringLiteral("projects/compact_project_files") #define KEY_USE_RELATIVE_PATHS QStringLiteral("projects/use_relative_paths") +#define KEY_DECIMATION_FUNCTION QStringLiteral("projects/decimation_function") struct CallbackData { @@ -176,6 +177,8 @@ void WobblyWindow::readSettings() { settings_bookmark_description_check->setChecked(settings.value(KEY_ASK_FOR_BOOKMARK_DESCRIPTION, true).toBool()); + settings_decimation_function_combo->setCurrentText(settings.value(KEY_DECIMATION_FUNCTION, "Auto").toString()); + settings_colormatrix_combo->setCurrentText(settings.value(KEY_COLORMATRIX, "BT 601").toString()); settings_cache_spin->setValue(settings.value(KEY_MAXIMUM_CACHE_SIZE, 4096).toInt()); @@ -2766,6 +2769,9 @@ void WobblyWindow::createSettingsWindow() { settings_bookmark_description_check = new QCheckBox(QStringLiteral("Ask for bookmark description")); + settings_decimation_function_combo = new QComboBox; + settings_decimation_function_combo->addItems({ "Auto", "SelectEvery", "DeleteFrames" }); + settings_font_spin = new QSpinBox; settings_font_spin->setRange(4, 99); @@ -2830,6 +2836,10 @@ void WobblyWindow::createSettingsWindow() { settings.setValue(KEY_ASK_FOR_BOOKMARK_DESCRIPTION, checked); }); + connect(settings_decimation_function_combo, &QComboBox::currentTextChanged, [this] (const QString &text) { + settings.setValue(KEY_DECIMATION_FUNCTION, text); + }); + connect(settings_font_spin, static_cast(&QSpinBox::valueChanged), [this] (int value) { QFont font = QApplication::font(); font.setPointSize(value); @@ -2995,6 +3005,7 @@ void WobblyWindow::createSettingsWindow() { form->addRow(settings_use_relative_paths_check); form->addRow(settings_print_details_check); form->addRow(settings_bookmark_description_check); + form->addRow(QStringLiteral("Decimation function"), settings_decimation_function_combo); form->addRow(QStringLiteral("Font size"), settings_font_spin); form->addRow(QStringLiteral("Overlay size"), overlay_size_spin); form->addRow(QStringLiteral("Application style"), application_style_combo); @@ -4031,7 +4042,17 @@ void WobblyWindow::realSaveScript(const QString &path) { // The currently selected preset might not have been stored in the project yet. presetEdited(); - std::string script = project->generateFinalScript(false); + FinalScriptFormat format{}; + + QString decimation_function = settings_decimation_function_combo->currentText(); + if (decimation_function == "SelectEvery") + format.decimation_function = DecimationFunction::SELECTEVERY; + else if (decimation_function == "DeleteFrames") + format.decimation_function = DecimationFunction::DELETEFRAMES; + else + format.decimation_function = DecimationFunction::AUTO; + + std::string script = project->generateFinalScript(false, format); QFile file(path); diff --git a/src/wobbly/WobblyWindow.h b/src/wobbly/WobblyWindow.h index 9a446e8..23c14fb 100644 --- a/src/wobbly/WobblyWindow.h +++ b/src/wobbly/WobblyWindow.h @@ -185,6 +185,7 @@ class WobblyWindow : public QMainWindow { SpinBox *settings_undo_steps_spin; QCheckBox *settings_print_details_check; QCheckBox *settings_bookmark_description_check; + QComboBox *settings_decimation_function_combo; SpinBox *settings_num_thumbnails_spin; QDoubleSpinBox *settings_thumbnail_size_dspin; TableWidget *settings_shortcuts_table;