fix a few bugs with callback system, add some test signals
This commit is contained in:
parent
6fcd5ce112
commit
261b9d7056
@ -20,6 +20,10 @@
|
||||
|
||||
#include "calldata.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Dynamic procedure handler
|
||||
*
|
||||
@ -43,3 +47,7 @@ EXPORT void proc_handler_add(proc_handler_t handler, const char *name,
|
||||
*/
|
||||
EXPORT bool proc_handler_call(proc_handler_t handler, const char *name,
|
||||
calldata_t params);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -39,7 +39,7 @@ static inline struct signal_info *signal_info_create(const char *name)
|
||||
si->next = NULL;
|
||||
da_init(si->callbacks);
|
||||
|
||||
if (!pthread_mutex_init(&si->mutex, NULL) != 0) {
|
||||
if (pthread_mutex_init(&si->mutex, NULL) != 0) {
|
||||
blog(LOG_ERROR, "Could not create signal!");
|
||||
bfree(si->name);
|
||||
bfree(si);
|
||||
@ -179,6 +179,9 @@ void signal_handler_disconnect(signal_handler_t handler, const char *signal,
|
||||
struct signal_info *sig = getsignal_locked(handler, signal);
|
||||
size_t idx;
|
||||
|
||||
if (!sig)
|
||||
return;
|
||||
|
||||
pthread_mutex_lock(&sig->mutex);
|
||||
|
||||
idx = signal_get_callback_idx(sig, callback, data);
|
||||
@ -193,6 +196,9 @@ void signal_handler_signal(signal_handler_t handler, const char *signal,
|
||||
{
|
||||
struct signal_info *sig = getsignal_locked(handler, signal);
|
||||
|
||||
if (!sig)
|
||||
return;
|
||||
|
||||
pthread_mutex_lock(&sig->mutex);
|
||||
|
||||
for (size_t i = 0; i < sig->callbacks.num; i++) {
|
||||
|
@ -20,6 +20,10 @@
|
||||
|
||||
#include "calldata.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Signal handler
|
||||
*
|
||||
@ -30,13 +34,18 @@
|
||||
struct signal_handler;
|
||||
typedef struct signal_handler *signal_handler_t;
|
||||
|
||||
signal_handler_t signal_handler_create(void);
|
||||
void signal_handler_destroy(signal_handler_t handler);
|
||||
EXPORT signal_handler_t signal_handler_create(void);
|
||||
EXPORT void signal_handler_destroy(signal_handler_t handler);
|
||||
|
||||
void signal_handler_connect(signal_handler_t handler, const char *signal,
|
||||
void (*callback)(calldata_t, void*), void *data);
|
||||
void signal_handler_disconnect(signal_handler_t handler, const char *signal,
|
||||
EXPORT void signal_handler_connect(signal_handler_t handler, const char *signal,
|
||||
void (*callback)(calldata_t, void*), void *data);
|
||||
EXPORT void signal_handler_disconnect(signal_handler_t handler,
|
||||
const char *signal, void (*callback)(calldata_t, void*),
|
||||
void *data);
|
||||
|
||||
void signal_handler_signal(signal_handler_t handler, const char *signal,
|
||||
EXPORT void signal_handler_signal(signal_handler_t handler, const char *signal,
|
||||
calldata_t params);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -127,6 +127,17 @@ bool obs_source_init(struct obs_source *source, const char *settings,
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline void obs_source_dosignal(struct obs_source *source,
|
||||
const char *signal)
|
||||
{
|
||||
struct calldata data;
|
||||
|
||||
calldata_init(&data);
|
||||
calldata_setptr(&data, "source", source);
|
||||
signal_handler_signal(obs->signals, signal, &data);
|
||||
calldata_free(&data);
|
||||
}
|
||||
|
||||
obs_source_t obs_source_create(enum obs_source_type type, const char *id,
|
||||
const char *name, const char *settings)
|
||||
{
|
||||
@ -165,6 +176,7 @@ obs_source_t obs_source_create(enum obs_source_type type, const char *id,
|
||||
if (!obs_source_init(source, settings, info))
|
||||
goto fail;
|
||||
|
||||
obs_source_create_dosignal(source, "source-create");
|
||||
return source;
|
||||
|
||||
fail:
|
||||
@ -177,6 +189,8 @@ static void obs_source_destroy(obs_source_t source)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
obs_source_dosignal(source, "source-destroy");
|
||||
|
||||
if (source->filter_parent)
|
||||
obs_source_filter_remove(source->filter_parent, source);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user