예제 #1
0
obs_source_t obs_source_create(enum obs_source_type type, const char *id,
                               const char *name, const char *settings)
{
    struct obs_source *source;

    const struct source_info *info = get_source_info(type, id);
    if (!info) {
        blog(LOG_WARNING, "Source '%s' not found", id);
        return NULL;
    }

    source = bmalloc(sizeof(struct obs_source));
    memset(source, 0, sizeof(struct obs_source));

    if (!obs_source_init_handlers(source))
        goto fail;

    source->name = bstrdup(name);
    source->type = type;
    source->data = info->create(settings, source);
    if (!source->data)
        goto fail;

    if (!obs_source_init(source, settings, info))
        goto fail;

    obs_source_dosignal(source, "source-create");
    return source;

fail:
    blog(LOG_ERROR, "obs_source_create failed");
    obs_source_destroy(source);
    return NULL;
}
예제 #2
0
obs_scene_t obs_scene_create(const char *name)
{
	struct obs_source *source = bmalloc(sizeof(struct obs_source));
	struct obs_scene  *scene;

	memset(source, 0, sizeof(struct obs_source));
	if (!obs_source_init_handlers(source)) {
		bfree(source);
		return NULL;
	}

	source->settings = obs_data_create();
	scene = scene_create(source->settings, source);
	source->data = scene;

	assert(scene);
	if (!scene) {
		obs_data_release(source->settings);
		bfree(source);
		return NULL;
	}

	source->name  = bstrdup(name);
	source->type  = SOURCE_SCENE;

	scene->source = source;
	obs_source_init(source, &scene_info);
	memcpy(&source->callbacks, &scene_info, sizeof(struct source_info));
	return scene;
}