libobs: Add function to duplicate scenes

This commit is contained in:
jp9000 2015-08-28 15:01:15 -07:00
parent 3620dbb59f
commit ba718e94b5
2 changed files with 44 additions and 0 deletions

View file

@ -478,6 +478,42 @@ obs_scene_t *obs_scene_create(const char *name)
return source->context.data;
}
obs_scene_t *obs_scene_duplicate(obs_scene_t *scene, const char *name)
{
struct obs_scene *new_scene = obs_scene_create(name);
struct obs_scene_item *item = scene->first_item;
pthread_mutex_lock(&scene->mutex);
while (item) {
struct obs_source *source = item->source;
if (source) {
struct obs_scene_item *new_item =
obs_scene_add(new_scene, source);
new_item->visible = item->visible;
new_item->selected = item->selected;
new_item->pos = item->pos;
new_item->scale = item->scale;
new_item->align = item->align;
new_item->last_width = item->last_width;
new_item->last_height = item->last_height;
new_item->box_transform = item->box_transform;
new_item->draw_transform = item->draw_transform;
new_item->bounds_type = item->bounds_type;
new_item->bounds_align = item->bounds_align;
new_item->bounds = item->bounds;
}
item = item->next;
}
pthread_mutex_unlock(&scene->mutex);
return new_scene;
}
void obs_scene_addref(obs_scene_t *scene)
{
if (scene)

View file

@ -1018,6 +1018,14 @@ EXPORT uint32_t obs_source_get_base_height(obs_source_t *source);
*/
EXPORT obs_scene_t *obs_scene_create(const char *name);
/**
* Duplicates a scene.
*
* Sources in a scene will not be recreated; it will contain references to
* the same sources as the originating scene.
*/
EXPORT obs_scene_t *obs_scene_duplicate(obs_scene_t *scene, const char *name);
EXPORT void obs_scene_addref(obs_scene_t *scene);
EXPORT void obs_scene_release(obs_scene_t *scene);