diff --git a/deps/obs-scripting/obs-scripting-lua.c b/deps/obs-scripting/obs-scripting-lua.c index 49cc409d8..5743e0f94 100644 --- a/deps/obs-scripting/obs-scripting-lua.c +++ b/deps/obs-scripting/obs-scripting-lua.c @@ -579,6 +579,32 @@ static int enum_sources(lua_State *script) return 1; } +/* -------------------------------------------- */ + +static bool source_enum_filters_proc(obs_source_t *source, obs_source_t *filter, void *param) +{ + lua_State *script = param; + + obs_source_get_ref(filter); + ls_push_libobs_obj(obs_source_t, filter, false); + + size_t idx = lua_rawlen(script, -2); + lua_rawseti(script, -2, (int)idx + 1); + return true; +} + +static int source_enum_filters(lua_State *script) +{ + obs_source_t *source; + if (!ls_get_libobs_obj(obs_source_t, 1, &source)) + return 0; + + lua_newtable(script); + obs_source_enum_filters(source, source_enum_filters_proc, script); + return 1; +} + + /* -------------------------------------------- */ static bool enum_items_proc(obs_scene_t *scene, obs_sceneitem_t *item, @@ -972,6 +998,7 @@ static void add_hook_functions(lua_State *script) add_func("timer_remove", timer_remove); add_func("timer_add", timer_add); add_func("obs_enum_sources", enum_sources); + add_func("obs_source_enum_filters", source_enum_filters); add_func("obs_scene_enum_items", scene_enum_items); add_func("source_list_release", source_list_release); add_func("sceneitem_list_release", sceneitem_list_release); diff --git a/deps/obs-scripting/obslua/obslua.i b/deps/obs-scripting/obslua/obslua.i index b71f2acb4..98058b8a3 100644 --- a/deps/obs-scripting/obslua/obslua.i +++ b/deps/obs-scripting/obslua/obslua.i @@ -59,6 +59,7 @@ static inline void wrap_blog(int log_level, const char *message) %ignore obs_add_main_render_callback; %ignore obs_remove_main_render_callback; %ignore obs_enum_sources; +%ignore obs_source_enum_filters; %ignore obs_properties_add_button; %ignore obs_property_set_modified_callback; %ignore signal_handler_connect;