From d069302b2e5bcb43688b84214db51e8098839b6f Mon Sep 17 00:00:00 2001 From: jp9000 Date: Fri, 26 Feb 2016 18:18:00 -0800 Subject: [PATCH] libobs: Add function to get obs object type --- libobs/obs-encoder.c | 4 ++-- libobs/obs-internal.h | 2 ++ libobs/obs-output.c | 4 ++-- libobs/obs-service.c | 4 ++-- libobs/obs-source.c | 4 ++-- libobs/obs.c | 13 +++++++++++-- libobs/obs.h | 10 ++++++++++ 7 files changed, 31 insertions(+), 10 deletions(-) diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index c13c1b710..cae242e7e 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -54,8 +54,8 @@ static bool init_encoder(struct obs_encoder *encoder, const char *name, return false; if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0) return false; - if (!obs_context_data_init(&encoder->context, settings, name, - hotkey_data, false)) + if (!obs_context_data_init(&encoder->context, OBS_OBJ_TYPE_ENCODER, + settings, name, hotkey_data, false)) return false; if (pthread_mutex_init(&encoder->init_mutex, &attr) != 0) return false; diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 0f40f6ac5..40e3403a3 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -385,6 +385,7 @@ struct obs_context_data { obs_data_t *settings; signal_handler_t *signals; proc_handler_t *procs; + enum obs_obj_type type; DARRAY(obs_hotkey_id) hotkeys; DARRAY(obs_hotkey_pair_id) hotkey_pairs; @@ -402,6 +403,7 @@ struct obs_context_data { extern bool obs_context_data_init( struct obs_context_data *context, + enum obs_obj_type type, obs_data_t *settings, const char *name, obs_data_t *hotkey_data, diff --git a/libobs/obs-output.c b/libobs/obs-output.c index f7a67afdc..fcff0fd2c 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -53,8 +53,8 @@ static const char *output_signals[] = { static bool init_output_handlers(struct obs_output *output, const char *name, obs_data_t *settings, obs_data_t *hotkey_data) { - if (!obs_context_data_init(&output->context, settings, name, - hotkey_data, false)) + if (!obs_context_data_init(&output->context, OBS_OBJ_TYPE_OUTPUT, + settings, name, hotkey_data, false)) return false; signal_handler_add_array(output->context.signals, output_signals); diff --git a/libobs/obs-service.c b/libobs/obs-service.c index 3fc851e78..90bbcfedc 100644 --- a/libobs/obs-service.c +++ b/libobs/obs-service.c @@ -46,8 +46,8 @@ 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, settings, name, - hotkey_data, false)) { + if (!obs_context_data_init(&service->context, OBS_OBJ_TYPE_SERVICE, + settings, name, hotkey_data, false)) { bfree(service); return NULL; } diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 2ed3e66ca..4cc306cf9 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -79,8 +79,8 @@ bool obs_source_init_context(struct obs_source *source, 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, private)) + if (!obs_context_data_init(&source->context, OBS_OBJ_TYPE_SOURCE, + settings, name, hotkey_data, private)) return false; return signal_handler_add_array(source->context.signals, diff --git a/libobs/obs.c b/libobs/obs.c index 94163560e..f752b6880 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -1650,6 +1650,7 @@ static inline char *dup_name(const char *name, bool private) static inline bool obs_context_data_init_wrap( struct obs_context_data *context, + enum obs_obj_type type, obs_data_t *settings, const char *name, obs_data_t *hotkey_data, @@ -1658,6 +1659,7 @@ static inline bool obs_context_data_init_wrap( assert(context); memset(context, 0, sizeof(*context)); context->private = private; + context->type = type; pthread_mutex_init_value(&context->rename_cache_mutex); if (pthread_mutex_init(&context->rename_cache_mutex, NULL) < 0) @@ -1679,13 +1681,14 @@ static inline bool obs_context_data_init_wrap( bool obs_context_data_init( struct obs_context_data *context, + enum obs_obj_type type, obs_data_t *settings, const char *name, obs_data_t *hotkey_data, bool private) { - if (obs_context_data_init_wrap(context, settings, name, hotkey_data, - private)) { + if (obs_context_data_init_wrap(context, type, settings, name, + hotkey_data, private)) { return true; } else { obs_context_data_free(context); @@ -1768,3 +1771,9 @@ uint64_t obs_get_video_frame_time(void) { return obs ? obs->video.video_time : 0; } + +enum obs_obj_type obs_obj_get_type(void *obj) +{ + struct obs_context_data *context = obj; + return context ? context->type : OBS_OBJ_TYPE_INVALID; +} diff --git a/libobs/obs.h b/libobs/obs.h index f22a14637..adc27a667 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -560,6 +560,16 @@ typedef bool (*obs_save_source_filter_cb)(void *data, obs_source_t *source); EXPORT obs_data_array_t *obs_save_sources_filtered(obs_save_source_filter_cb cb, void *data); +enum obs_obj_type { + OBS_OBJ_TYPE_INVALID, + OBS_OBJ_TYPE_SOURCE, + OBS_OBJ_TYPE_OUTPUT, + OBS_OBJ_TYPE_ENCODER, + OBS_OBJ_TYPE_SERVICE +}; + +EXPORT enum obs_obj_type obs_obj_get_type(void *obj); + /* ------------------------------------------------------------------------- */ /* View context */