void obs_output_destroy(obs_output_t output) { if (output) { obs_context_data_remove(&output->context); if (output->valid && output->active) obs_output_stop(output); if (output->service) output->service->output = NULL; free_packets(output); if (output->context.data) output->info.destroy(output->context.data); if (output->video_encoder) { obs_encoder_remove_output(output->video_encoder, output); } if (output->audio_encoder) { obs_encoder_remove_output(output->audio_encoder, output); } pthread_mutex_destroy(&output->interleaved_mutex); os_event_destroy(output->reconnect_stop_event); obs_context_data_free(&output->context); bfree(output); } }
void obs_output_set_audio_encoder(obs_output_t *output, obs_encoder_t *encoder, size_t idx) { if (!obs_output_valid(output, "obs_output_set_audio_encoder")) return; if (encoder && encoder->info.type != OBS_ENCODER_AUDIO) { blog(LOG_WARNING, "obs_output_set_audio_encoder: " "encoder passed is not an audio encoder"); return; } if ((output->info.flags & OBS_OUTPUT_MULTI_TRACK) != 0) { if (idx >= MAX_AUDIO_MIXES) { return; } } else { if (idx > 0) { return; } } if (output->audio_encoders[idx] == encoder) return; obs_encoder_remove_output(output->audio_encoders[idx], output); obs_encoder_add_output(encoder, output); output->audio_encoders[idx] = encoder; }
void obs_output_destroy(obs_output_t *output) { if (output) { obs_context_data_remove(&output->context); blog(LOG_INFO, "output '%s' destroyed", output->context.name); if (output->valid && active(output)) obs_output_actual_stop(output, true, 0); os_event_wait(output->stopping_event); if (data_capture_ending(output)) pthread_join(output->end_data_capture_thread, NULL); if (output->service) output->service->output = NULL; if (output->context.data) output->info.destroy(output->context.data); free_packets(output); if (output->video_encoder) { obs_encoder_remove_output(output->video_encoder, output); } for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { if (output->audio_encoders[i]) { obs_encoder_remove_output( output->audio_encoders[i], output); } } os_event_destroy(output->stopping_event); pthread_mutex_destroy(&output->interleaved_mutex); pthread_mutex_destroy(&output->delay_mutex); os_event_destroy(output->reconnect_stop_event); obs_context_data_free(&output->context); circlebuf_free(&output->delay_data); if (output->owns_info_id) bfree((void*)output->info.id); bfree(output); } }
void obs_output_set_audio_encoder(obs_output_t output, obs_encoder_t encoder) { if (!output) return; if (output->audio_encoder == encoder) return; if (encoder && encoder->info.type != OBS_ENCODER_AUDIO) return; obs_encoder_remove_output(encoder, output); obs_encoder_add_output(encoder, output); output->audio_encoder = encoder; }
void obs_output_set_video_encoder(obs_output_t *output, obs_encoder_t *encoder) { if (!output) return; if (output->video_encoder == encoder) return; if (encoder && encoder->info.type != OBS_ENCODER_VIDEO) return; obs_encoder_remove_output(output->video_encoder, output); obs_encoder_add_output(encoder, output); output->video_encoder = encoder; /* set the preferred resolution on the encoder */ if (output->scaled_width && output->scaled_height) obs_encoder_set_scaled_size(output->video_encoder, output->scaled_width, output->scaled_height); }
void obs_output_destroy(obs_output_t *output) { if (output) { obs_context_data_remove(&output->context); blog(LOG_INFO, "output '%s' destroyed", output->context.name); if (output->valid && output->active) obs_output_stop(output); if (output->service) output->service->output = NULL; free_packets(output); if (output->context.data) output->info.destroy(output->context.data); if (output->video_encoder) { obs_encoder_remove_output(output->video_encoder, output); } for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { if (output->audio_encoders[i]) { obs_encoder_remove_output( output->audio_encoders[i], output); } } pthread_mutex_destroy(&output->interleaved_mutex); os_event_destroy(output->reconnect_stop_event); obs_context_data_free(&output->context); bfree(output); } }
void obs_output_set_video_encoder(obs_output_t *output, obs_encoder_t *encoder) { if (!obs_output_valid(output, "obs_output_set_video_encoder")) return; if (encoder && encoder->info.type != OBS_ENCODER_VIDEO) { blog(LOG_WARNING, "obs_output_set_video_encoder: " "encoder passed is not a video encoder"); return; } if (output->video_encoder == encoder) return; obs_encoder_remove_output(output->video_encoder, output); obs_encoder_add_output(encoder, output); output->video_encoder = encoder; /* set the preferred resolution on the encoder */ if (output->scaled_width && output->scaled_height) obs_encoder_set_scaled_size(output->video_encoder, output->scaled_width, output->scaled_height); }
void obs_output_set_audio_encoder(obs_output_t *output, obs_encoder_t *encoder, size_t idx) { if (!output) return; if (encoder && encoder->info.type != OBS_ENCODER_AUDIO) return; if ((output->info.flags & OBS_OUTPUT_MULTI_TRACK) != 0) { if (idx >= MAX_AUDIO_MIXES) { return; } } else { if (idx > 0) { return; } } if (output->audio_encoders[idx] == encoder) return; obs_encoder_remove_output(output->audio_encoders[idx], output); obs_encoder_add_output(encoder, output); output->audio_encoders[idx] = encoder; }