From c69e7c96f3989616cfc73e4559cb3d03193c3b48 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sun, 8 Feb 2015 01:29:15 -0800 Subject: [PATCH] UI: Base encoder rescales on output resolution The 'rescale' values in advanced output section are supposed to be based upon the output resolution of the program. Meaning they should not be used for scaling up, because the resolution downloaded from the graphics processor is the output resolution set in video settings; thus any resolution you set for the 'rescale' values is scaled from that. --- obs/window-basic-settings.cpp | 31 +++++++++++++++++++------------ obs/window-basic-settings.hpp | 3 ++- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp index a1a2d81dc..cc47f1373 100644 --- a/obs/window-basic-settings.cpp +++ b/obs/window-basic-settings.cpp @@ -402,7 +402,8 @@ static const double vals[] = static const size_t numVals = sizeof(vals)/sizeof(double); -void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy) +void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy, + uint32_t out_cx, uint32_t out_cy) { QString advRescale; QString advRecRescale; @@ -420,12 +421,15 @@ void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy) for (size_t idx = 0; idx < numVals; idx++) { uint32_t downscaleCX = uint32_t(double(cx) / vals[idx]); uint32_t downscaleCY = uint32_t(double(cy) / vals[idx]); + uint32_t outDownscaleCX = uint32_t(double(out_cx) / vals[idx]); + uint32_t outDownscaleCY = uint32_t(double(out_cy) / vals[idx]); string res = ResString(downscaleCX, downscaleCY); + string outRes = ResString(outDownscaleCX, outDownscaleCY); ui->outputResolution->addItem(res.c_str()); - ui->advOutRescale->addItem(res.c_str()); - ui->advOutRecRescale->addItem(res.c_str()); - ui->advOutFFRescale->addItem(res.c_str()); + ui->advOutRescale->addItem(outRes.c_str()); + ui->advOutRecRescale->addItem(outRes.c_str()); + ui->advOutFFRescale->addItem(outRes.c_str()); } string res = ResString(cx, cy); @@ -471,6 +475,8 @@ void OBSBasicSettings::LoadResolutionLists() { uint32_t cx = config_get_uint(main->Config(), "Video", "BaseCX"); uint32_t cy = config_get_uint(main->Config(), "Video", "BaseCY"); + uint32_t out_cx = config_get_uint(main->Config(), "Video", "OutputCX"); + uint32_t out_cy = config_get_uint(main->Config(), "Video", "OutputCY"); vector monitors; ui->baseResolution->clear(); @@ -482,14 +488,11 @@ void OBSBasicSettings::LoadResolutionLists() ui->baseResolution->addItem(res.c_str()); } - ResetDownscales(cx, cy); + ResetDownscales(cx, cy, out_cx, out_cy); ui->baseResolution->lineEdit()->setText(ResString(cx, cy).c_str()); - - cx = config_get_uint(main->Config(), "Video", "OutputCX"); - cy = config_get_uint(main->Config(), "Video", "OutputCY"); - - ui->outputResolution->lineEdit()->setText(ResString(cx, cy).c_str()); + ui->outputResolution->lineEdit()->setText( + ResString(out_cx, out_cy).c_str()); } static inline void LoadFPSCommon(OBSBasic *main, Ui::OBSBasicSettings *ui) @@ -1332,10 +1335,14 @@ void OBSBasicSettings::on_baseResolution_editTextChanged(const QString &text) { if (!loading && ValidResolutions(ui.get())) { QString baseResolution = text; - uint32_t cx, cy; + uint32_t cx, cy, out_cx, out_cy; ConvertResText(QT_TO_UTF8(baseResolution), cx, cy); - ResetDownscales(cx, cy); + + QString outRes = ui->outputResolution->lineEdit()->text(); + ConvertResText(QT_TO_UTF8(outRes), out_cx, out_cy); + + ResetDownscales(cx, cy, out_cx, out_cy); } } diff --git a/obs/window-basic-settings.hpp b/obs/window-basic-settings.hpp index 003827da7..4180dbd59 100644 --- a/obs/window-basic-settings.hpp +++ b/obs/window-basic-settings.hpp @@ -117,7 +117,8 @@ private: /* video */ void LoadRendererList(); - void ResetDownscales(uint32_t cx, uint32_t cy); + void ResetDownscales(uint32_t cx, uint32_t cy, + uint32_t out_cx, uint32_t out_cy); void LoadDownscaleFilters(); void LoadResolutionLists(); void LoadFPSData();