diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index 83b2d7f8c..69ecc54e0 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -282,8 +282,11 @@ void obs_encoder_set_name(obs_encoder_t *encoder, const char *name) static inline obs_data_t *get_defaults(const struct obs_encoder_info *info) { obs_data_t *settings = obs_data_create(); - if (info->get_defaults) + if (info->get_defaults2) { + info->get_defaults2(settings, info->type_data); + } else if (info->get_defaults) { info->get_defaults(settings); + } return settings; } @@ -304,11 +307,16 @@ obs_data_t *obs_encoder_get_defaults(const obs_encoder_t *encoder) obs_properties_t *obs_get_encoder_properties(const char *id) { const struct obs_encoder_info *ei = find_encoder(id); - if (ei && ei->get_properties) { + if (ei && (ei->get_properties || ei->get_properties2)) { obs_data_t *defaults = get_defaults(ei); obs_properties_t *properties; - properties = ei->get_properties(NULL); + if (ei->get_properties2) { + properties = ei->get_properties2(NULL, ei->type_data); + } else if (ei->get_properties) { + properties = ei->get_properties(NULL); + } + obs_properties_apply_settings(properties, defaults); obs_data_release(defaults); return properties; @@ -321,12 +329,20 @@ obs_properties_t *obs_encoder_properties(const obs_encoder_t *encoder) if (!obs_encoder_valid(encoder, "obs_encoder_properties")) return NULL; - if (encoder->info.get_properties) { + if (encoder->info.get_properties2) { + obs_properties_t *props; + props = encoder->info.get_properties2(encoder->context.data, + encoder->info.type_data); + obs_properties_apply_settings(props, encoder->context.settings); + return props; + + } else if (encoder->info.get_properties) { obs_properties_t *props; props = encoder->info.get_properties(encoder->context.data); obs_properties_apply_settings(props, encoder->context.settings); return props; } + return NULL; } diff --git a/libobs/obs-encoder.h b/libobs/obs-encoder.h index 2220c5a54..7a591b4e8 100644 --- a/libobs/obs-encoder.h +++ b/libobs/obs-encoder.h @@ -234,6 +234,23 @@ struct obs_encoder_info { void (*free_type_data)(void *type_data); uint32_t caps; + + /** + * Gets the default settings for this encoder + * + * @param[out] settings Data to assign default settings to + * @param[in] typedata Type Data + */ + void (*get_defaults2)(obs_data_t *settings, void *type_data); + + /** + * Gets the property information of this encoder + * + * @param[in] data Pointer from create (or null) + * @param[in] typedata Type Data + * @return The properties data + */ + obs_properties_t *(*get_properties2)(void *data, void *type_data); }; EXPORT void obs_register_encoder_s(const struct obs_encoder_info *info,