static inline obs_data_array_t *save_hotkey(obs_hotkey_t *hotkey) { obs_data_array_t *data = obs_data_array_create(); struct save_bindings_helper_t arg = {data, hotkey}; enum_bindings(save_bindings_helper, &arg); return data; }
obs_data_array_t *BiLiOBSMainWid::mSaveSceneListOrder() { obs_data_array_t *sceneOrder = obs_data_array_create(); #if 1 obs_source_t* currentScene = obs_get_output_source(0); std::list<std::string> tmpSceneOrder; //获取所有场景 for (OBSSource& src : OBSEnumSources()) { if (strcmp(obs_source_get_id(src), "scene") == 0) tmpSceneOrder.push_back(obs_source_get_name(src)); } //当前场景放在第一个 if (currentScene) { std::string currentSceneName = obs_source_get_name(currentScene); auto x = std::find(tmpSceneOrder.begin(), tmpSceneOrder.end(), currentSceneName); assert(x != tmpSceneOrder.end()); tmpSceneOrder.erase(x); tmpSceneOrder.push_front(obs_source_get_name(currentScene)); } //保存场景顺序 for (auto& x : tmpSceneOrder) { obs_data_t *data = obs_data_create(); obs_data_set_string(data, "name", x.c_str()); obs_data_array_push_back(sceneOrder, data); obs_data_release(data); } obs_source_release(currentScene); #else for (int i = 0; i < ui->scenes->count(); i++) { obs_data_t *data = obs_data_create(); obs_data_set_string(data, "name", QT_TO_UTF8(ui->scenes->item(i)->text())); obs_data_array_push_back(sceneOrder, data); obs_data_release(data); } #endif return sceneOrder; }
static void scene_save(void *data, obs_data_t *settings) { struct obs_scene *scene = data; obs_data_array_t *array = obs_data_array_create(); struct obs_scene_item *item; full_lock(scene); item = scene->first_item; while (item) { scene_save_item(array, item); item = item->next; } full_unlock(scene); obs_data_set_array(settings, "items", array); obs_data_array_release(array); }
obs_data_array_t *obs_save_sources(void) { obs_data_array_t *array; size_t i; if (!obs) return NULL; array = obs_data_array_create(); pthread_mutex_lock(&obs->data.user_sources_mutex); for (i = 0; i < obs->data.user_sources.num; i++) { obs_source_t *source = obs->data.user_sources.array[i]; obs_data_t *source_data = obs_save_source(source); obs_data_array_push_back(array, source_data); obs_data_release(source_data); } pthread_mutex_unlock(&obs->data.user_sources_mutex); return array; }
static void save_script_data(obs_data_t *save_data, bool saving, void *) { if (!saving) return; obs_data_array_t *array = obs_data_array_create(); for (OBSScript &script : scriptData->scripts) { const char *script_path = obs_script_get_path(script); obs_data_t *settings = obs_script_save(script); obs_data_t *obj = obs_data_create(); obs_data_set_string(obj, "path", script_path); obs_data_set_obj(obj, "settings", settings); obs_data_array_push_back(array, obj); obs_data_release(obj); obs_data_release(settings); } obs_data_set_array(save_data, "scripts-tool", array); obs_data_array_release(array); }