From 01565a0293e6d1b3760b05148ad5af86f51aec0d Mon Sep 17 00:00:00 2001 From: jpark37 Date: Mon, 18 Apr 2022 00:15:49 -0700 Subject: [PATCH] obs-transitions: More HDR support Updated luma wipe, slide, and swipe. --- .../data/luma_wipe_transition.effect | 1 - .../obs-transitions/data/slide_transition.effect | 1 - .../obs-transitions/data/swipe_transition.effect | 1 - plugins/obs-transitions/transition-luma-wipe.c | 13 +++++++++++-- plugins/obs-transitions/transition-slide.c | 13 +++++++++++-- plugins/obs-transitions/transition-swipe.c | 13 +++++++++++-- 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/plugins/obs-transitions/data/luma_wipe_transition.effect b/plugins/obs-transitions/data/luma_wipe_transition.effect index da55fe9a0..de4ebe4be 100644 --- a/plugins/obs-transitions/data/luma_wipe_transition.effect +++ b/plugins/obs-transitions/data/luma_wipe_transition.effect @@ -60,7 +60,6 @@ float4 PSLumaWipe(VertData v_in) : TARGET rgba = lerp(a_color, b_color, alpha); } - rgba.rgb = srgb_nonlinear_to_linear(rgba.rgb); return rgba; } diff --git a/plugins/obs-transitions/data/slide_transition.effect b/plugins/obs-transitions/data/slide_transition.effect index bf92c4ef4..de0c8cc2f 100644 --- a/plugins/obs-transitions/data/slide_transition.effect +++ b/plugins/obs-transitions/data/slide_transition.effect @@ -45,7 +45,6 @@ float4 PSSlide(VertData v_in) : TARGET ? tex_b.Sample(textureSampler, tex_b_uv) : tex_a.Sample(textureSampler, tex_a_uv); - outc.rgb = srgb_nonlinear_to_linear(outc.rgb); return outc; } diff --git a/plugins/obs-transitions/data/swipe_transition.effect b/plugins/obs-transitions/data/swipe_transition.effect index 3f07d0588..f0db43518 100644 --- a/plugins/obs-transitions/data/swipe_transition.effect +++ b/plugins/obs-transitions/data/swipe_transition.effect @@ -42,7 +42,6 @@ float4 PSSwipe(VertData v_in) : TARGET ? tex_b.Sample(textureSampler, v_in.uv) : tex_a.Sample(textureSampler, swipe_uv); - outc.rgb = srgb_nonlinear_to_linear(outc.rgb); return outc; } diff --git a/plugins/obs-transitions/transition-luma-wipe.c b/plugins/obs-transitions/transition-luma-wipe.c index 885b919dc..4f9afaeb6 100644 --- a/plugins/obs-transitions/transition-luma-wipe.c +++ b/plugins/obs-transitions/transition-luma-wipe.c @@ -168,8 +168,8 @@ static void luma_wipe_callback(void *data, gs_texture_t *a, gs_texture_t *b, const bool previous = gs_framebuffer_srgb_enabled(); gs_enable_framebuffer_srgb(true); - gs_effect_set_texture(lwipe->ep_a_tex, a); - gs_effect_set_texture(lwipe->ep_b_tex, b); + gs_effect_set_texture_srgb(lwipe->ep_a_tex, a); + gs_effect_set_texture_srgb(lwipe->ep_b_tex, b); gs_effect_set_texture(lwipe->ep_l_tex, lwipe->luma_image.texture); gs_effect_set_float(lwipe->ep_progress, t); @@ -210,6 +210,14 @@ bool luma_wipe_audio_render(void *data, uint64_t *ts_out, channels, sample_rate, mix_a, mix_b); } +static enum gs_color_space +luma_wipe_video_get_color_space(void *data, size_t count, + const enum gs_color_space *preferred_spaces) +{ + struct luma_wipe_info *const lwipe = data; + return obs_transition_video_get_color_space(lwipe->source); +} + struct obs_source_info luma_wipe_transition = { .id = "wipe_transition", .type = OBS_SOURCE_TYPE_TRANSITION, @@ -221,4 +229,5 @@ struct obs_source_info luma_wipe_transition = { .audio_render = luma_wipe_audio_render, .get_properties = luma_wipe_properties, .get_defaults = luma_wipe_defaults, + .video_get_color_space = luma_wipe_video_get_color_space, }; diff --git a/plugins/obs-transitions/transition-slide.c b/plugins/obs-transitions/transition-slide.c index f4a72817d..d512df55e 100644 --- a/plugins/obs-transitions/transition-slide.c +++ b/plugins/obs-transitions/transition-slide.c @@ -96,8 +96,8 @@ static void slide_callback(void *data, gs_texture_t *a, gs_texture_t *b, const bool previous = gs_framebuffer_srgb_enabled(); gs_enable_framebuffer_srgb(true); - gs_effect_set_texture(slide->a_param, a); - gs_effect_set_texture(slide->b_param, b); + gs_effect_set_texture_srgb(slide->a_param, a); + gs_effect_set_texture_srgb(slide->b_param, b); gs_effect_set_vec2(slide->tex_a_dir_param, &tex_a_dir); gs_effect_set_vec2(slide->tex_b_dir_param, &tex_b_dir); @@ -157,6 +157,14 @@ static obs_properties_t *slide_properties(void *data) return ppts; } +static enum gs_color_space +slide_video_get_color_space(void *data, size_t count, + const enum gs_color_space *preferred_spaces) +{ + struct slide_info *const slide = data; + return obs_transition_video_get_color_space(slide->source); +} + struct obs_source_info slide_transition = { .id = "slide_transition", .type = OBS_SOURCE_TYPE_TRANSITION, @@ -167,4 +175,5 @@ struct obs_source_info slide_transition = { .video_render = slide_video_render, .audio_render = slide_audio_render, .get_properties = slide_properties, + .video_get_color_space = slide_video_get_color_space, }; diff --git a/plugins/obs-transitions/transition-swipe.c b/plugins/obs-transitions/transition-swipe.c index 87f8c1220..e029c189c 100644 --- a/plugins/obs-transitions/transition-swipe.c +++ b/plugins/obs-transitions/transition-swipe.c @@ -91,8 +91,8 @@ static void swipe_callback(void *data, gs_texture_t *a, gs_texture_t *b, const bool previous = gs_framebuffer_srgb_enabled(); gs_enable_framebuffer_srgb(true); - gs_effect_set_texture(swipe->a_param, swipe->swipe_in ? b : a); - gs_effect_set_texture(swipe->b_param, swipe->swipe_in ? a : b); + gs_effect_set_texture_srgb(swipe->a_param, swipe->swipe_in ? b : a); + gs_effect_set_texture_srgb(swipe->b_param, swipe->swipe_in ? a : b); gs_effect_set_vec2(swipe->swipe_param, &swipe_val); while (gs_effect_loop(swipe->effect, "Swipe")) @@ -153,6 +153,14 @@ static obs_properties_t *swipe_properties(void *data) return ppts; } +static enum gs_color_space +swipe_video_get_color_space(void *data, size_t count, + const enum gs_color_space *preferred_spaces) +{ + struct swipe_info *const swipe = data; + return obs_transition_video_get_color_space(swipe->source); +} + struct obs_source_info swipe_transition = { .id = "swipe_transition", .type = OBS_SOURCE_TYPE_TRANSITION, @@ -163,4 +171,5 @@ struct obs_source_info swipe_transition = { .video_render = swipe_video_render, .audio_render = swipe_audio_render, .get_properties = swipe_properties, + .video_get_color_space = swipe_video_get_color_space, };