Browse Source

UI: Add video scale filters to basic settings

jp9000 11 years ago
parent
commit
640967b997

+ 5 - 0
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"

+ 1 - 1
obs/forms/OBSBasicSettings.ui

@@ -866,7 +866,7 @@
          <item row="4" column="1">
           <widget class="QComboBox" name="downscaleFilter">
            <property name="enabled">
-            <bool>false</bool>
+            <bool>true</bool>
            </property>
           </widget>
          </item>

+ 15 - 0
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);
 

+ 25 - 0
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();
 }

+ 1 - 0
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();