From 3371ff59c97cabd9f3a2b568f0b7a5328dc958b2 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sat, 9 Jan 2016 13:27:16 -0800 Subject: [PATCH] libobs: Add *_create_private functions Allows creation of private/unlisted sources/outputs/services/encoders --- libobs/obs-internal.h | 4 ++-- libobs/obs-source.c | 45 +++++++++++++++++++++++++++++++++---------- libobs/obs.h | 2 ++ 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 544967b03..ef4b433b9 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -633,7 +633,7 @@ struct obs_source { extern const struct obs_source_info *get_source_info(const char *id); extern bool obs_source_init_context(struct obs_source *source, obs_data_t *settings, const char *name, - obs_data_t *hotkey_data); + obs_data_t *hotkey_data, bool private); extern void obs_source_save(obs_source_t *source); extern void obs_source_load(obs_source_t *source); @@ -660,7 +660,7 @@ static inline void obs_source_dosignal(struct obs_source *source, calldata_init(&data); calldata_set_ptr(&data, "source", source); - if (signal_obs) + if (signal_obs && !source->context.private) signal_handler_signal(obs->signals, signal_obs, &data); if (signal_source) signal_handler_signal(source->context.signals, signal_source, diff --git a/libobs/obs-source.c b/libobs/obs-source.c index b748069df..8f846091b 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -76,10 +76,11 @@ static const char *source_signals[] = { }; bool obs_source_init_context(struct obs_source *source, - obs_data_t *settings, const char *name, obs_data_t *hotkey_data) + obs_data_t *settings, const char *name, obs_data_t *hotkey_data, + bool private) { if (!obs_context_data_init(&source->context, settings, name, - hotkey_data, false)) + hotkey_data, private)) return false; return signal_handler_add_array(source->context.signals, @@ -275,8 +276,9 @@ static void obs_source_init_audio_hotkeys(struct obs_source *source) obs_source_hotkey_push_to_talk, source); } -obs_source_t *obs_source_create(const char *id, const char *name, - obs_data_t *settings, obs_data_t *hotkey_data) +static obs_source_t *obs_source_create_internal(const char *id, + const char *name, obs_data_t *settings, + obs_data_t *hotkey_data, bool private) { struct obs_source *source = bzalloc(sizeof(struct obs_source)); @@ -294,7 +296,8 @@ obs_source_t *obs_source_create(const char *id, const char *name, source->push_to_mute_key = OBS_INVALID_HOTKEY_ID; source->push_to_talk_key = OBS_INVALID_HOTKEY_ID; - if (!obs_source_init_context(source, settings, name, hotkey_data)) + if (!obs_source_init_context(source, settings, name, hotkey_data, + private)) goto fail; if (info && info->get_defaults) @@ -303,7 +306,8 @@ obs_source_t *obs_source_create(const char *id, const char *name, if (!obs_source_init(source)) goto fail; - obs_source_init_audio_hotkeys(source); + if (!private) + obs_source_init_audio_hotkeys(source); /* allow the source to be created even if creation fails so that the * user's data doesn't become lost */ @@ -313,7 +317,8 @@ obs_source_t *obs_source_create(const char *id, const char *name, if (!source->context.data) blog(LOG_ERROR, "Failed to create source '%s'!", name); - blog(LOG_INFO, "source '%s' (%s) created", name, id); + blog(private ? LOG_DEBUG : LOG_INFO, "%ssource '%s' (%s) created", + private ? "private " : "", name, id); obs_source_dosignal(source, "source_create", NULL); source->flags = source->default_flags; @@ -326,6 +331,19 @@ fail: return NULL; } +obs_source_t *obs_source_create(const char *id, const char *name, + obs_data_t *settings, obs_data_t *hotkey_data) +{ + return obs_source_create_internal(id, name, settings, hotkey_data, + false); +} + +obs_source_t *obs_source_create_private(const char *id, const char *name, + obs_data_t *settings) +{ + return obs_source_create_internal(id, name, settings, NULL, true); +} + void obs_source_frame_init(struct obs_source_frame *frame, enum video_format format, uint32_t width, uint32_t height) { @@ -381,7 +399,10 @@ void obs_source_destroy(struct obs_source *source) obs_context_data_remove(&source->context); - blog(LOG_INFO, "source '%s' destroyed", source->context.name); + blog(source->context.private ? LOG_DEBUG : LOG_INFO, + "%ssource '%s' destroyed", + source->context.private ? "private " : "", + source->context.name); obs_source_dosignal(source, "source_destroy", "destroy"); @@ -2453,7 +2474,9 @@ void obs_source_set_name(obs_source_t *source, const char *name) calldata_set_ptr(&data, "source", source); calldata_set_string(&data, "new_name", source->context.name); calldata_set_string(&data, "prev_name", prev_name); - signal_handler_signal(obs->signals, "source_rename", &data); + if (!source->context.private) + signal_handler_signal(obs->signals, "source_rename", + &data); signal_handler_signal(source->context.signals, "rename", &data); calldata_free(&data); bfree(prev_name); @@ -2662,7 +2685,9 @@ void obs_source_set_volume(obs_source_t *source, float volume) calldata_set_float(&data, "volume", volume); signal_handler_signal(source->context.signals, "volume", &data); - signal_handler_signal(obs->signals, "source_volume", &data); + if (!source->context.private) + signal_handler_signal(obs->signals, "source_volume", + &data); volume = (float)calldata_float(&data, "volume"); calldata_free(&data); diff --git a/libobs/obs.h b/libobs/obs.h index 6714cc379..62d62324a 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -648,6 +648,8 @@ EXPORT const char *obs_source_get_display_name(const char *id); EXPORT obs_source_t *obs_source_create(const char *id, const char *name, obs_data_t *settings, obs_data_t *hotkey_data); +EXPORT obs_source_t *obs_source_create_private(const char *id, + const char *name, obs_data_t *settings); /** * Adds/releases a reference to a source. When the last reference is * released, the source is destroyed.