diff --git a/docs/sphinx/reference-sources.rst b/docs/sphinx/reference-sources.rst index 75c918f11..34ae15fb4 100644 --- a/docs/sphinx/reference-sources.rst +++ b/docs/sphinx/reference-sources.rst @@ -410,6 +410,15 @@ Source Definition Structure (obs_source_info) :param event: Key event properties :param focus: Key event type (true if mouse-up) +.. member:: void (*obs_source_info.filter_add)(void *data, obs_source_t *source) + + Called when the filter is added to a source. + + (Optional) + + :param data: Filter data + :param source: Source that the filter is being added to + .. member:: void (*obs_source_info.filter_remove)(void *data, obs_source_t *source) Called when the filter is removed from a source. @@ -1547,7 +1556,7 @@ Filters reference. Only guaranteed to be valid inside of the video_render, filter_audio, - filter_video, and filter_remove callbacks. + filter_video, filter_add, and filter_remove callbacks. --------------------- diff --git a/libobs/obs-source.c b/libobs/obs-source.c index a54f09e32..6781f1537 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -3132,6 +3132,10 @@ void obs_source_filter_add(obs_source_t *source, obs_source_t *filter) blog(LOG_DEBUG, "- filter '%s' (%s) added to source '%s'", filter->context.name, filter->info.id, source->context.name); + + if (filter->info.filter_add) + filter->info.filter_add(filter->context.data, + filter->filter_parent); } static bool obs_source_filter_remove_refless(obs_source_t *source, diff --git a/libobs/obs-source.h b/libobs/obs-source.h index a2ee03c96..051586159 100644 --- a/libobs/obs-source.h +++ b/libobs/obs-source.h @@ -552,6 +552,14 @@ struct obs_source_info { enum gs_color_space (*video_get_color_space)( void *data, size_t count, const enum gs_color_space *preferred_spaces); + + /** + * Called when the filter is added to a source + * + * @param data Filter data + * @param source Source that the filter is being added to + */ + void (*filter_add)(void *data, obs_source_t *source); }; EXPORT void obs_register_source_s(const struct obs_source_info *info,