bool obs_output_initialize_encoders(obs_output_t output, uint32_t flags) { bool encoded, has_video, has_audio, has_service; if (!output) return false; if (output->active) return false; convert_flags(output, flags, &encoded, &has_video, &has_audio, &has_service); if (!encoded) return false; if (has_service && !obs_service_initialize(output->service, output)) return false; if (has_video && !obs_encoder_initialize(output->video_encoder)) return false; if (has_audio && !obs_encoder_initialize(output->audio_encoder)) return false; if (has_video && has_audio && !output->audio_encoder->active && !output->video_encoder->active) { output->audio_encoder->wait_for_video = true; output->video_encoder->paired_encoder = output->audio_encoder; output->audio_encoder->paired_encoder = output->video_encoder; } return true; }
bool obs_output_initialize_encoders(obs_output_t *output, uint32_t flags) { bool encoded, has_video, has_audio, has_service; size_t num_mixes = num_audio_mixes(output); if (!output) return false; if (output->active) return false; convert_flags(output, flags, &encoded, &has_video, &has_audio, &has_service); if (!encoded) return false; if (has_service && !obs_service_initialize(output->service, output)) return false; if (has_video && !obs_encoder_initialize(output->video_encoder)) return false; if (has_audio && !initialize_audio_encoders(output, num_mixes)) return false; if (has_video && has_audio) { if (!pair_encoders(output, num_mixes)) { return false; } } return true; }
static inline bool initialize_audio_encoders(obs_output_t *output, size_t num_mixes) { for (size_t i = 0; i < num_mixes; i++) { if (!obs_encoder_initialize(output->audio_encoders[i])) { return false; } } return true; }