diff --git a/obs/data/locale/en-US.ini b/obs/data/locale/en-US.ini index 1128608c9..bfa7d4915 100644 --- a/obs/data/locale/en-US.ini +++ b/obs/data/locale/en-US.ini @@ -244,6 +244,11 @@ Basic.Settings.Video.Renderer="Renderer:" Basic.Settings.Video.InvalidResolution="Invalid resolution value. Must be [width]x[height] (i.e. 1920x1080)" Basic.Settings.Video.CurrentlyActive="Video output is currently active. Please turn off any outputs to change video settings." +# scale filters +Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (Fastest, but blurry if scaling)" +Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Sharpened scaling, 16 samples)" +Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Sparpened scaling, 32 samples)" + # basic mode 'audio' settings Basic.Settings.Audio="Audio" Basic.Settings.Audio.SampleRate="Sample Rate" diff --git a/obs/forms/OBSBasicSettings.ui b/obs/forms/OBSBasicSettings.ui index cd674b20d..847fc6e6e 100644 --- a/obs/forms/OBSBasicSettings.ui +++ b/obs/forms/OBSBasicSettings.ui @@ -866,7 +866,7 @@ - false + true diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index fae02016a..727282df8 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -471,6 +471,7 @@ bool OBSBasic::InitBasicConfigDefaults() config_set_default_uint (basicConfig, "Video", "FPSInt", 30); config_set_default_uint (basicConfig, "Video", "FPSNum", 30); config_set_default_uint (basicConfig, "Video", "FPSDen", 1); + config_set_default_string(basicConfig, "Video", "ScaleType", "bicubic"); config_set_default_uint (basicConfig, "Audio", "SampleRate", 44100); config_set_default_string(basicConfig, "Audio", "ChannelSetup", @@ -1335,6 +1336,19 @@ static inline int AttemptToResetVideo(struct obs_video_info *ovi) return ret; } +static inline enum obs_scale_type GetScaleType(ConfigFile &basicConfig) +{ + const char *scaleTypeStr = config_get_string(basicConfig, + "Video", "ScaleType"); + + if (astrcmpi(scaleTypeStr, "bilinear") == 0) + return OBS_SCALE_BILINEAR; + else if (astrcmpi(scaleTypeStr, "lanczos") == 0) + return OBS_SCALE_LANCZOS; + else + return OBS_SCALE_BICUBIC; +} + int OBSBasic::ResetVideo() { struct obs_video_info ovi; @@ -1356,6 +1370,7 @@ int OBSBasic::ResetVideo() ovi.range = VIDEO_RANGE_FULL; ovi.adapter = 0; ovi.gpu_conversion = true; + ovi.scale_type = GetScaleType(basicConfig); QTToGSWindow(ui->preview->winId(), ovi.window); diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp index 77cbd795d..c739dc442 100644 --- a/obs/window-basic-settings.cpp +++ b/obs/window-basic-settings.cpp @@ -338,6 +338,29 @@ void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy) ui->outputResolution->lineEdit()->setText(ResString(cx, cy).c_str()); } +void OBSBasicSettings::LoadDownscaleFilters() +{ + ui->downscaleFilter->addItem( + QTStr("Basic.Settings.Video.DownscaleFilter.Bilinear"), + QT_UTF8("bilinear")); + ui->downscaleFilter->addItem( + QTStr("Basic.Settings.Video.DownscaleFilter.Bicubic"), + QT_UTF8("bicubic")); + ui->downscaleFilter->addItem( + QTStr("Basic.Settings.Video.DownscaleFilter.Lanczos"), + QT_UTF8("lanczos")); + + const char *scaleType = config_get_string(main->Config(), + "Video", "ScaleType"); + + if (astrcmpi(scaleType, "bilinear") == 0) + ui->downscaleFilter->setCurrentIndex(0); + else if (astrcmpi(scaleType, "lanczos") == 0) + ui->downscaleFilter->setCurrentIndex(2); + else + ui->downscaleFilter->setCurrentIndex(1); +} + void OBSBasicSettings::LoadResolutionLists() { uint32_t cx = config_get_uint(main->Config(), "Video", "BaseCX"); @@ -415,6 +438,7 @@ void OBSBasicSettings::LoadVideoSettings() LoadRendererList(); LoadResolutionLists(); LoadFPSData(); + LoadDownscaleFilters(); loading = false; } @@ -614,6 +638,7 @@ void OBSBasicSettings::SaveVideoSettings() SaveSpinBox(ui->fpsInteger, "Video", "FPSInt"); SaveSpinBox(ui->fpsNumerator, "Video", "FPSNum"); SaveSpinBox(ui->fpsDenominator, "Video", "FPSDen"); + SaveComboData(ui->downscaleFilter, "Video", "ScaleType"); main->ResetVideo(); } diff --git a/obs/window-basic-settings.hpp b/obs/window-basic-settings.hpp index 378d765fc..08efe455b 100644 --- a/obs/window-basic-settings.hpp +++ b/obs/window-basic-settings.hpp @@ -104,6 +104,7 @@ private: /* video */ void LoadRendererList(); void ResetDownscales(uint32_t cx, uint32_t cy); + void LoadDownscaleFilters(); void LoadResolutionLists(); void LoadFPSData();