예제 #1
0
파일: obs.c 프로젝트: kmdtukl/obs-studio
void obs_shutdown(void)
{
	if (!obs)
		return;

	da_free(obs->input_types);
	da_free(obs->filter_types);
	da_free(obs->encoder_types);
	da_free(obs->transition_types);
	da_free(obs->output_types);
	da_free(obs->service_types);
	da_free(obs->modal_ui_callbacks);
	da_free(obs->modeless_ui_callbacks);

	stop_video();

	obs_free_data();
	obs_free_video();
	obs_free_graphics();
	obs_free_audio();
	proc_handler_destroy(obs->procs);
	signal_handler_destroy(obs->signals);

	for (size_t i = 0; i < obs->modules.num; i++)
		free_module(obs->modules.array+i);
	da_free(obs->modules);

	bfree(obs->locale);
	bfree(obs);
	obs = NULL;
}
예제 #2
0
파일: obs.c 프로젝트: Ceropean/obs-studio
void obs_shutdown(void)
{
	size_t i;

	if (!obs)
		return;

	da_free(obs->input_types);
	da_free(obs->filter_types);
	da_free(obs->transition_types);
	da_free(obs->output_types);
	da_free(obs->service_types);

	obs_free_data();
	obs_free_video();
	obs_free_graphics();
	obs_free_audio();
	media_close(obs->media);
	proc_handler_destroy(obs->procs);
	signal_handler_destroy(obs->signals);

	for (i = 0; i < obs->modules.num; i++)
		free_module(obs->modules.array+i);
	da_free(obs->modules);

	bfree(obs);
	obs = NULL;
}
예제 #3
0
void obs_output_destroy(obs_output_t output)
{
	if (output) {
		if (output->valid) {
			if (output->info.active) {
				if (output->info.active(output->data))
					output->info.stop(output->data);
			}

			pthread_mutex_lock(&obs->data.outputs_mutex);
			da_erase_item(obs->data.outputs, &output);
			pthread_mutex_unlock(&obs->data.outputs_mutex);
		}

		if (output->data)
			output->info.destroy(output->data);

		signal_handler_destroy(output->signals);
		proc_handler_destroy(output->procs);

		obs_data_release(output->settings);
		bfree(output->name);
		bfree(output);
	}
}
예제 #4
0
파일: obs.c 프로젝트: Lexsus/obs-studio
void obs_context_data_free(struct obs_context_data *context)
{
	signal_handler_destroy(context->signals);
	proc_handler_destroy(context->procs);
	obs_data_release(context->settings);
	obs_context_data_remove(context);
	pthread_mutex_destroy(&context->rename_cache_mutex);
	bfree(context->name);

	for (size_t i = 0; i < context->rename_cache.num; i++)
		bfree(context->rename_cache.array[i]);
	da_free(context->rename_cache);

	memset(context, 0, sizeof(*context));
}
예제 #5
0
파일: obs.c 프로젝트: Lexsus/obs-studio
void obs_shutdown(void)
{
	struct obs_module *module;

	if (!obs)
		return;

	da_free(obs->input_types);
	da_free(obs->filter_types);
	da_free(obs->encoder_types);
	da_free(obs->transition_types);
	da_free(obs->output_types);
	da_free(obs->service_types);
	da_free(obs->modal_ui_callbacks);
	da_free(obs->modeless_ui_callbacks);

	stop_video();

	obs_free_data();
	obs_free_video();
	obs_free_graphics();
	obs_free_audio();
	proc_handler_destroy(obs->procs);
	signal_handler_destroy(obs->signals);

	module = obs->first_module;
	while (module) {
		struct obs_module *next = module->next;
		free_module(module);
		module = next;
	}
	obs->first_module = NULL;

	for (size_t i = 0; i < obs->module_paths.num; i++)
		free_module_path(obs->module_paths.array+i);
	da_free(obs->module_paths);

	bfree(obs->locale);
	bfree(obs);
	obs = NULL;
}
예제 #6
0
static void obs_source_destroy(obs_source_t source)
{
    size_t i;

    obs_source_dosignal(source, "source-destroy");

    if (source->filter_parent)
        obs_source_filter_remove(source->filter_parent, source);

    for (i = 0; i < source->filters.num; i++)
        obs_source_release(source->filters.array[i]);

    for (i = 0; i < source->audio_wait_buffer.num; i++)
        audiobuf_free(source->audio_wait_buffer.array+i);
    for (i = 0; i < source->video_frames.num; i++)
        source_frame_destroy(source->video_frames.array[i]);

    gs_entercontext(obs->video.graphics);
    texture_destroy(source->output_texture);
    gs_leavecontext();

    if (source->data)
        source->callbacks.destroy(source->data);

    bfree(source->audio_data.data);
    audio_line_destroy(source->audio_line);
    audio_resampler_destroy(source->resampler);

    proc_handler_destroy(source->procs);
    signal_handler_destroy(source->signals);

    da_free(source->video_frames);
    da_free(source->audio_wait_buffer);
    da_free(source->filters);
    pthread_mutex_destroy(&source->filter_mutex);
    pthread_mutex_destroy(&source->audio_mutex);
    pthread_mutex_destroy(&source->video_mutex);
    dstr_free(&source->settings);
    bfree(source->name);
    bfree(source);
}