libobs: Add get_defaults2 and get_properties2 for encoders
Adds optional alternate functions to allow passing the encoder type_data to reduce code duplication. Closes obsproject/obs-studio#1541
This commit is contained in:
parent
62935bfef9
commit
93549ea17c
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user