static void destroy_log_context(struct log_context *log_context) { pthread_mutex_lock(&log_contexts_mutex); da_erase_item(active_log_contexts, &log_context); da_push_back(cached_log_contexts, &log_context); pthread_mutex_unlock(&log_contexts_mutex); }
void obs_source_remove(obs_source_t source) { struct obs_program_data *data = &obs->data; size_t id; pthread_mutex_lock(&data->sources_mutex); if (!source || source->removed) return; source->removed = true; obs_source_addref(source); id = da_find(data->sources, &source, 0); if (id != DARRAY_INVALID) { da_erase_item(data->sources, &source); obs_source_release(source); } pthread_mutex_unlock(&data->sources_mutex); obs_source_dosignal(source, "source-remove"); obs_source_release(source); }
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); } }
static inline void audio_output_removeline(struct audio_output *audio, struct audio_line *line) { pthread_mutex_lock(&audio->line_mutex); da_erase_item(audio->lines, &line); pthread_mutex_unlock(&audio->line_mutex); audio_line_destroy_data(line); }
void obs_encoder_remove_output(struct obs_encoder *encoder, struct obs_output *output) { if (!encoder) return; pthread_mutex_lock(&encoder->outputs_mutex); da_erase_item(encoder->outputs, &output); pthread_mutex_unlock(&encoder->outputs_mutex); }
void obs_display_destroy(obs_display_t display) { if (display) { pthread_mutex_lock(&obs->data.displays_mutex); da_erase_item(obs->data.displays, &display); pthread_mutex_unlock(&obs->data.displays_mutex); obs_display_free(display); bfree(display); } }
void obs_display_remove_draw_callback(obs_display_t display, void (*draw)(void *param, uint32_t cx, uint32_t cy), void *param) { if (!display) return; struct draw_callback data = {draw, param}; pthread_mutex_lock(&display->draw_callbacks_mutex); da_erase_item(display->draw_callbacks, &data); pthread_mutex_unlock(&display->draw_callbacks_mutex); }
void audio_monitor_destroy(struct audio_monitor *monitor) { if (monitor) { audio_monitor_free(monitor); pthread_mutex_lock(&obs->audio.monitoring_mutex); da_erase_item(obs->audio.monitors, &monitor); pthread_mutex_unlock(&obs->audio.monitoring_mutex); bfree(monitor); } }
void obs_encoder_destroy(obs_encoder_t encoder) { if (encoder) { pthread_mutex_lock(&obs->data.encoders_mutex); da_erase_item(obs->data.encoders, &encoder); pthread_mutex_unlock(&obs->data.encoders_mutex); encoder->info.destroy(encoder->data); obs_data_release(encoder->settings); bfree(encoder->name); bfree(encoder); } }
void obs_display_destroy(obs_display_t display) { if (display) { size_t i; pthread_mutex_lock(&obs->data.displays_mutex); da_erase_item(obs->data.displays, &display); pthread_mutex_unlock(&obs->data.displays_mutex); for (i = 0; i < MAX_CHANNELS; i++) obs_source_release(display->channels[i]); swapchain_destroy(display->swap); bfree(display); } }
void obs_source_remove(obs_source_t source) { struct obs_data *data = &obs->data; size_t id; source->removed = true; pthread_mutex_lock(&data->sources_mutex); id = da_find(data->sources, &source, 0); if (id != DARRAY_INVALID) { da_erase_item(data->sources, &source); obs_source_release(source); } pthread_mutex_unlock(&data->sources_mutex); }