Skip to content

Commit

Permalink
Fixes shape-scaling issue.
Browse files Browse the repository at this point in the history
  • Loading branch information
FiniteSingularity committed Jan 20, 2024
1 parent 84e9eb1 commit aadecbe
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 12 deletions.
67 changes: 64 additions & 3 deletions src/advanced-masks-filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
struct obs_source_info advanced_masks_filter = {
.id = "advanced_masks_filter",
.type = OBS_SOURCE_TYPE_FILTER,
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_SRGB,
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_SRGB |
OBS_SOURCE_CAP_OBSOLETE,
.get_name = advanced_masks_name,
.create = advanced_masks_create,
.destroy = advanced_masks_destroy,
Expand All @@ -16,6 +17,22 @@ struct obs_source_info advanced_masks_filter = {
.get_properties = advanced_masks_properties,
.get_defaults = advanced_masks_defaults};

struct obs_source_info advanced_masks_filter_v2 = {
.id = "advanced_masks_filter",
.version = 2,
.type = OBS_SOURCE_TYPE_FILTER,
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_SRGB,
.get_name = advanced_masks_name,
.create = advanced_masks_create,
.destroy = advanced_masks_destroy,
.update = advanced_masks_update_v2,
.video_render = advanced_masks_video_render,
.video_tick = advanced_masks_video_tick,
.get_width = advanced_masks_width,
.get_height = advanced_masks_height,
.get_properties = advanced_masks_properties,
.get_defaults = advanced_masks_defaults_v2};

static const char *advanced_masks_name(void *unused)
{
UNUSED_PARAMETER(unused);
Expand Down Expand Up @@ -113,7 +130,40 @@ static void advanced_masks_update(void *data, obs_data_t *settings)

color_adjustments_update(filter->color_adj_data, settings);

mask_shape_update(filter->shape_data, filter->base, settings);
mask_shape_update(filter->shape_data, filter->base, settings, 1);
mask_source_update(filter->source_data, settings);
mask_gradient_update(filter->gradient_data, settings);
}

static void advanced_masks_update_v2(void *data, obs_data_t *settings)
{
// Called after UI is updated, should assign new UI values to
// data structure pointers/values/etc..
advanced_masks_data_t *filter = data;
if (filter->base->width > 0 &&
(float)obs_data_get_double(settings, "shape_center_x") < -1.e8) {
double width = (double)obs_source_get_width(filter->context);
double height = (double)obs_source_get_height(filter->context);
obs_data_set_double(settings, "shape_center_x", width / 2.0);
obs_data_set_double(settings, "position_x", width / 2.0);
obs_data_set_double(settings, "shape_center_y", height / 2.0);
obs_data_set_double(settings, "position_y", height / 2.0);
}
if (filter->base->width > 0 &&
(float)obs_data_get_double(settings, "mask_gradient_position") <
-1.e8) {
double width = (double)obs_source_get_width(filter->context);
obs_data_set_double(settings, "mask_gradient_position",
width / 2.0);
}
filter->base->mask_effect =
(uint32_t)obs_data_get_int(settings, "mask_effect");
filter->base->mask_type =
(uint32_t)obs_data_get_int(settings, "mask_type");

color_adjustments_update(filter->color_adj_data, settings);

mask_shape_update(filter->shape_data, filter->base, settings, 2);
mask_source_update(filter->source_data, settings);
mask_gradient_update(filter->gradient_data, settings);
}
Expand Down Expand Up @@ -350,7 +400,18 @@ static void advanced_masks_defaults(obs_data_t *settings)
obs_data_set_default_int(settings, "mask_type", MASK_TYPE_SHAPE);

color_adjustments_defaults(settings);
mask_shape_defaults(settings);
mask_shape_defaults(settings, 1);
mask_gradient_defaults(settings);
mask_source_defaults(settings);
}

static void advanced_masks_defaults_v2(obs_data_t *settings)
{
obs_data_set_default_int(settings, "mask_effect", MASK_EFFECT_ALPHA);
obs_data_set_default_int(settings, "mask_type", MASK_TYPE_SHAPE);

color_adjustments_defaults(settings);
mask_shape_defaults(settings, 2);
mask_gradient_defaults(settings);
mask_source_defaults(settings);
}
Expand Down
2 changes: 2 additions & 0 deletions src/advanced-masks-filter.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ static void advanced_masks_destroy(void *data);
static uint32_t advanced_masks_width(void *data);
static uint32_t advanced_masks_height(void *data);
static void advanced_masks_update(void *data, obs_data_t *settings);
static void advanced_masks_update_v2(void *data, obs_data_t *settings);
static void advanced_masks_video_render(void *data, gs_effect_t *effect);
static obs_properties_t *advanced_masks_properties(void *data);
static void advanced_masks_video_tick(void *data, float seconds);
static void advanced_masks_defaults(obs_data_t *settings);
static void advanced_masks_defaults_v2(obs_data_t *settings);
static void get_input_source(advanced_masks_data_t *filter);
static void draw_output(advanced_masks_data_t *filter);
static void advanced_masks_render_filter(advanced_masks_data_t *filter);
Expand Down
27 changes: 20 additions & 7 deletions src/mask-shape.c
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ static float mask_height(obs_data_t *settings)
}

void mask_shape_update(mask_shape_data_t *data, base_filter_data_t *base,
obs_data_t *settings)
obs_data_t *settings, int version)
{
data->mask_shape_type =
(uint32_t)obs_data_get_int(settings, "shape_type");
Expand All @@ -240,10 +240,20 @@ void mask_shape_update(mask_shape_data_t *data, base_filter_data_t *base,
(float)obs_data_get_double(settings, "position_x");
data->global_position.y =
(float)obs_data_get_double(settings, "position_y");
data->global_scale =
base->mask_effect == MASK_EFFECT_ALPHA
? (float)obs_data_get_double(settings, "position_scale")
: 100.0f;
if (version == 1) {
data->global_scale =
base->mask_effect == MASK_EFFECT_ALPHA
? (float)obs_data_get_double(settings,
"position_scale")
: 100.0f;
} else {
data->global_scale =
base->mask_effect == MASK_EFFECT_ALPHA && data->shape_relative
? (float)obs_data_get_double(settings,
"position_scale")
: 100.0f;
}

data->zoom =
base->mask_effect == MASK_EFFECT_ALPHA
? (float)obs_data_get_double(settings, "source_zoom")
Expand Down Expand Up @@ -379,8 +389,11 @@ void mask_shape_update(mask_shape_data_t *data, base_filter_data_t *base,
(data->feather_shift + data->star_corner_radius);
}

void mask_shape_defaults(obs_data_t *settings)
void mask_shape_defaults(obs_data_t *settings, int version)
{
// Version specific settings
double position_scale = (version == 1 ? 120.0 : 100.0);

obs_data_set_default_int(settings, "shape_type", SHAPE_RECTANGLE);
obs_data_set_default_bool(settings, "shape_frame_check", false);
obs_data_set_default_double(settings, "shape_center_x", -1.e9);
Expand All @@ -390,7 +403,7 @@ void mask_shape_defaults(obs_data_t *settings)
obs_data_set_default_double(settings, "rectangle_height", 600.0);
obs_data_set_default_double(settings, "position_x", -1.e9);
obs_data_set_default_double(settings, "position_y", -1.e9);
obs_data_set_default_double(settings, "position_scale", 120.0);
obs_data_set_default_double(settings, "position_scale", position_scale);
obs_data_set_default_double(settings, "mask_source_filter_multiplier", 1.0);
obs_data_set_default_double(settings, "source_zoom", 100.0);
obs_data_set_default_bool(settings, "shape_relative", false);
Expand Down
4 changes: 2 additions & 2 deletions src/mask-shape.h
Original file line number Diff line number Diff line change
Expand Up @@ -233,8 +233,8 @@ struct mask_shape_data {
extern mask_shape_data_t *mask_shape_create();
extern void mask_shape_destroy(mask_shape_data_t *data);
extern void mask_shape_update(mask_shape_data_t *data, base_filter_data_t *base,
obs_data_t *settings);
extern void mask_shape_defaults(obs_data_t *settings);
obs_data_t *settings, int version);
extern void mask_shape_defaults(obs_data_t *settings, int version);
extern void shape_mask_top_properties(obs_properties_t *props);
extern void shape_mask_bot_properties(obs_properties_t *props,
obs_source_t *context,
Expand Down
2 changes: 2 additions & 0 deletions src/obs-advanced-masks-plugin.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "version.h"

extern struct obs_source_info advanced_masks_filter;
extern struct obs_source_info advanced_masks_filter_v2;

OBS_DECLARE_MODULE();

Expand All @@ -14,6 +15,7 @@ bool obs_module_load(void)
{
blog(LOG_INFO, "[Advanced Masks] loaded version %s", PROJECT_VERSION);
obs_register_source(&advanced_masks_filter);
obs_register_source(&advanced_masks_filter_v2);
return true;
}

Expand Down

0 comments on commit aadecbe

Please sign in to comment.