libobs: Refactor obs_scene_add to allow adding internally
Allows using obs_scene_add_internal to add without sending signals.
This commit is contained in:
parent
b46fab87b2
commit
10fc206f98
@ -1338,12 +1338,11 @@ static inline bool source_has_audio(obs_source_t *source)
|
||||
(OBS_SOURCE_AUDIO | OBS_SOURCE_COMPOSITE)) != 0;
|
||||
}
|
||||
|
||||
obs_sceneitem_t *obs_scene_add(obs_scene_t *scene, obs_source_t *source)
|
||||
static obs_sceneitem_t *obs_scene_add_internal(obs_scene_t *scene,
|
||||
obs_source_t *source, obs_sceneitem_t *insert_after)
|
||||
{
|
||||
struct obs_scene_item *last;
|
||||
struct obs_scene_item *item;
|
||||
struct calldata params;
|
||||
uint8_t stack[128];
|
||||
pthread_mutex_t mutex;
|
||||
|
||||
struct item_action action = {
|
||||
@ -1403,15 +1402,23 @@ obs_sceneitem_t *obs_scene_add(obs_scene_t *scene, obs_source_t *source)
|
||||
|
||||
full_lock(scene);
|
||||
|
||||
last = scene->first_item;
|
||||
if (!last) {
|
||||
scene->first_item = item;
|
||||
if (insert_after) {
|
||||
obs_sceneitem_t *next = insert_after->next;
|
||||
if (next) next->prev = item;
|
||||
item->next = insert_after->next;
|
||||
item->prev = insert_after;
|
||||
insert_after->next = item;
|
||||
} else {
|
||||
while (last->next)
|
||||
last = last->next;
|
||||
last = scene->first_item;
|
||||
if (!last) {
|
||||
scene->first_item = item;
|
||||
} else {
|
||||
while (last->next)
|
||||
last = last->next;
|
||||
|
||||
last->next = item;
|
||||
item->prev = last;
|
||||
last->next = item;
|
||||
item->prev = last;
|
||||
}
|
||||
}
|
||||
|
||||
full_unlock(scene);
|
||||
@ -1419,12 +1426,20 @@ obs_sceneitem_t *obs_scene_add(obs_scene_t *scene, obs_source_t *source)
|
||||
if (!scene->source->context.private)
|
||||
init_hotkeys(scene, item, obs_source_get_name(source));
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
obs_sceneitem_t *obs_scene_add(obs_scene_t *scene, obs_source_t *source)
|
||||
{
|
||||
obs_sceneitem_t *item = obs_scene_add_internal(scene, source, NULL);
|
||||
struct calldata params;
|
||||
uint8_t stack[128];
|
||||
|
||||
calldata_init_fixed(¶ms, stack, sizeof(stack));
|
||||
calldata_set_ptr(¶ms, "scene", scene);
|
||||
calldata_set_ptr(¶ms, "item", item);
|
||||
signal_handler_signal(scene->source->context.signals, "item_add",
|
||||
¶ms);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user