From 5920778572ff310dfe09c5b595970d553de2f82b Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sun, 10 Apr 2016 22:49:53 -0700 Subject: [PATCH] libobs: Add ability to create private services This is a band-aid solution to be able to create temporary services without logging them and keep them out of enumeration functions. This is a band-aid solution -- 'master obs context lists' should not be kept by the core. Logging of object creation/destruction should also be controlled by the front-end instead of the core. --- libobs/obs-service.c | 26 +++++++++++++++++++++----- libobs/obs.h | 3 +++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/libobs/obs-service.c b/libobs/obs-service.c index 90bbcfedc..b8ae719f7 100644 --- a/libobs/obs-service.c +++ b/libobs/obs-service.c @@ -33,8 +33,9 @@ const char *obs_service_get_display_name(const char *id) return (info != NULL) ? info->get_name(info->type_data) : NULL; } -obs_service_t *obs_service_create(const char *id, const char *name, - obs_data_t *settings, obs_data_t *hotkey_data) +static obs_service_t *obs_service_create_internal(const char *id, + const char *name, obs_data_t *settings, obs_data_t *hotkey_data, + bool private) { const struct obs_service_info *info = find_service(id); struct obs_service *service; @@ -47,7 +48,7 @@ obs_service_t *obs_service_create(const char *id, const char *name, service = bzalloc(sizeof(struct obs_service)); if (!obs_context_data_init(&service->context, OBS_OBJ_TYPE_SERVICE, - settings, name, hotkey_data, false)) { + settings, name, hotkey_data, private)) { bfree(service); return NULL; } @@ -74,10 +75,24 @@ obs_service_t *obs_service_create(const char *id, const char *name, &obs->data.services_mutex, &obs->data.first_service); - blog(LOG_INFO, "service '%s' (%s) created", name, id); + blog(private ? LOG_DEBUG : LOG_INFO, "service '%s' (%s) created", + name, id); return service; } +obs_service_t *obs_service_create(const char *id, + const char *name, obs_data_t *settings, obs_data_t *hotkey_data) +{ + return obs_service_create_internal(id, name, settings, hotkey_data, + false); +} + +obs_service_t *obs_service_create_private(const char *id, + const char *name, obs_data_t *settings) +{ + return obs_service_create_internal(id, name, settings, NULL, true); +} + static void actually_destroy_service(struct obs_service *service) { if (service->context.data) @@ -86,7 +101,8 @@ static void actually_destroy_service(struct obs_service *service) if (service->output) service->output->service = NULL; - blog(LOG_INFO, "service '%s' destroyed", service->context.name); + blog(service->context.private ? LOG_DEBUG : LOG_INFO, + "service '%s' destroyed", service->context.name); obs_context_data_free(&service->context); if (service->owns_info_id) diff --git a/libobs/obs.h b/libobs/obs.h index bba2d793f..f0c842e1a 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -1648,6 +1648,9 @@ EXPORT const char *obs_service_get_display_name(const char *id); EXPORT obs_service_t *obs_service_create(const char *id, const char *name, obs_data_t *settings, obs_data_t *hotkey_data); +EXPORT obs_service_t *obs_service_create_private(const char *id, + const char *name, obs_data_t *settings); + /** * Adds/releases a reference to a service. When the last reference is * released, the service is destroyed.