From 3fe2a79c811e80cf73cf29d35a08ae607b732eb7 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 17 Feb 2017 18:07:32 +0100 Subject: [PATCH] UI: Add codec compatability checkbox to ffmpeg output Closes jp9000/obs-studio#804 --- UI/data/locale/en-US.ini | 1 + UI/forms/OBSBasicSettings.ui | 47 ++++++++++++++++++++---------------- UI/window-basic-main.cpp | 2 ++ UI/window-basic-settings.cpp | 18 ++++++++++++-- UI/window-basic-settings.hpp | 1 + 5 files changed, 46 insertions(+), 23 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index afe988feb..0f054c765 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -539,6 +539,7 @@ Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio Encoder" Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio Encoder Settings (if any)" Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer Settings (if any)" Basic.Settings.Output.Adv.FFmpeg.GOPSize="Keyframe interval (frames)" +Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Show all codecs (even if potentially incompatible)" # basic mode 'output' settings - advanced section - recording subsection - completer FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index d8e860e77..fa8b801c7 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -1928,7 +1928,7 @@ - + Basic.Settings.Output.VideoBitrate @@ -1938,7 +1938,7 @@ - + 0 @@ -1951,7 +1951,7 @@ - + 1000000000 @@ -1961,20 +1961,17 @@ - + Basic.Settings.Output.Adv.FFmpeg.GOPSize - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - advOutFFVGOPSize - + @@ -1990,7 +1987,7 @@ - + false @@ -2000,7 +1997,14 @@ - + + + + Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat + + + + Basic.Settings.Output.Adv.FFmpeg.VEncoder @@ -2010,10 +2014,10 @@ - + - + Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings @@ -2023,10 +2027,10 @@ - + - + Basic.Settings.Output.AudioBitrate @@ -2036,7 +2040,7 @@ - + 32 @@ -2052,14 +2056,14 @@ - + Basic.Settings.Output.Adv.AudioTrack - + @@ -2128,7 +2132,7 @@ - + Basic.Settings.Output.Adv.FFmpeg.AEncoder @@ -2138,10 +2142,10 @@ - + - + Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings @@ -2151,7 +2155,7 @@ - + @@ -4158,6 +4162,7 @@ advOutFFVGOPSize advOutFFUseRescale advOutFFRescale + advOutFFIgnoreCompat advOutFFVEncoder advOutFFVCfg advOutFFABitrate diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 0e213c86a..2f9fbf719 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -977,6 +977,8 @@ bool OBSBasic::InitBasicConfigDefaults() config_set_default_uint (basicConfig, "AdvOut", "FFVGOPSize", 250); config_set_default_bool (basicConfig, "AdvOut", "FFUseRescale", false); + config_set_default_bool (basicConfig, "AdvOut", "FFIgnoreCompat", + false); config_set_default_uint (basicConfig, "AdvOut", "FFABitrate", 160); config_set_default_uint (basicConfig, "AdvOut", "FFAudioTrack", 1); diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index d0b436013..a7d28cad7 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -342,6 +342,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->advOutFFVBitrate, SCROLL_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFVGOPSize, SCROLL_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFUseRescale, CHECK_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->advOutFFIgnoreCompat, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFRescale, CBEDIT_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFVEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFVCfg, EDIT_CHANGED, OUTPUTS_CHANGED); @@ -352,7 +353,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->advOutFFTrack4, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFTrack5, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFTrack6, CHECK_CHANGED, OUTPUTS_CHANGED); - HookWidget(ui->advOutFFAEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->advOutFFAEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFACfg, EDIT_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutTrack1Bitrate, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutTrack1Name, EDIT_CHANGED, OUTPUTS_CHANGED); @@ -813,7 +814,9 @@ void OBSBasicSettings::ReloadCodecs(const ff_format_desc *formatDesc) if (formatDesc == nullptr) return; - OBSFFCodecDesc codecDescs(ff_codec_supported(formatDesc)); + bool ignore_compatability = ui->advOutFFIgnoreCompat->isChecked(); + OBSFFCodecDesc codecDescs(ff_codec_supported(formatDesc, + ignore_compatability)); const ff_codec_desc *codec = codecDescs.get(); @@ -1563,6 +1566,8 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings() "FFVGOPSize"); bool rescale = config_get_bool(main->Config(), "AdvOut", "FFRescale"); + bool codecCompat = config_get_bool(main->Config(), "AdvOut", + "FFIgnoreCompat"); const char *rescaleRes = config_get_string(main->Config(), "AdvOut", "FFRescaleRes"); const char *vEncoder = config_get_string(main->Config(), "AdvOut", @@ -1591,6 +1596,7 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings() ui->advOutFFVBitrate->setValue(videoBitrate); ui->advOutFFVGOPSize->setValue(gopSize); ui->advOutFFUseRescale->setChecked(rescale); + ui->advOutFFIgnoreCompat->setChecked(codecCompat); ui->advOutFFRescale->setEnabled(rescale); ui->advOutFFRescale->setCurrentText(rescaleRes); SelectEncoder(ui->advOutFFVEncoder, vEncoder, vEncoderId); @@ -2753,6 +2759,7 @@ void OBSBasicSettings::SaveOutputSettings() SaveSpinBox(ui->advOutFFVBitrate, "AdvOut", "FFVBitrate"); SaveSpinBox(ui->advOutFFVGOPSize, "AdvOut", "FFVGOPSize"); SaveCheckBox(ui->advOutFFUseRescale, "AdvOut", "FFRescale"); + SaveCheckBox(ui->advOutFFIgnoreCompat, "AdvOut", "FFIgnoreCompat"); SaveCombo(ui->advOutFFRescale, "AdvOut", "FFRescaleRes"); SaveEncoder(ui->advOutFFVEncoder, "AdvOut", "FFVEncoder"); SaveEdit(ui->advOutFFVCfg, "AdvOut", "FFVCustom"); @@ -3110,6 +3117,13 @@ void OBSBasicSettings::on_advOutRecEncoder_currentIndexChanged(int idx) } } +void OBSBasicSettings::on_advOutFFIgnoreCompat_stateChanged(int) +{ + /* Little hack to reload codecs when checked */ + on_advOutFFFormat_currentIndexChanged( + ui->advOutFFFormat->currentIndex()); +} + #define DEFAULT_CONTAINER_STR \ QTStr("Basic.Settings.Output.Adv.FFmpeg.FormatDescDef") diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index 2064fd4bf..6440322e2 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -256,6 +256,7 @@ private slots: void on_advOutFFPathBrowse_clicked(); void on_advOutEncoder_currentIndexChanged(int idx); void on_advOutRecEncoder_currentIndexChanged(int idx); + void on_advOutFFIgnoreCompat_stateChanged(int state); void on_advOutFFFormat_currentIndexChanged(int idx); void on_advOutFFAEncoder_currentIndexChanged(int idx); void on_advOutFFVEncoder_currentIndexChanged(int idx);