libobs: Allow filter processing function to return false

(Note: this commit also modifies the obs-filters and test-input modules)

Changes the obs_source_process_filter_begin return type so that it
returns true/false to indicate that filter processing should or should
not continue (for example if the filter is bypassed or if there's some
other sort of issue that causes the filtering to fail)
This commit is contained in:
jp9000
2016-04-22 10:15:50 -07:00
parent 15bec2a4d2
commit ff99ba7818
10 changed files with 36 additions and 25 deletions

View File

@@ -194,8 +194,9 @@ static void chroma_key_render(void *data, gs_effect_t *effect)
uint32_t height = obs_source_get_base_height(target);
struct vec2 pixel_size;
obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING);
if (!obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING))
return;
vec2_set(&pixel_size, 1.0f / (float)width, 1.0f / (float)height);

View File

@@ -119,8 +119,9 @@ static void color_filter_render(void *data, gs_effect_t *effect)
{
struct color_filter_data *filter = data;
obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING);
if (!obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING))
return;
gs_effect_set_vec4(filter->color_param, &filter->color);
gs_effect_set_float(filter->contrast_param, filter->contrast);

View File

@@ -166,8 +166,9 @@ static void color_key_render(void *data, gs_effect_t *effect)
{
struct color_key_filter_data *filter = data;
obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING);
if (!obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING))
return;
gs_effect_set_vec4(filter->color_param, &filter->color);
gs_effect_set_float(filter->contrast_param, filter->contrast);

View File

@@ -193,8 +193,9 @@ static void crop_filter_render(void *data, gs_effect_t *effect)
{
struct crop_filter_data *filter = data;
obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_NO_DIRECT_RENDERING);
if (!obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_NO_DIRECT_RENDERING))
return;
gs_effect_set_vec2(filter->param_mul, &filter->mul_val);
gs_effect_set_vec2(filter->param_add, &filter->add_val);

View File

@@ -210,8 +210,9 @@ static void mask_filter_render(void *data, gs_effect_t *effect)
vec2_div(&add_val, &add_val, &mask_size);
}
obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING);
if (!obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING))
return;
param = gs_effect_get_param_by_name(filter->effect, "target");
gs_effect_set_texture(param, filter->target);

View File

@@ -178,8 +178,9 @@ static void scroll_filter_render(void *data, gs_effect_t *effect)
(float)cx / (float)base_cx,
(float)cy / (float)base_cy);
obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_NO_DIRECT_RENDERING);
if (!obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_NO_DIRECT_RENDERING))
return;
gs_effect_set_vec2(filter->param_add, &filter->offset);
gs_effect_set_vec2(filter->param_mul, &mul_val);

View File

@@ -77,11 +77,10 @@ static void *sharpness_create(obs_data_t *settings, obs_source_t *context)
static void sharpness_render(void *data, gs_effect_t *effect)
{
struct sharpness_data *filter = data;
if (!filter) return;
if (!obs_filter_get_target(filter->context)) return;
obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING);
if (!obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING))
return;
filter->texwidth =(float)obs_source_get_width(
obs_filter_get_target(filter->context));