yolobs-studio/plugins/image-source/color-source.c

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

174 lines
4.6 KiB
C
Raw Normal View History

2017-04-19 19:54:15 +00:00
#include <obs-module.h>
struct color_source {
uint32_t color;
uint32_t width;
uint32_t height;
obs_source_t *src;
};
static const char *color_source_get_name(void *unused)
{
UNUSED_PARAMETER(unused);
return obs_module_text("ColorSource");
}
static void color_source_update(void *data, obs_data_t *settings)
{
struct color_source *context = data;
uint32_t color = (uint32_t)obs_data_get_int(settings, "color");
uint32_t width = (uint32_t)obs_data_get_int(settings, "width");
uint32_t height = (uint32_t)obs_data_get_int(settings, "height");
context->color = color;
context->width = width;
context->height = height;
}
static void *color_source_create(obs_data_t *settings, obs_source_t *source)
{
UNUSED_PARAMETER(source);
struct color_source *context = bzalloc(sizeof(struct color_source));
context->src = source;
color_source_update(context, settings);
return context;
}
static void color_source_destroy(void *data)
{
bfree(data);
}
static obs_properties_t *color_source_properties(void *unused)
{
UNUSED_PARAMETER(unused);
obs_properties_t *props = obs_properties_create();
obs_properties_add_color(props, "color",
2019-09-22 21:19:10 +00:00
obs_module_text("ColorSource.Color"));
2017-04-19 19:54:15 +00:00
obs_properties_add_int(props, "width",
2019-09-22 21:19:10 +00:00
obs_module_text("ColorSource.Width"), 0, 4096,
1);
2017-04-19 19:54:15 +00:00
obs_properties_add_int(props, "height",
2019-09-22 21:19:10 +00:00
obs_module_text("ColorSource.Height"), 0, 4096,
1);
2017-04-19 19:54:15 +00:00
return props;
}
static void color_source_render(void *data, gs_effect_t *effect)
{
UNUSED_PARAMETER(effect);
struct color_source *context = data;
2019-09-22 21:19:10 +00:00
gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
gs_eparam_t *color = gs_effect_get_param_by_name(solid, "color");
gs_technique_t *tech = gs_effect_get_technique(solid, "Solid");
2017-04-19 19:54:15 +00:00
struct vec4 colorVal;
vec4_from_rgba(&colorVal, context->color);
gs_effect_set_vec4(color, &colorVal);
gs_technique_begin(tech);
gs_technique_begin_pass(tech, 0);
gs_draw_sprite(0, 0, context->width, context->height);
gs_technique_end_pass(tech);
gs_technique_end(tech);
}
static uint32_t color_source_getwidth(void *data)
{
struct color_source *context = data;
return context->width;
}
static uint32_t color_source_getheight(void *data)
{
struct color_source *context = data;
return context->height;
}
2020-03-25 08:07:22 +00:00
static void color_source_defaults_v1(obs_data_t *settings)
2017-04-19 19:54:15 +00:00
{
obs_data_set_default_int(settings, "color", 0xFFFFFFFF);
2019-09-22 21:19:10 +00:00
obs_data_set_default_int(settings, "width", 400);
obs_data_set_default_int(settings, "height", 400);
2017-04-19 19:54:15 +00:00
}
2020-03-25 08:07:22 +00:00
static void color_source_defaults_v2(obs_data_t *settings)
{
obs_data_set_default_int(settings, "color", 0xFFFFFFFF);
obs_data_set_default_int(settings, "width", 1920);
obs_data_set_default_int(settings, "height", 1080);
}
2020-10-01 20:15:25 +00:00
static void color_source_defaults_v3(obs_data_t *settings)
{
obs_data_set_default_int(settings, "color", 0xFFD1D1D1);
obs_data_set_default_int(settings, "width", 1920);
obs_data_set_default_int(settings, "height", 1080);
}
2020-03-25 08:07:22 +00:00
struct obs_source_info color_source_info_v1 = {
.id = "color_source",
.type = OBS_SOURCE_TYPE_INPUT,
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW |
OBS_SOURCE_CAP_OBSOLETE,
.create = color_source_create,
.destroy = color_source_destroy,
.update = color_source_update,
.get_name = color_source_get_name,
.get_defaults = color_source_defaults_v1,
.get_width = color_source_getwidth,
.get_height = color_source_getheight,
.video_render = color_source_render,
.get_properties = color_source_properties,
.icon_type = OBS_ICON_TYPE_COLOR,
};
struct obs_source_info color_source_info_v2 = {
2019-09-22 21:19:10 +00:00
.id = "color_source",
2020-03-25 08:07:22 +00:00
.version = 2,
2019-09-22 21:19:10 +00:00
.type = OBS_SOURCE_TYPE_INPUT,
2020-10-01 20:15:25 +00:00
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW |
OBS_SOURCE_CAP_OBSOLETE,
2019-09-22 21:19:10 +00:00
.create = color_source_create,
.destroy = color_source_destroy,
.update = color_source_update,
.get_name = color_source_get_name,
2020-03-25 08:07:22 +00:00
.get_defaults = color_source_defaults_v2,
2019-09-22 21:19:10 +00:00
.get_width = color_source_getwidth,
.get_height = color_source_getheight,
.video_render = color_source_render,
.get_properties = color_source_properties,
2020-03-25 08:07:22 +00:00
.icon_type = OBS_ICON_TYPE_COLOR,
2017-04-19 19:54:15 +00:00
};
2020-10-01 20:15:25 +00:00
struct obs_source_info color_source_info_v3 = {
.id = "color_source",
.version = 3,
.type = OBS_SOURCE_TYPE_INPUT,
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW,
.create = color_source_create,
.destroy = color_source_destroy,
.update = color_source_update,
.get_name = color_source_get_name,
.get_defaults = color_source_defaults_v3,
.get_width = color_source_getwidth,
.get_height = color_source_getheight,
.video_render = color_source_render,
.get_properties = color_source_properties,
.icon_type = OBS_ICON_TYPE_COLOR,
};