Explorar o código

obs-filters: Apply sharpness filter in linear space

jpark37 %!s(int64=4) %!d(string=hai) anos
pai
achega
a11e34615d

+ 0 - 2
plugins/obs-filters/data/sharpness.effect

@@ -4,8 +4,6 @@
 uniform float4x4 ViewProj;
 uniform texture2d image;
 
-uniform texture2d target;
-
 uniform float sharpness;
 uniform float texture_width;
 uniform float texture_height;

+ 2 - 0
plugins/obs-filters/obs-filters.c

@@ -21,6 +21,7 @@ extern struct obs_source_info color_key_filter;
 extern struct obs_source_info color_key_filter_v2;
 extern struct obs_source_info color_grade_filter;
 extern struct obs_source_info sharpness_filter;
+extern struct obs_source_info sharpness_filter_v2;
 extern struct obs_source_info chroma_key_filter;
 extern struct obs_source_info chroma_key_filter_v2;
 extern struct obs_source_info async_delay_filter;
@@ -51,6 +52,7 @@ bool obs_module_load(void)
 	obs_register_source(&color_key_filter_v2);
 	obs_register_source(&color_grade_filter);
 	obs_register_source(&sharpness_filter);
+	obs_register_source(&sharpness_filter_v2);
 	obs_register_source(&chroma_key_filter);
 	obs_register_source(&chroma_key_filter_v2);
 	obs_register_source(&async_delay_filter);

+ 30 - 2
plugins/obs-filters/sharpness-filter.c

@@ -73,7 +73,7 @@ static void *sharpness_create(obs_data_t *settings, obs_source_t *context)
 	return filter;
 }
 
-static void sharpness_render(void *data, gs_effect_t *effect)
+static void sharpness_render_internal(void *data, bool srgb)
 {
 	struct sharpness_data *filter = data;
 
@@ -90,7 +90,21 @@ static void sharpness_render(void *data, gs_effect_t *effect)
 	gs_effect_set_float(filter->texture_width, filter->texwidth);
 	gs_effect_set_float(filter->texture_height, filter->texheight);
 
+	const bool previous = gs_set_linear_srgb(srgb);
 	obs_source_process_filter_end(filter->context, filter->effect, 0, 0);
+	gs_set_linear_srgb(previous);
+}
+
+static void sharpness_render_v1(void *data, gs_effect_t *effect)
+{
+	sharpness_render_internal(data, false);
+
+	UNUSED_PARAMETER(effect);
+}
+
+static void sharpness_render_v2(void *data, gs_effect_t *effect)
+{
+	sharpness_render_internal(data, true);
 
 	UNUSED_PARAMETER(effect);
 }
@@ -115,12 +129,26 @@ static void sharpness_defaults(obs_data_t *settings)
 struct obs_source_info sharpness_filter = {
 	.id = "sharpness_filter",
 	.type = OBS_SOURCE_TYPE_FILTER,
+	.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CAP_OBSOLETE,
+	.get_name = sharpness_getname,
+	.create = sharpness_create,
+	.destroy = sharpness_destroy,
+	.update = sharpness_update,
+	.video_render = sharpness_render_v1,
+	.get_properties = sharpness_properties,
+	.get_defaults = sharpness_defaults,
+};
+
+struct obs_source_info sharpness_filter_v2 = {
+	.id = "sharpness_filter",
+	.version = 2,
+	.type = OBS_SOURCE_TYPE_FILTER,
 	.output_flags = OBS_SOURCE_VIDEO,
 	.get_name = sharpness_getname,
 	.create = sharpness_create,
 	.destroy = sharpness_destroy,
 	.update = sharpness_update,
-	.video_render = sharpness_render,
+	.video_render = sharpness_render_v2,
 	.get_properties = sharpness_properties,
 	.get_defaults = sharpness_defaults,
 };