mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 04:42:18 +02:00
libobs: Replace addref calls with get_ref
This commit is contained in:
parent
77a35e93ea
commit
0523c2e5e9
@ -1478,8 +1478,7 @@ static inline obs_source_t *dup_child(struct darray *array, size_t idx,
|
|||||||
struct obs_scene_item *item = old_items.array[i];
|
struct obs_scene_item *item = old_items.array[i];
|
||||||
if (item->source == source) {
|
if (item->source == source) {
|
||||||
source = get_child_at_idx(new_scene, i);
|
source = get_child_at_idx(new_scene, i);
|
||||||
obs_source_addref(source);
|
return obs_source_get_ref(source);
|
||||||
return source;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1489,8 +1488,7 @@ static inline obs_source_t *dup_child(struct darray *array, size_t idx,
|
|||||||
|
|
||||||
static inline obs_source_t *new_ref(obs_source_t *source)
|
static inline obs_source_t *new_ref(obs_source_t *source)
|
||||||
{
|
{
|
||||||
obs_source_addref(source);
|
return obs_source_get_ref(source);
|
||||||
return source;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void duplicate_item_data(struct obs_scene_item *dst,
|
static inline void duplicate_item_data(struct obs_scene_item *dst,
|
||||||
@ -1954,6 +1952,7 @@ static obs_sceneitem_t *obs_scene_add_internal(obs_scene_t *scene,
|
|||||||
if (!scene)
|
if (!scene)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
source = obs_source_get_ref(source);
|
||||||
if (!source) {
|
if (!source) {
|
||||||
blog(LOG_ERROR, "Tried to add a NULL source to a scene");
|
blog(LOG_ERROR, "Tried to add a NULL source to a scene");
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1961,19 +1960,19 @@ static obs_sceneitem_t *obs_scene_add_internal(obs_scene_t *scene,
|
|||||||
|
|
||||||
if (source->removed) {
|
if (source->removed) {
|
||||||
blog(LOG_WARNING, "Tried to add a removed source to a scene");
|
blog(LOG_WARNING, "Tried to add a removed source to a scene");
|
||||||
return NULL;
|
goto release_source_and_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pthread_mutex_init(&mutex, NULL) != 0) {
|
if (pthread_mutex_init(&mutex, NULL) != 0) {
|
||||||
blog(LOG_WARNING, "Failed to create scene item mutex");
|
blog(LOG_WARNING, "Failed to create scene item mutex");
|
||||||
return NULL;
|
goto release_source_and_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!obs_source_add_active_child(scene->source, source)) {
|
if (!obs_source_add_active_child(scene->source, source)) {
|
||||||
blog(LOG_WARNING, "Failed to add source to scene due to "
|
blog(LOG_WARNING, "Failed to add source to scene due to "
|
||||||
"infinite source recursion");
|
"infinite source recursion");
|
||||||
pthread_mutex_destroy(&mutex);
|
pthread_mutex_destroy(&mutex);
|
||||||
return NULL;
|
goto release_source_and_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
item = bzalloc(sizeof(struct obs_scene_item));
|
item = bzalloc(sizeof(struct obs_scene_item));
|
||||||
@ -1993,8 +1992,6 @@ static obs_sceneitem_t *obs_scene_add_internal(obs_scene_t *scene,
|
|||||||
matrix4_identity(&item->draw_transform);
|
matrix4_identity(&item->draw_transform);
|
||||||
matrix4_identity(&item->box_transform);
|
matrix4_identity(&item->box_transform);
|
||||||
|
|
||||||
obs_source_addref(source);
|
|
||||||
|
|
||||||
if (source_has_audio(source)) {
|
if (source_has_audio(source)) {
|
||||||
item->visible = false;
|
item->visible = false;
|
||||||
da_push_back(item->audio_actions, &action);
|
da_push_back(item->audio_actions, &action);
|
||||||
@ -2039,6 +2036,10 @@ static obs_sceneitem_t *obs_scene_add_internal(obs_scene_t *scene,
|
|||||||
sceneitem_renamed, item);
|
sceneitem_renamed, item);
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
|
|
||||||
|
release_source_and_fail:
|
||||||
|
obs_source_release(source);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
obs_sceneitem_t *obs_scene_add(obs_scene_t *scene, obs_source_t *source)
|
obs_sceneitem_t *obs_scene_add(obs_scene_t *scene, obs_source_t *source)
|
||||||
@ -2433,9 +2434,11 @@ void obs_sceneitem_set_order(obs_sceneitem_t *item,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
struct obs_scene_item *next, *prev;
|
struct obs_scene_item *next, *prev;
|
||||||
struct obs_scene *scene = item->parent;
|
struct obs_scene *scene = obs_scene_get_ref(item->parent);
|
||||||
|
|
||||||
|
if (!scene)
|
||||||
|
return;
|
||||||
|
|
||||||
obs_scene_addref(scene);
|
|
||||||
full_lock(scene);
|
full_lock(scene);
|
||||||
|
|
||||||
next = item->next;
|
next = item->next;
|
||||||
@ -2493,10 +2496,12 @@ void obs_sceneitem_set_order_position(obs_sceneitem_t *item, int position)
|
|||||||
if (!item)
|
if (!item)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
struct obs_scene *scene = item->parent;
|
struct obs_scene *scene = obs_scene_get_ref(item->parent);
|
||||||
struct obs_scene_item *next;
|
struct obs_scene_item *next;
|
||||||
|
|
||||||
obs_scene_addref(scene);
|
if (!scene)
|
||||||
|
return;
|
||||||
|
|
||||||
full_lock(scene);
|
full_lock(scene);
|
||||||
|
|
||||||
detach_sceneitem(item);
|
detach_sceneitem(item);
|
||||||
@ -2766,7 +2771,10 @@ bool obs_scene_reorder_items(obs_scene_t *scene,
|
|||||||
if (!scene || !item_order_size)
|
if (!scene || !item_order_size)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
obs_scene_addref(scene);
|
scene = obs_scene_get_ref(scene);
|
||||||
|
if (!scene)
|
||||||
|
return false;
|
||||||
|
|
||||||
full_lock(scene);
|
full_lock(scene);
|
||||||
|
|
||||||
bool order_matches = true;
|
bool order_matches = true;
|
||||||
@ -2804,7 +2812,10 @@ void obs_scene_atomic_update(obs_scene_t *scene,
|
|||||||
if (!scene)
|
if (!scene)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
obs_scene_addref(scene);
|
scene = obs_scene_get_ref(scene);
|
||||||
|
if (!scene)
|
||||||
|
return;
|
||||||
|
|
||||||
full_lock(scene);
|
full_lock(scene);
|
||||||
func(data, scene);
|
func(data, scene);
|
||||||
full_unlock(scene);
|
full_unlock(scene);
|
||||||
@ -3441,7 +3452,10 @@ bool obs_scene_reorder_items2(obs_scene_t *scene,
|
|||||||
if (!scene || !item_order_size || !item_order)
|
if (!scene || !item_order_size || !item_order)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
obs_scene_addref(scene);
|
scene = obs_scene_get_ref(scene);
|
||||||
|
if (!scene)
|
||||||
|
return false;
|
||||||
|
|
||||||
full_lock(scene);
|
full_lock(scene);
|
||||||
|
|
||||||
if (sceneitems_match2(scene, item_order, item_order_size)) {
|
if (sceneitems_match2(scene, item_order, item_order_size)) {
|
||||||
@ -3583,9 +3597,7 @@ void obs_sceneitem_set_show_transition(obs_sceneitem_t *item,
|
|||||||
if (item->show_transition)
|
if (item->show_transition)
|
||||||
obs_source_release(item->show_transition);
|
obs_source_release(item->show_transition);
|
||||||
|
|
||||||
item->show_transition = transition;
|
item->show_transition = obs_source_get_ref(transition);
|
||||||
if (item->show_transition)
|
|
||||||
obs_source_addref(item->show_transition);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void obs_sceneitem_set_show_transition_duration(obs_sceneitem_t *item,
|
void obs_sceneitem_set_show_transition_duration(obs_sceneitem_t *item,
|
||||||
@ -3618,9 +3630,7 @@ void obs_sceneitem_set_hide_transition(obs_sceneitem_t *item,
|
|||||||
if (item->hide_transition)
|
if (item->hide_transition)
|
||||||
obs_source_release(item->hide_transition);
|
obs_source_release(item->hide_transition);
|
||||||
|
|
||||||
item->hide_transition = transition;
|
item->hide_transition = obs_source_get_ref(transition);
|
||||||
if (item->hide_transition)
|
|
||||||
obs_source_addref(item->hide_transition);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void obs_sceneitem_set_hide_transition_duration(obs_sceneitem_t *item,
|
void obs_sceneitem_set_hide_transition_duration(obs_sceneitem_t *item,
|
||||||
|
@ -241,7 +241,7 @@ set_source(obs_source_t *transition, enum obs_transition_target target,
|
|||||||
bool already_active;
|
bool already_active;
|
||||||
|
|
||||||
if (new_child)
|
if (new_child)
|
||||||
obs_source_addref(new_child);
|
new_child = obs_source_get_ref(new_child);
|
||||||
|
|
||||||
lock_transition(transition);
|
lock_transition(transition);
|
||||||
|
|
||||||
@ -294,7 +294,7 @@ obs_source_t *obs_transition_get_source(obs_source_t *transition,
|
|||||||
|
|
||||||
lock_transition(transition);
|
lock_transition(transition);
|
||||||
ret = transition->transition_sources[idx];
|
ret = transition->transition_sources[idx];
|
||||||
obs_source_addref(ret);
|
ret = obs_source_get_ref(ret);
|
||||||
unlock_transition(transition);
|
unlock_transition(transition);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -312,7 +312,7 @@ obs_source_t *obs_transition_get_active_source(obs_source_t *transition)
|
|||||||
ret = transition->transition_sources[1];
|
ret = transition->transition_sources[1];
|
||||||
else
|
else
|
||||||
ret = transition->transition_sources[0];
|
ret = transition->transition_sources[0];
|
||||||
obs_source_addref(ret);
|
ret = obs_source_get_ref(ret);
|
||||||
unlock_transition(transition);
|
unlock_transition(transition);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -442,7 +442,7 @@ void obs_transition_set(obs_source_t *transition, obs_source_t *source)
|
|||||||
if (!transition_valid(transition, "obs_transition_clear"))
|
if (!transition_valid(transition, "obs_transition_clear"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
obs_source_addref(source);
|
source = obs_source_get_ref(source);
|
||||||
|
|
||||||
lock_transition(transition);
|
lock_transition(transition);
|
||||||
for (size_t i = 0; i < 2; i++) {
|
for (size_t i = 0; i < 2; i++) {
|
||||||
@ -632,10 +632,8 @@ struct transition_state {
|
|||||||
static inline void copy_transition_state(obs_source_t *transition,
|
static inline void copy_transition_state(obs_source_t *transition,
|
||||||
struct transition_state *state)
|
struct transition_state *state)
|
||||||
{
|
{
|
||||||
state->s[0] = transition->transition_sources[0];
|
state->s[0] = obs_source_get_ref(transition->transition_sources[0]);
|
||||||
state->s[1] = transition->transition_sources[1];
|
state->s[1] = obs_source_get_ref(transition->transition_sources[1]);
|
||||||
obs_source_addref(state->s[0]);
|
|
||||||
obs_source_addref(state->s[1]);
|
|
||||||
|
|
||||||
state->transitioning_video = transition->transitioning_video;
|
state->transitioning_video = transition->transitioning_video;
|
||||||
state->transitioning_audio = transition->transitioning_audio;
|
state->transitioning_audio = transition->transitioning_audio;
|
||||||
@ -1038,7 +1036,8 @@ static inline obs_source_t *
|
|||||||
copy_source_state(obs_source_t *tr_dest, obs_source_t *tr_source, size_t idx)
|
copy_source_state(obs_source_t *tr_dest, obs_source_t *tr_source, size_t idx)
|
||||||
{
|
{
|
||||||
obs_source_t *old_child = tr_dest->transition_sources[idx];
|
obs_source_t *old_child = tr_dest->transition_sources[idx];
|
||||||
obs_source_t *new_child = tr_source->transition_sources[idx];
|
obs_source_t *new_child =
|
||||||
|
obs_source_get_ref(tr_source->transition_sources[idx]);
|
||||||
bool active = tr_source->transition_source_active[idx];
|
bool active = tr_source->transition_source_active[idx];
|
||||||
|
|
||||||
if (old_child && tr_dest->transition_source_active[idx])
|
if (old_child && tr_dest->transition_source_active[idx])
|
||||||
@ -1049,7 +1048,6 @@ copy_source_state(obs_source_t *tr_dest, obs_source_t *tr_source, size_t idx)
|
|||||||
|
|
||||||
if (active && new_child)
|
if (active && new_child)
|
||||||
obs_source_add_active_child(tr_dest, new_child);
|
obs_source_add_active_child(tr_dest, new_child);
|
||||||
obs_source_addref(new_child);
|
|
||||||
|
|
||||||
return old_child;
|
return old_child;
|
||||||
}
|
}
|
||||||
|
@ -465,9 +465,12 @@ static void duplicate_filters(obs_source_t *dst, obs_source_t *src,
|
|||||||
da_init(filters);
|
da_init(filters);
|
||||||
|
|
||||||
pthread_mutex_lock(&src->filter_mutex);
|
pthread_mutex_lock(&src->filter_mutex);
|
||||||
for (size_t i = 0; i < src->filters.num; i++)
|
da_reserve(filters, src->filters.num);
|
||||||
obs_source_addref(src->filters.array[i]);
|
for (size_t i = 0; i < src->filters.num; i++) {
|
||||||
da_copy(filters, src->filters);
|
obs_source_t *s = obs_source_get_ref(src->filters.array[i]);
|
||||||
|
if (s)
|
||||||
|
da_push_back(filters, &s);
|
||||||
|
}
|
||||||
pthread_mutex_unlock(&src->filter_mutex);
|
pthread_mutex_unlock(&src->filter_mutex);
|
||||||
|
|
||||||
for (size_t i = filters.num; i > 0; i--) {
|
for (size_t i = filters.num; i > 0; i--) {
|
||||||
@ -537,8 +540,7 @@ obs_source_t *obs_source_duplicate(obs_source_t *source, const char *new_name,
|
|||||||
if (source->info.type == OBS_SOURCE_TYPE_SCENE) {
|
if (source->info.type == OBS_SOURCE_TYPE_SCENE) {
|
||||||
obs_scene_t *scene = obs_scene_from_source(source);
|
obs_scene_t *scene = obs_scene_from_source(source);
|
||||||
if (scene && !create_private) {
|
if (scene && !create_private) {
|
||||||
obs_source_addref(source);
|
return obs_source_get_ref(source);
|
||||||
return source;
|
|
||||||
}
|
}
|
||||||
if (!scene)
|
if (!scene)
|
||||||
scene = obs_group_from_source(source);
|
scene = obs_group_from_source(source);
|
||||||
@ -554,8 +556,7 @@ obs_source_t *obs_source_duplicate(obs_source_t *source, const char *new_name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((source->info.output_flags & OBS_SOURCE_DO_NOT_DUPLICATE) != 0) {
|
if ((source->info.output_flags & OBS_SOURCE_DO_NOT_DUPLICATE) != 0) {
|
||||||
obs_source_addref(source);
|
return obs_source_get_ref(source);
|
||||||
return source;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
settings = obs_data_create();
|
settings = obs_data_create();
|
||||||
@ -2265,8 +2266,7 @@ static inline void obs_source_render_filters(obs_source_t *source)
|
|||||||
obs_source_t *first_filter;
|
obs_source_t *first_filter;
|
||||||
|
|
||||||
pthread_mutex_lock(&source->filter_mutex);
|
pthread_mutex_lock(&source->filter_mutex);
|
||||||
first_filter = source->filters.array[0];
|
first_filter = obs_source_get_ref(source->filters.array[0]);
|
||||||
obs_source_addref(first_filter);
|
|
||||||
pthread_mutex_unlock(&source->filter_mutex);
|
pthread_mutex_unlock(&source->filter_mutex);
|
||||||
|
|
||||||
source->rendering_filter = true;
|
source->rendering_filter = true;
|
||||||
@ -2386,10 +2386,12 @@ void obs_source_video_render(obs_source_t *source)
|
|||||||
if (!obs_source_valid(source, "obs_source_video_render"))
|
if (!obs_source_valid(source, "obs_source_video_render"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
obs_source_addref(source);
|
source = obs_source_get_ref(source);
|
||||||
|
if (source) {
|
||||||
render_video(source);
|
render_video(source);
|
||||||
obs_source_release(source);
|
obs_source_release(source);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline uint32_t get_async_width(const obs_source_t *source)
|
static inline uint32_t get_async_width(const obs_source_t *source)
|
||||||
{
|
{
|
||||||
@ -2556,7 +2558,9 @@ void obs_source_filter_add(obs_source_t *source, obs_source_t *filter)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
obs_source_addref(filter);
|
filter = obs_source_get_ref(filter);
|
||||||
|
if (!obs_ptr_valid(filter, "obs_source_filter_add"))
|
||||||
|
return;
|
||||||
|
|
||||||
filter->filter_parent = source;
|
filter->filter_parent = source;
|
||||||
filter->filter_target = !source->filters.num ? source
|
filter->filter_target = !source->filters.num ? source
|
||||||
@ -4071,7 +4075,9 @@ void obs_source_enum_active_sources(obs_source_t *source,
|
|||||||
if (!is_transition && !source->info.enum_active_sources)
|
if (!is_transition && !source->info.enum_active_sources)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
obs_source_addref(source);
|
source = obs_source_get_ref(source);
|
||||||
|
if (!data_valid(source, "obs_source_enum_active_sources"))
|
||||||
|
return;
|
||||||
|
|
||||||
if (is_transition)
|
if (is_transition)
|
||||||
obs_transition_enum_sources(source, enum_callback, param);
|
obs_transition_enum_sources(source, enum_callback, param);
|
||||||
@ -4096,7 +4102,9 @@ void obs_source_enum_active_tree(obs_source_t *source,
|
|||||||
if (!is_transition && !source->info.enum_active_sources)
|
if (!is_transition && !source->info.enum_active_sources)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
obs_source_addref(source);
|
source = obs_source_get_ref(source);
|
||||||
|
if (!data_valid(source, "obs_source_enum_active_tree"))
|
||||||
|
return;
|
||||||
|
|
||||||
if (source->info.type == OBS_SOURCE_TYPE_TRANSITION)
|
if (source->info.type == OBS_SOURCE_TYPE_TRANSITION)
|
||||||
obs_transition_enum_sources(
|
obs_transition_enum_sources(
|
||||||
@ -4149,7 +4157,9 @@ void obs_source_enum_full_tree(obs_source_t *source,
|
|||||||
if (!is_transition && !source->info.enum_active_sources)
|
if (!is_transition && !source->info.enum_active_sources)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
obs_source_addref(source);
|
source = obs_source_get_ref(source);
|
||||||
|
if (!data_valid(source, "obs_source_enum_full_tree"))
|
||||||
|
return;
|
||||||
|
|
||||||
if (source->info.type == OBS_SOURCE_TYPE_TRANSITION)
|
if (source->info.type == OBS_SOURCE_TYPE_TRANSITION)
|
||||||
obs_transition_enum_sources(
|
obs_transition_enum_sources(
|
||||||
@ -4486,8 +4496,7 @@ obs_source_t *obs_source_get_filter_by_name(obs_source_t *source,
|
|||||||
for (size_t i = 0; i < source->filters.num; i++) {
|
for (size_t i = 0; i < source->filters.num; i++) {
|
||||||
struct obs_source *cur_filter = source->filters.array[i];
|
struct obs_source *cur_filter = source->filters.array[i];
|
||||||
if (strcmp(cur_filter->context.name, name) == 0) {
|
if (strcmp(cur_filter->context.name, name) == 0) {
|
||||||
filter = cur_filter;
|
filter = obs_source_get_ref(cur_filter);
|
||||||
obs_source_addref(filter);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5441,8 +5450,7 @@ void obs_source_restore_filters(obs_source_t *source, obs_data_array_t *array)
|
|||||||
obs_source_t *cur = cur_filters.array[j];
|
obs_source_t *cur = cur_filters.array[j];
|
||||||
const char *cur_name = cur->context.name;
|
const char *cur_name = cur->context.name;
|
||||||
if (cur_name && strcmp(cur_name, name) == 0) {
|
if (cur_name && strcmp(cur_name, name) == 0) {
|
||||||
filter = cur;
|
filter = obs_source_get_ref(cur);
|
||||||
obs_source_addref(cur);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,11 +81,7 @@ obs_source_t *obs_view_get_source(obs_view_t *view, uint32_t channel)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
pthread_mutex_lock(&view->channels_mutex);
|
pthread_mutex_lock(&view->channels_mutex);
|
||||||
|
source = obs_source_get_ref(view->channels[channel]);
|
||||||
source = view->channels[channel];
|
|
||||||
if (source)
|
|
||||||
obs_source_addref(source);
|
|
||||||
|
|
||||||
pthread_mutex_unlock(&view->channels_mutex);
|
pthread_mutex_unlock(&view->channels_mutex);
|
||||||
|
|
||||||
return source;
|
return source;
|
||||||
@ -104,9 +100,7 @@ void obs_view_set_source(obs_view_t *view, uint32_t channel,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
pthread_mutex_lock(&view->channels_mutex);
|
pthread_mutex_lock(&view->channels_mutex);
|
||||||
|
source = obs_source_get_ref(source);
|
||||||
obs_source_addref(source);
|
|
||||||
|
|
||||||
prev_source = view->channels[channel];
|
prev_source = view->channels[channel];
|
||||||
view->channels[channel] = source;
|
view->channels[channel] = source;
|
||||||
|
|
||||||
|
@ -1441,7 +1441,7 @@ void obs_set_output_source(uint32_t channel, obs_source_t *source)
|
|||||||
|
|
||||||
pthread_mutex_lock(&view->channels_mutex);
|
pthread_mutex_lock(&view->channels_mutex);
|
||||||
|
|
||||||
obs_source_addref(source);
|
source = obs_source_get_ref(source);
|
||||||
|
|
||||||
prev_source = view->channels[channel];
|
prev_source = view->channels[channel];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user