UI: Allow file name generation without spaces

This will probably go away once proper file name formatting is
implemented (https://obsproject.com/mantis/view.php?id=361)
This commit is contained in:
Palana 2015-11-27 12:14:18 +01:00
parent 1cd98ae008
commit 124ccb68de
7 changed files with 98 additions and 37 deletions

View file

@ -335,6 +335,7 @@ Basic.Settings.Output.Advanced="Enable Advanced Encoder Settings"
Basic.Settings.Output.EncoderPreset="Encoder Preset (higher = less CPU)"
Basic.Settings.Output.CustomEncoderSettings="Custom Encoder Settings"
Basic.Settings.Output.CustomMuxerSettings="Custom Muxer Settings"
Basic.Settings.Output.NoSpaceFileName="Generate File Name without Space"
# basic mode 'output' settings - advanced section
Basic.Settings.Output.Adv.Rescale="Rescale Output"

View file

@ -574,7 +574,7 @@
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="1" column="1">
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLineEdit" name="simpleOutputPath">
@ -595,7 +595,7 @@
</item>
</layout>
</item>
<item row="1" column="0">
<item row="0" column="0">
<widget class="QLabel" name="label_18">
<property name="minimumSize">
<size>
@ -611,6 +611,16 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="simpleNoSpace">
<property name="text">
<string>Basic.Settings.Output.NoSpaceFileName</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="simpleOutRecFormat">
<item>
@ -1098,14 +1108,24 @@
</item>
</layout>
</item>
<item row="1" column="0">
<item row="1" column="1">
<widget class="QCheckBox" name="advOutNoSpace">
<property name="text">
<string>Basic.Settings.Output.NoSpaceFileName</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_43">
<property name="text">
<string>Basic.Settings.Output.Format</string>
</property>
</widget>
</item>
<item row="1" column="1">
<item row="2" column="1">
<widget class="QComboBox" name="advOutRecFormat">
<item>
<property name="text">
@ -1139,14 +1159,14 @@
</item>
</widget>
</item>
<item row="2" column="0">
<item row="3" column="0">
<widget class="QLabel" name="label_29">
<property name="text">
<string>Basic.Settings.Output.Adv.AudioTrack</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="3" column="1">
<widget class="QWidget" name="widget_9" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
@ -1198,17 +1218,17 @@
</layout>
</widget>
</item>
<item row="3" column="0">
<item row="4" column="0">
<widget class="QLabel" name="advOutRecEncLabel">
<property name="text">
<string>Basic.Settings.Output.Encoder</string>
</property>
</widget>
</item>
<item row="3" column="1">
<item row="4" column="1">
<widget class="QComboBox" name="advOutRecEncoder"/>
</item>
<item row="4" column="0">
<item row="5" column="0">
<widget class="QCheckBox" name="advOutRecUseRescale">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
@ -1224,7 +1244,7 @@
</property>
</widget>
</item>
<item row="4" column="1">
<item row="5" column="1">
<widget class="QWidget" name="advOutRecRescaleContainer" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="leftMargin">
@ -1369,38 +1389,38 @@
</widget>
</widget>
</item>
<item row="2" column="0">
<item row="3" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Basic.Settings.Output.Adv.FFmpeg.Format</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="3" column="1">
<widget class="QComboBox" name="advOutFFFormat"/>
</item>
<item row="3" column="0">
<item row="4" column="0">
<widget class="QLabel" name="label_44">
<property name="text">
<string>Basic.Settings.Output.Adv.FFmpeg.FormatDesc</string>
</property>
</widget>
</item>
<item row="3" column="1">
<item row="4" column="1">
<widget class="QLabel" name="advOutFFFormatDesc">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="0">
<item row="6" column="0">
<widget class="QLabel" name="label_40">
<property name="text">
<string>Basic.Settings.Output.VideoBitrate</string>
</property>
</widget>
</item>
<item row="5" column="1">
<item row="6" column="1">
<widget class="QSpinBox" name="advOutFFVBitrate">
<property name="minimum">
<number>0</number>
@ -1413,7 +1433,7 @@
</property>
</widget>
</item>
<item row="6" column="0">
<item row="7" column="0">
<widget class="QCheckBox" name="advOutFFUseRescale">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
@ -1429,7 +1449,7 @@
</property>
</widget>
</item>
<item row="6" column="1">
<item row="7" column="1">
<widget class="QComboBox" name="advOutFFRescale">
<property name="enabled">
<bool>false</bool>
@ -1439,34 +1459,34 @@
</property>
</widget>
</item>
<item row="7" column="0">
<item row="8" column="0">
<widget class="QLabel" name="label_37">
<property name="text">
<string>Basic.Settings.Output.Adv.FFmpeg.VEncoder</string>
</property>
</widget>
</item>
<item row="7" column="1">
<item row="8" column="1">
<widget class="QComboBox" name="advOutFFVEncoder"/>
</item>
<item row="9" column="0">
<item row="10" column="0">
<widget class="QLabel" name="label_38">
<property name="text">
<string>Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings</string>
</property>
</widget>
</item>
<item row="9" column="1">
<item row="10" column="1">
<widget class="QLineEdit" name="advOutFFVCfg"/>
</item>
<item row="10" column="0">
<item row="11" column="0">
<widget class="QLabel" name="label_41">
<property name="text">
<string>Basic.Settings.Output.AudioBitrate</string>
</property>
</widget>
</item>
<item row="10" column="1">
<item row="11" column="1">
<widget class="QSpinBox" name="advOutFFABitrate">
<property name="minimum">
<number>32</number>
@ -1482,14 +1502,14 @@
</property>
</widget>
</item>
<item row="11" column="0">
<item row="12" column="0">
<widget class="QLabel" name="label_47">
<property name="text">
<string>Basic.Settings.Output.Adv.AudioTrack</string>
</property>
</widget>
</item>
<item row="11" column="1">
<item row="12" column="1">
<widget class="QWidget" name="widget_10" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
@ -1544,24 +1564,24 @@
</layout>
</widget>
</item>
<item row="12" column="0">
<item row="13" column="0">
<widget class="QLabel" name="label_39">
<property name="text">
<string>Basic.Settings.Output.Adv.FFmpeg.AEncoder</string>
</property>
</widget>
</item>
<item row="12" column="1">
<item row="13" column="1">
<widget class="QComboBox" name="advOutFFAEncoder"/>
</item>
<item row="13" column="0">
<item row="14" column="0">
<widget class="QLabel" name="label_46">
<property name="text">
<string>Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings</string>
</property>
</widget>
</item>
<item row="13" column="1">
<item row="14" column="1">
<widget class="QLineEdit" name="advOutFFACfg"/>
</item>
<item row="0" column="0">
@ -1600,16 +1620,26 @@
</item>
</widget>
</item>
<item row="4" column="0">
<item row="5" column="0">
<widget class="QLabel" name="label_1337">
<property name="text">
<string>Basic.Settings.Output.Adv.FFmpeg.MuxerSettings</string>
</property>
</widget>
</item>
<item row="4" column="1">
<item row="5" column="1">
<widget class="QLineEdit" name="advOutFFMCfg"/>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="advOutFFNoSpace">
<property name="text">
<string>Basic.Settings.Output.NoSpaceFileName</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>

View file

@ -889,17 +889,18 @@ static void get_last_log(void)
}
}
string GenerateTimeDateFilename(const char *extension)
string GenerateTimeDateFilename(const char *extension, bool noSpace)
{
time_t now = time(0);
char file[256] = {};
struct tm *cur_time;
cur_time = localtime(&now);
snprintf(file, sizeof(file), "%d-%02d-%02d %02d-%02d-%02d.%s",
snprintf(file, sizeof(file), "%d-%02d-%02d%c%02d-%02d-%02d.%s",
cur_time->tm_year+1900,
cur_time->tm_mon+1,
cur_time->tm_mday,
noSpace ? '_' : ' ',
cur_time->tm_hour,
cur_time->tm_min,
cur_time->tm_sec,

View file

@ -33,7 +33,7 @@
std::string CurrentTimeString();
std::string CurrentDateTimeString();
std::string GenerateTimeDateFilename(const char *extension);
std::string GenerateTimeDateFilename(const char *extension, bool noSpace=false);
QObject *CreateShortcutFilter();
struct BaseLexer {

View file

@ -430,6 +430,8 @@ bool SimpleOutput::StartRecording()
"SimpleOutput", "RecFormat");
const char *mux = config_get_string(main->Config(), "SimpleOutput",
"MuxerCustom");
bool noSpace = config_get_bool(main->Config(), "SimpleOutput",
"FileNameWithoutSpace");
os_dir_t *dir = path ? os_opendir(path) : nullptr;
@ -449,7 +451,8 @@ bool SimpleOutput::StartRecording()
if (lastChar != '/' && lastChar != '\\')
strPath += "/";
strPath += GenerateTimeDateFilename(ffmpegOutput ? "avi" : format);
strPath += GenerateTimeDateFilename(ffmpegOutput ? "avi" : format,
noSpace);
SetupOutputs();
@ -931,6 +934,7 @@ bool AdvancedOutput::StartRecording()
{
const char *path;
const char *format;
bool noSpace = false;
if (!useStreamEncoder) {
if (!ffmpegOutput) {
@ -950,6 +954,10 @@ bool AdvancedOutput::StartRecording()
ffmpegRecording ? "FFFilePath" : "RecFilePath");
format = config_get_string(main->Config(), "AdvOut",
ffmpegRecording ? "FFExtension" : "RecFormat");
noSpace = config_get_bool(main->Config(), "AdvOut",
ffmpegRecording ?
"FFFileNameWithoutSpace" :
"RecFileNameWithoutSpace");
os_dir_t *dir = path ? os_opendir(path) : nullptr;
@ -969,7 +977,7 @@ bool AdvancedOutput::StartRecording()
if (lastChar != '/' && lastChar != '\\')
strPath += "/";
strPath += GenerateTimeDateFilename(format);
strPath += GenerateTimeDateFilename(format, noSpace);
obs_data_t *settings = obs_data_create();
obs_data_set_string(settings,

View file

@ -266,6 +266,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->outputMode, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->streamType, COMBO_CHANGED, STREAM1_CHANGED);
HookWidget(ui->simpleOutputPath, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleNoSpace, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutRecFormat, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutputVBitrate, SCROLL_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutputABitrate, COMBO_CHANGED, OUTPUTS_CHANGED);
@ -285,6 +286,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->advOutApplyService, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecType, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecPath, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutNoSpace, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecFormat, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecEncoder, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecUseRescale, CHECK_CHANGED, OUTPUTS_CHANGED);
@ -296,6 +298,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->advOutRecTrack4, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFType, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFRecPath, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFNoSpace, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFURL, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFFormat, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFMCfg, EDIT_CHANGED, OUTPUTS_CHANGED);
@ -1011,6 +1014,8 @@ void OBSBasicSettings::LoadSimpleOutputSettings()
{
const char *path = config_get_string(main->Config(), "SimpleOutput",
"FilePath");
bool noSpace = config_get_bool(main->Config(), "SimpleOutput",
"FileNameWithoutSpace");
const char *format = config_get_string(main->Config(), "SimpleOutput",
"RecFormat");
int videoBitrate = config_get_uint(main->Config(), "SimpleOutput",
@ -1033,6 +1038,7 @@ void OBSBasicSettings::LoadSimpleOutputSettings()
audioBitrate = FindClosestAvailableAACBitrate(audioBitrate);
ui->simpleOutputPath->setText(path);
ui->simpleNoSpace->setChecked(noSpace);
ui->simpleOutputVBitrate->setValue(videoBitrate);
int idx = ui->simpleOutRecFormat->findText(format);
@ -1133,6 +1139,8 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings()
"RecFormat");
const char *path = config_get_string(main->Config(), "AdvOut",
"RecFilePath");
bool noSpace = config_get_bool(main->Config(), "AdvOut",
"RecFileNameWithoutSpace");
bool rescale = config_get_bool(main->Config(), "AdvOut",
"RecRescale");
const char *rescaleRes = config_get_string(main->Config(), "AdvOut",
@ -1144,6 +1152,7 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings()
int typeIndex = (astrcmpi(type, "FFmpeg") == 0) ? 1 : 0;
ui->advOutRecType->setCurrentIndex(typeIndex);
ui->advOutRecPath->setText(path);
ui->advOutNoSpace->setChecked(noSpace);
ui->advOutRecUseRescale->setChecked(rescale);
ui->advOutRecRescale->setCurrentText(rescaleRes);
ui->advOutMuxCustom->setText(muxCustom);
@ -1205,6 +1214,8 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings()
"FFOutputToFile");
const char *path = config_get_string(main->Config(), "AdvOut",
"FFFilePath");
bool noSpace = config_get_bool(main->Config(), "AdvOut",
"FFFileNameWithoutSpace");
const char *url = config_get_string(main->Config(), "AdvOut", "FFURL");
const char *format = config_get_string(main->Config(), "AdvOut",
"FFFormat");
@ -1237,6 +1248,7 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings()
ui->advOutFFType->setCurrentIndex(saveFile ? 0 : 1);
ui->advOutFFRecPath->setText(QT_UTF8(path));
ui->advOutFFNoSpace->setChecked(noSpace);
ui->advOutFFURL->setText(QT_UTF8(url));
SelectFormat(ui->advOutFFFormat, format, mimeType);
ui->advOutFFMCfg->setText(muxCustom);
@ -2126,6 +2138,7 @@ void OBSBasicSettings::SaveOutputSettings()
SaveSpinBox(ui->simpleOutputVBitrate, "SimpleOutput", "VBitrate");
SaveCombo(ui->simpleOutputABitrate, "SimpleOutput", "ABitrate");
SaveEdit(ui->simpleOutputPath, "SimpleOutput", "FilePath");
SaveCheckBox(ui->simpleNoSpace, "SimpleOutput", "FileNameWithoutSpace");
SaveCombo(ui->simpleOutRecFormat, "SimpleOutput", "RecFormat");
SaveCheckBox(ui->simpleOutAdvanced, "SimpleOutput", "UseAdvanced");
SaveCombo(ui->simpleOutPreset, "SimpleOutput", "Preset");
@ -2146,6 +2159,7 @@ void OBSBasicSettings::SaveOutputSettings()
RecTypeFromIdx(ui->advOutRecType->currentIndex()));
SaveEdit(ui->advOutRecPath, "AdvOut", "RecFilePath");
SaveCheckBox(ui->advOutNoSpace, "AdvOut", "RecFileNameWithoutSpace");
SaveCombo(ui->advOutRecFormat, "AdvOut", "RecFormat");
SaveComboData(ui->advOutRecEncoder, "AdvOut", "RecEncoder");
SaveCheckBox(ui->advOutRecUseRescale, "AdvOut", "RecRescale");
@ -2161,6 +2175,7 @@ void OBSBasicSettings::SaveOutputSettings()
config_set_bool(main->Config(), "AdvOut", "FFOutputToFile",
ui->advOutFFType->currentIndex() == 0 ? true : false);
SaveEdit(ui->advOutFFRecPath, "AdvOut", "FFFilePath");
SaveCheckBox(ui->advOutFFNoSpace, "AdvOut", "FFFileNameWithoutSpace");
SaveEdit(ui->advOutFFURL, "AdvOut", "FFURL");
SaveFormat(ui->advOutFFFormat);
SaveEdit(ui->advOutFFMCfg, "AdvOut", "FFMCustom");
@ -2550,6 +2565,11 @@ void OBSBasicSettings::on_advOutFFVEncoder_currentIndexChanged(int idx)
}
}
void OBSBasicSettings::on_advOutFFType_currentIndexChanged(int idx)
{
ui->advOutFFNoSpace->setHidden(idx != 0);
}
void OBSBasicSettings::on_colorFormat_currentIndexChanged(const QString &text)
{
bool usingNV12 = text == "NV12";

View file

@ -245,6 +245,7 @@ private slots:
void on_advOutFFFormat_currentIndexChanged(int idx);
void on_advOutFFAEncoder_currentIndexChanged(int idx);
void on_advOutFFVEncoder_currentIndexChanged(int idx);
void on_advOutFFType_currentIndexChanged(int idx);
void on_colorFormat_currentIndexChanged(const QString &text);