瀏覽代碼

libobs: Use bilinear low res scale effect

The normal scaling methods cannot sample enough pixels to create an
accurate output image when the output size is under half the base size,
so use the bilinear low resolution scaling effect in that case instead
to ensure a more accurate low resolution image.
jp9000 10 年之前
父節點
當前提交
13fd6ff064
共有 1 個文件被更改,包括 8 次插入0 次删除
  1. 8 0
      libobs/obs-video.c

+ 8 - 0
libobs/obs-video.c

@@ -156,6 +156,14 @@ static inline void render_main_texture(struct obs_core_video *video,
 static inline gs_effect_t *get_scale_effect_internal(
 		struct obs_core_video *video)
 {
+	/* if the dimension is under half the size of the original image,
+	 * bicubic/lanczos can't sample enough pixels to create an accurate
+	 * image, so use the bilinear low resolution effect instead */
+	if (video->output_width  < (video->base_width  / 2) &&
+	    video->output_height < (video->base_height / 2)) {
+		return video->bilinear_lowres_effect;
+	}
+
 	switch (video->scale_type) {
 	case OBS_SCALE_BILINEAR: return video->default_effect;
 	case OBS_SCALE_LANCZOS:  return video->lanczos_effect;