obs-filters: Add color settings to correction v2

Restore color tint/overlay functionality, but with separate controls for
tinting (multiply) and overlay (add).
This commit is contained in:
jpark37 2021-04-06 21:35:48 -07:00 committed by Jim
parent 66d79a926a
commit 54656af340
2 changed files with 43 additions and 0 deletions

View File

@ -27,6 +27,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define SETTING_HUESHIFT "hue_shift"
#define SETTING_OPACITY "opacity"
#define SETTING_COLOR "color"
#define SETTING_COLOR_MULTIPLY "color_multiply"
#define SETTING_COLOR_ADD "color_add"
#define TEXT_GAMMA obs_module_text("Gamma")
#define TEXT_CONTRAST obs_module_text("Contrast")
@ -35,6 +37,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TEXT_HUESHIFT obs_module_text("HueShift")
#define TEXT_OPACITY obs_module_text("Opacity")
#define TEXT_COLOR obs_module_text("Color")
#define TEXT_COLOR_MULTIPLY obs_module_text("ColorMultiply")
#define TEXT_COLOR_ADD obs_module_text("ColorAdd")
/* clang-format on */
@ -74,6 +78,7 @@ struct color_correction_filter_data_v2 {
struct matrix4 bright_matrix;
struct matrix4 sat_matrix;
struct matrix4 hue_op_matrix;
struct matrix4 color_matrix;
struct matrix4 final_matrix;
struct vec3 half_unit;
@ -368,6 +373,32 @@ static void color_correction_filter_update_v2(void *data, obs_data_t *settings)
0.0f,
opacity};
/* Now get the overlay color multiply data. */
uint32_t color_multiply =
(uint32_t)obs_data_get_int(settings, SETTING_COLOR_MULTIPLY);
struct vec4 color_multiply_v4;
vec4_from_rgba_srgb(&color_multiply_v4, color_multiply);
/* Now get the overlay color add data. */
uint32_t color_add =
(uint32_t)obs_data_get_int(settings, SETTING_COLOR_ADD);
struct vec4 color_add_v4;
vec4_from_rgba_srgb(&color_add_v4, color_add);
/*
* Now let's build our Color 'overlay' matrix.
* Earlier (in the function color_correction_filter_create) we set
* this matrix to the identity matrix, so now we only need
* to set the 6 variables that have changed.
*/
filter->color_matrix.x.x = color_multiply_v4.x;
filter->color_matrix.y.y = color_multiply_v4.y;
filter->color_matrix.z.z = color_multiply_v4.z;
filter->color_matrix.t.x = color_add_v4.x;
filter->color_matrix.t.y = color_add_v4.y;
filter->color_matrix.t.z = color_add_v4.z;
/* First we apply the Contrast & Brightness matrix. */
matrix4_mul(&filter->final_matrix, &filter->con_matrix,
&filter->bright_matrix);
@ -377,6 +408,9 @@ static void color_correction_filter_update_v2(void *data, obs_data_t *settings)
/* Next we apply the Hue+Opacity matrix. */
matrix4_mul(&filter->final_matrix, &filter->final_matrix,
&filter->hue_op_matrix);
/* Lastly we apply the Color Wash matrix. */
matrix4_mul(&filter->final_matrix, &filter->final_matrix,
&filter->color_matrix);
}
/*
@ -501,6 +535,7 @@ static void *color_correction_filter_create_v2(obs_data_t *settings,
/* Set/clear/assign for all necessary vectors. */
vec3_set(&filter->half_unit, 0.5f, 0.5f, 0.5f);
matrix4_identity(&filter->bright_matrix);
matrix4_identity(&filter->color_matrix);
/* Here we enter the GPU drawing/shader portion of our code. */
obs_enter_graphics();
@ -625,6 +660,10 @@ static obs_properties_t *color_correction_filter_properties_v2(void *data)
obs_properties_add_int_slider(props, SETTING_OPACITY, TEXT_OPACITY, 0,
100, 1);
obs_properties_add_color(props, SETTING_COLOR_MULTIPLY,
TEXT_COLOR_MULTIPLY);
obs_properties_add_color(props, SETTING_COLOR_ADD, TEXT_COLOR_ADD);
UNUSED_PARAMETER(data);
return props;
}
@ -655,6 +694,8 @@ static void color_correction_filter_defaults_v2(obs_data_t *settings)
obs_data_set_default_double(settings, SETTING_SATURATION, 0.0);
obs_data_set_default_double(settings, SETTING_HUESHIFT, 0.0);
obs_data_set_default_int(settings, SETTING_OPACITY, 100);
obs_data_set_default_int(settings, SETTING_COLOR_MULTIPLY, 0x00FFFFFF);
obs_data_set_default_int(settings, SETTING_COLOR_ADD, 0x00000000);
}
/*

View File

@ -24,6 +24,8 @@ MaskBlendType.BlendAddition="Blend (Addition)"
MaskBlendType.BlendSubtraction="Blend (Subtraction)"
Path="Path"
Color="Color"
ColorMultiply="Color Multiply"
ColorAdd="Color Add"
Opacity="Opacity"
Contrast="Contrast"
Brightness="Brightness"