diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 337be6c76..7f174c76f 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -323,8 +323,13 @@ static obs_source_t *obs_source_create_internal(const char *id, private)) goto fail; - if (info && info->get_defaults) - info->get_defaults(source->context.settings); + if (info) { + if (info->get_defaults2) + info->get_defaults2(info->type_data, + source->context.settings); + else if (info->get_defaults) + info->get_defaults(source->context.settings); + } if (!obs_source_init(source)) goto fail; @@ -695,7 +700,9 @@ bool obs_source_removed(const obs_source_t *source) static inline obs_data_t *get_defaults(const struct obs_source_info *info) { obs_data_t *settings = obs_data_create(); - if (info->get_defaults) + if (info->get_defaults2) + info->get_defaults2(info->type_data, settings); + else if (info->get_defaults) info->get_defaults(settings); return settings; } diff --git a/libobs/obs-source.h b/libobs/obs-source.h index 200c039ca..c90fcce9c 100644 --- a/libobs/obs-source.h +++ b/libobs/obs-source.h @@ -201,6 +201,7 @@ struct obs_source_info { * Gets the default settings for this source * * @param[out] settings Data to assign default settings to + * @deprecated Use get_defaults2 if type_data is needed */ void (*get_defaults)(obs_data_t *settings); @@ -428,6 +429,14 @@ struct obs_source_info { void (*transition_start)(void *data); void (*transition_stop)(void *data); + + /** + * Gets the default settings for this source + * + * @param type_data The type_data variable of this structure + * @param[out] settings Data to assign default settings to + */ + void (*get_defaults2)(void *type_data, obs_data_t *settings); }; EXPORT void obs_register_source_s(const struct obs_source_info *info,