void OBSBasic::AddSourceWithProperty(const char *id) { size_t curTime = base::Time::Now().ToTimeT(); const char *src_name = obs_source_get_display_name(id); std::ostringstream os; os << src_name << "_" << curTime; std::string name = os.str(); OBSScene scene = GetCurrentScene(); if (!scene) return; obs_source_t * source = obs_source_create(id, name.c_str(), NULL, nullptr); if (source) { obs_scene_atomic_update(scene, [](void *data, obs_scene_t *scene){ obs_scene_add(scene, (obs_source_t *)data); }, source); } CreatePropertiesWindow(source, true); obs_source_release(source); }
static void AddExisting(const char *name, bool visible, bool duplicate) { OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow()); OBSScene scene = main->GetCurrentScene(); if (!scene) return; obs_source_t *source = obs_get_source_by_name(name); if (source) { if (duplicate) { obs_source_t *from = source; char *new_name = get_new_source_name(name); source = obs_source_duplicate(from, new_name, false); bfree(new_name); obs_source_release(from); if (!source) return; } AddSourceData data; data.source = source; data.visible = visible; obs_enter_graphics(); obs_scene_atomic_update(scene, AddSource, &data); obs_leave_graphics(); obs_source_release(source); } }
bool AddNew(QWidget *parent, const char *id, const char *name, const bool visible, OBSSource &newSource) { OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow()); OBSScene scene = main->GetCurrentScene(); bool success = false; if (!scene) return false; obs_source_t *source = obs_get_source_by_name(name); if (source) { OBSMessageBox::information(parent, QTStr("NameExists.Title"), QTStr("NameExists.Text")); } else { source = obs_source_create(id, name, NULL, nullptr); if (source) { AddSourceData data; data.source = source; data.visible = visible; obs_enter_graphics(); obs_scene_atomic_update(scene, AddSource, &data); obs_leave_graphics(); newSource = source; success = true; } } obs_source_release(source); return success; }