Browse Source

obs-filters: Fix invalid scale filter combination

Undistort checkbox should be ignored if bilinear lowres effect is used.
jpark37 3 years ago
parent
commit
a014137ff1
1 changed files with 7 additions and 7 deletions
  1. 7 7
      plugins/obs-filters/scale-filter.c

+ 7 - 7
plugins/obs-filters/scale-filter.c

@@ -50,6 +50,7 @@ struct scale_filter_data {
 	bool aspect_ratio_only;
 	bool aspect_ratio_only;
 	bool target_valid;
 	bool target_valid;
 	bool valid;
 	bool valid;
+	bool can_undistort;
 	bool undistort;
 	bool undistort;
 	bool upscale;
 	bool upscale;
 	bool base_canvas_resolution;
 	bool base_canvas_resolution;
@@ -111,7 +112,7 @@ static void scale_filter_update(void *data, obs_data_t *settings)
 		filter->sampling = OBS_SCALE_BICUBIC;
 		filter->sampling = OBS_SCALE_BICUBIC;
 	}
 	}
 
 
-	filter->undistort = obs_data_get_bool(settings, S_UNDISTORT);
+	filter->can_undistort = obs_data_get_bool(settings, S_UNDISTORT);
 }
 }
 
 
 static void scale_filter_destroy(void *data)
 static void scale_filter_destroy(void *data)
@@ -207,12 +208,7 @@ static void scale_filter_tick(void *data, float seconds)
 	vec2_set(&filter->dimension, (float)cx, (float)cy);
 	vec2_set(&filter->dimension, (float)cx, (float)cy);
 	vec2_set(&filter->dimension_i, 1.0f / (float)cx, 1.0f / (float)cy);
 	vec2_set(&filter->dimension_i, 1.0f / (float)cx, 1.0f / (float)cy);
 
 
-	if (filter->undistort) {
-		filter->undistort_factor = new_aspect / old_aspect;
-	} else {
-		filter->undistort_factor = 1.0;
-	}
-
+	filter->undistort = filter->can_undistort;
 	filter->upscale = false;
 	filter->upscale = false;
 
 
 	/* ------------------------- */
 	/* ------------------------- */
@@ -221,6 +217,7 @@ static void scale_filter_tick(void *data, float seconds)
 
 
 	if (lower_than_2x && filter->sampling != OBS_SCALE_POINT) {
 	if (lower_than_2x && filter->sampling != OBS_SCALE_POINT) {
 		type = OBS_EFFECT_BILINEAR_LOWRES;
 		type = OBS_EFFECT_BILINEAR_LOWRES;
+		filter->undistort = false;
 	} else {
 	} else {
 		switch (filter->sampling) {
 		switch (filter->sampling) {
 		default:
 		default:
@@ -242,6 +239,9 @@ static void scale_filter_tick(void *data, float seconds)
 		}
 		}
 	}
 	}
 
 
+	filter->undistort_factor = filter->undistort ? (new_aspect / old_aspect)
+						     : 1.0;
+
 	filter->effect = obs_get_base_effect(type);
 	filter->effect = obs_get_base_effect(type);
 	filter->image_param =
 	filter->image_param =
 		gs_effect_get_param_by_name(filter->effect, "image");
 		gs_effect_get_param_by_name(filter->effect, "image");