New upstream version 24.0.1+dfsg1

This commit is contained in:
Sebastian Ramacher 2019-09-22 23:19:10 +02:00
parent b14f9eae6d
commit 5a730d6ec3
842 changed files with 42245 additions and 33385 deletions

View file

@ -23,7 +23,7 @@
/* ========================================================================= */
static inline const char *get_table_string_(lua_State *script, int idx,
const char *name, const char *func)
const char *name, const char *func)
{
const char *str = "";
@ -38,8 +38,8 @@ static inline const char *get_table_string_(lua_State *script, int idx,
return str;
}
static inline int get_table_int_(lua_State *script, int idx,
const char *name, const char *func)
static inline int get_table_int_(lua_State *script, int idx, const char *name,
const char *func)
{
int val = 0;
@ -54,7 +54,8 @@ static inline int get_table_int_(lua_State *script, int idx,
}
static inline void get_callback_from_table_(lua_State *script, int idx,
const char *name, int *p_reg_idx, const char *func)
const char *name, int *p_reg_idx,
const char *func)
{
*p_reg_idx = LUA_REFNIL;
@ -77,22 +78,14 @@ static inline void get_callback_from_table_(lua_State *script, int idx,
#define get_callback_from_table(script, idx, name, p_reg_idx) \
get_callback_from_table_(script, idx, name, p_reg_idx, __FUNCTION__)
bool ls_get_libobs_obj_(lua_State * script,
const char *type,
int lua_idx,
void * libobs_out,
const char *id,
const char *func,
int line)
bool ls_get_libobs_obj_(lua_State *script, const char *type, int lua_idx,
void *libobs_out, const char *id, const char *func,
int line)
{
swig_type_info *info = SWIG_TypeQuery(script, type);
if (info == NULL) {
warn("%s:%d: SWIG could not find type: %s%s%s",
func,
line,
id ? id : "",
id ? "::" : "",
type);
warn("%s:%d: SWIG could not find type: %s%s%s", func, line,
id ? id : "", id ? "::" : "", type);
return false;
}
@ -100,37 +93,25 @@ bool ls_get_libobs_obj_(lua_State * script,
if (!SWIG_IsOK(ret)) {
warn("%s:%d: SWIG failed to convert lua object to obs "
"object: %s%s%s",
func,
line,
id ? id : "",
id ? "::" : "",
type);
func, line, id ? id : "", id ? "::" : "", type);
return false;
}
return true;
}
#define ls_get_libobs_obj(type, lua_index, obs_obj) \
ls_get_libobs_obj_(ls->script, #type " *", lua_index, obs_obj, \
ls->id, __FUNCTION__, __LINE__)
#define ls_get_libobs_obj(type, lua_index, obs_obj) \
ls_get_libobs_obj_(ls->script, #type " *", lua_index, obs_obj, ls->id, \
__FUNCTION__, __LINE__)
bool ls_push_libobs_obj_(lua_State * script,
const char *type,
void * libobs_in,
bool ownership,
const char *id,
const char *func,
int line)
bool ls_push_libobs_obj_(lua_State *script, const char *type, void *libobs_in,
bool ownership, const char *id, const char *func,
int line)
{
swig_type_info *info = SWIG_TypeQuery(script, type);
if (info == NULL) {
warn("%s:%d: SWIG could not find type: %s%s%s",
func,
line,
id ? id : "",
id ? "::" : "",
type);
warn("%s:%d: SWIG could not find type: %s%s%s", func, line,
id ? id : "", id ? "::" : "", type);
return false;
}
@ -138,9 +119,9 @@ bool ls_push_libobs_obj_(lua_State * script,
return true;
}
#define ls_push_libobs_obj(type, obs_obj, ownership) \
#define ls_push_libobs_obj(type, obs_obj, ownership) \
ls_push_libobs_obj_(ls->script, #type " *", obs_obj, ownership, \
ls->id, __FUNCTION__, __LINE__)
ls->id, __FUNCTION__, __LINE__)
/* ========================================================================= */
@ -149,24 +130,24 @@ struct obs_lua_data;
struct obs_lua_source {
struct obs_lua_script *data;
lua_State * script;
lua_State *script;
const char *id;
const char *display_name;
int func_create;
int func_destroy;
int func_get_width;
int func_get_height;
int func_get_defaults;
int func_get_properties;
int func_update;
int func_activate;
int func_deactivate;
int func_show;
int func_hide;
int func_video_tick;
int func_video_render;
int func_save;
int func_load;
int func_create;
int func_destroy;
int func_get_width;
int func_get_height;
int func_get_defaults;
int func_get_properties;
int func_update;
int func_activate;
int func_deactivate;
int func_show;
int func_hide;
int func_video_tick;
int func_video_render;
int func_save;
int func_load;
pthread_mutex_t definition_mutex;
struct obs_lua_data *first_source;
@ -179,29 +160,27 @@ extern pthread_mutex_t lua_source_def_mutex;
struct obs_lua_source *first_source_def = NULL;
struct obs_lua_data {
obs_source_t * source;
obs_source_t *source;
struct obs_lua_source *ls;
int lua_data_ref;
int lua_data_ref;
struct obs_lua_data *next;
struct obs_lua_data **p_prev_next;
};
#define call_func(name, args, rets) \
call_func_(ls->script, ls->func_ ## name, args, rets, #name, \
ls->display_name)
#define have_func(name) \
(ls->func_ ## name != LUA_REFNIL)
#define call_func(name, args, rets) \
call_func_(ls->script, ls->func_##name, args, rets, #name, \
ls->display_name)
#define have_func(name) (ls->func_##name != LUA_REFNIL)
#define ls_push_data() \
lua_rawgeti(ls->script, LUA_REGISTRYINDEX, ld->lua_data_ref)
#define ls_pop(count) \
lua_pop(ls->script, count)
#define lock_script() \
struct obs_lua_script *__data = ls->data; \
#define ls_pop(count) lua_pop(ls->script, count)
#define lock_script() \
struct obs_lua_script *__data = ls->data; \
struct obs_lua_script *__prev_script = current_lua_script; \
current_lua_script = __data; \
current_lua_script = __data; \
pthread_mutex_lock(&__data->mutex);
#define unlock_script() \
#define unlock_script() \
pthread_mutex_unlock(&__data->mutex); \
current_lua_script = __prev_script;
@ -230,9 +209,9 @@ static void *obs_lua_source_create(obs_data_t *settings, obs_source_t *source)
int lua_data_ref = luaL_ref(ls->script, LUA_REGISTRYINDEX);
if (lua_data_ref != LUA_REFNIL) {
data = bmalloc(sizeof(*data));
data->source = source;
data->ls = ls;
data = bmalloc(sizeof(*data));
data->source = source;
data->ls = ls;
data->lua_data_ref = lua_data_ref;
}
@ -242,7 +221,8 @@ static void *obs_lua_source_create(obs_data_t *settings, obs_source_t *source)
struct obs_lua_data *next = ls->first_source;
data->next = next;
data->p_prev_next = &ls->first_source;
if (next) next->p_prev_next = &data->next;
if (next)
next->p_prev_next = &data->next;
ls->first_source = data;
}
@ -263,9 +243,9 @@ static void call_destroy(struct obs_lua_data *ld)
static void obs_lua_source_destroy(void *data)
{
struct obs_lua_data * ld = data;
struct obs_lua_data *ld = data;
struct obs_lua_source *ls = ld->ls;
struct obs_lua_data * next;
struct obs_lua_data *next;
pthread_mutex_lock(&ls->definition_mutex);
if (!ls->script)
@ -280,7 +260,8 @@ static void obs_lua_source_destroy(void *data)
fail:
next = ld->next;
*ld->p_prev_next = next;
if (next) next->p_prev_next = ld->p_prev_next;
if (next)
next->p_prev_next = ld->p_prev_next;
bfree(data);
pthread_mutex_unlock(&ls->definition_mutex);
@ -288,9 +269,9 @@ fail:
static uint32_t obs_lua_source_get_width(void *data)
{
struct obs_lua_data * ld = data;
struct obs_lua_source *ls = ld->ls;
uint32_t width = 0;
struct obs_lua_data *ld = data;
struct obs_lua_source *ls = ld->ls;
uint32_t width = 0;
pthread_mutex_lock(&ls->definition_mutex);
if (!ls->script)
@ -315,9 +296,9 @@ fail:
static uint32_t obs_lua_source_get_height(void *data)
{
struct obs_lua_data * ld = data;
struct obs_lua_source *ls = ld->ls;
uint32_t height = 0;
struct obs_lua_data *ld = data;
struct obs_lua_source *ls = ld->ls;
uint32_t height = 0;
pthread_mutex_lock(&ls->definition_mutex);
if (!ls->script)
@ -363,9 +344,9 @@ fail:
static obs_properties_t *obs_lua_source_get_properties(void *data)
{
struct obs_lua_data * ld = data;
struct obs_lua_source *ls = ld->ls;
obs_properties_t * props = NULL;
struct obs_lua_data *ld = data;
struct obs_lua_source *ls = ld->ls;
obs_properties_t *props = NULL;
pthread_mutex_lock(&ls->definition_mutex);
if (!ls->script)
@ -390,7 +371,7 @@ fail:
static void obs_lua_source_update(void *data, obs_data_t *settings)
{
struct obs_lua_data * ld = data;
struct obs_lua_data *ld = data;
struct obs_lua_source *ls = ld->ls;
pthread_mutex_lock(&ls->definition_mutex);
@ -411,17 +392,17 @@ fail:
pthread_mutex_unlock(&ls->definition_mutex);
}
#define DEFINE_VOID_DATA_CALLBACK(name) \
static void obs_lua_source_ ## name(void *data) \
{ \
struct obs_lua_data * ld = data; \
struct obs_lua_source *ls = ld->ls; \
if (!have_func(name)) \
return; \
lock_script(); \
ls_push_data(); \
call_func(name, 1, 0); \
unlock_script(); \
#define DEFINE_VOID_DATA_CALLBACK(name) \
static void obs_lua_source_##name(void *data) \
{ \
struct obs_lua_data *ld = data; \
struct obs_lua_source *ls = ld->ls; \
if (!have_func(name)) \
return; \
lock_script(); \
ls_push_data(); \
call_func(name, 1, 0); \
unlock_script(); \
}
DEFINE_VOID_DATA_CALLBACK(activate)
DEFINE_VOID_DATA_CALLBACK(deactivate)
@ -431,7 +412,7 @@ DEFINE_VOID_DATA_CALLBACK(hide)
static void obs_lua_source_video_tick(void *data, float seconds)
{
struct obs_lua_data * ld = data;
struct obs_lua_data *ld = data;
struct obs_lua_source *ls = ld->ls;
pthread_mutex_lock(&ls->definition_mutex);
@ -454,7 +435,7 @@ fail:
static void obs_lua_source_video_render(void *data, gs_effect_t *effect)
{
struct obs_lua_data * ld = data;
struct obs_lua_data *ld = data;
struct obs_lua_source *ls = ld->ls;
pthread_mutex_lock(&ls->definition_mutex);
@ -477,7 +458,7 @@ fail:
static void obs_lua_source_save(void *data, obs_data_t *settings)
{
struct obs_lua_data * ld = data;
struct obs_lua_data *ld = data;
struct obs_lua_source *ls = ld->ls;
pthread_mutex_lock(&ls->definition_mutex);
@ -500,7 +481,7 @@ fail:
static void obs_lua_source_load(void *data, obs_data_t *settings)
{
struct obs_lua_data * ld = data;
struct obs_lua_data *ld = data;
struct obs_lua_source *ls = ld->ls;
pthread_mutex_lock(&ls->definition_mutex);
@ -523,7 +504,7 @@ fail:
static void source_type_unload(struct obs_lua_source *ls)
{
#define unref(name) \
#define unref(name) \
luaL_unref(ls->script, LUA_REGISTRYINDEX, name); \
name = LUA_REFNIL
@ -614,9 +595,9 @@ static int obs_lua_register_source(lua_State *script)
v = existing ? existing : &ls;
v->script = script;
v->id = id;
v->id = id;
info.id = v->id;
info.id = v->id;
info.type = (enum obs_source_type)get_table_int(script, -1, "type");
info.output_flags = get_table_int(script, -1, "output_flags");
@ -628,16 +609,14 @@ static int obs_lua_register_source(lua_State *script)
lua_pop(script, 1);
}
if (!v->display_name ||
!*v->display_name ||
!*info.id ||
if (!v->display_name || !*v->display_name || !*info.id ||
!info.output_flags)
goto fail;
#define get_callback(val) \
do { \
get_callback_from_table(script, -1, #val, &v->func_ ## val); \
info.val = obs_lua_source_ ## val; \
#define get_callback(val) \
do { \
get_callback_from_table(script, -1, #val, &v->func_##val); \
info.val = obs_lua_source_##val; \
} while (false)
get_callback(create);
@ -657,16 +636,21 @@ static int obs_lua_register_source(lua_State *script)
#undef get_callback
get_callback_from_table(script, -1, "get_defaults",
&v->func_get_defaults);
&v->func_get_defaults);
if (!existing) {
ls.data = current_lua_script;
pthread_mutex_init(&ls.definition_mutex, NULL);
info.type_data = bmemdup(&ls, sizeof(ls));
pthread_mutexattr_t mutexattr;
pthread_mutexattr_init(&mutexattr);
pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&ls.definition_mutex, &mutexattr);
pthread_mutexattr_destroy(&mutexattr);
info.type_data = bmemdup(&ls, sizeof(ls));
info.free_type_data = obs_lua_source_free_type_data;
info.get_name = obs_lua_source_get_name;
info.get_defaults2 = obs_lua_source_get_defaults;
info.get_name = obs_lua_source_get_name;
info.get_defaults2 = obs_lua_source_get_defaults;
obs_register_source(&info);
pthread_mutex_lock(&lua_source_def_mutex);
@ -674,7 +658,8 @@ static int obs_lua_register_source(lua_State *script)
struct obs_lua_source *next = first_source_def;
v->next = next;
if (next) next->p_prev_next = &v->next;
if (next)
next->p_prev_next = &v->next;
v->p_prev_next = &first_source_def;
first_source_def = v;
@ -690,15 +675,15 @@ static int obs_lua_register_source(lua_State *script)
if (have_func(create)) {
obs_source_t *source = ld->source;
obs_data_t *settings = obs_source_get_settings(
source);
obs_data_t *settings =
obs_source_get_settings(source);
ls_push_libobs_obj(obs_data_t, settings, false);
ls_push_libobs_obj(obs_source_t, source, false);
call_func(create, 2, 1);
ld->lua_data_ref = luaL_ref(ls->script,
LUA_REGISTRYINDEX);
ld->lua_data_ref =
luaL_ref(ls->script, LUA_REGISTRYINDEX);
obs_data_release(settings);
}
@ -727,7 +712,7 @@ void add_lua_source_functions(lua_State *script)
}
static inline void undef_source_type(struct obs_lua_script *data,
struct obs_lua_source *ls)
struct obs_lua_source *ls)
{
pthread_mutex_lock(&ls->definition_mutex);
pthread_mutex_lock(&data->mutex);