void obs_output_end_data_capture(obs_output_t *output) { bool encoded, has_video, has_audio, has_service; encoded_callback_t encoded_callback; if (!output) return; if (!output->active) return; convert_flags(output, 0, &encoded, &has_video, &has_audio, &has_service); if (encoded) { encoded_callback = (has_video && has_audio) ? interleave_packets : default_encoded_callback; if (has_video) obs_encoder_stop(output->video_encoder, encoded_callback, output); if (has_audio) stop_audio_encoders(output, encoded_callback); } else { if (has_video) video_output_disconnect(output->video, default_raw_video_callback, output); if (has_audio) audio_output_disconnect(output->audio, output->mixer_idx, default_raw_audio_callback, output); } if (has_service) obs_service_deactivate(output->service, false); output->active = false; }
static void remove_connection(struct obs_encoder *encoder) { if (encoder->info.type == OBS_ENCODER_AUDIO) audio_output_disconnect(encoder->media, encoder->mixer_idx, receive_audio, encoder); else video_output_disconnect(encoder->media, receive_video, encoder); encoder->active = false; }
void obs_output_end_data_capture(obs_output_t *output) { bool encoded, has_video, has_audio, has_service; encoded_callback_t encoded_callback; if (!obs_output_valid(output, "obs_output_end_data_capture")) return; if (output->delay_active) { output->delay_capturing = false; return; } if (!output->active) return; convert_flags(output, 0, &encoded, &has_video, &has_audio, &has_service); if (encoded) { if (output->active_delay_ns) encoded_callback = process_delay; else encoded_callback = (has_video && has_audio) ? interleave_packets : default_encoded_callback; if (has_video) obs_encoder_stop(output->video_encoder, encoded_callback, output); if (has_audio) stop_audio_encoders(output, encoded_callback); } else { if (has_video) video_output_disconnect(output->video, default_raw_video_callback, output); if (has_audio) audio_output_disconnect(output->audio, output->mixer_idx, default_raw_audio_callback, output); } if (has_service) obs_service_deactivate(output->service, false); if (output->active_delay_ns) obs_output_cleanup_delay(output); do_output_signal(output, "deactivate"); output->active = false; }
static void *end_data_capture_thread(void *data) { bool encoded, has_video, has_audio, has_service; encoded_callback_t encoded_callback; obs_output_t *output = data; convert_flags(output, 0, &encoded, &has_video, &has_audio, &has_service); if (encoded) { if (output->active_delay_ns) encoded_callback = process_delay; else encoded_callback = (has_video && has_audio) ? interleave_packets : default_encoded_callback; if (has_video) obs_encoder_stop(output->video_encoder, encoded_callback, output); if (has_audio) stop_audio_encoders(output, encoded_callback); } else { if (has_video) video_output_disconnect(output->video, default_raw_video_callback, output); if (has_audio) audio_output_disconnect(output->audio, output->mixer_idx, default_raw_audio_callback, output); } if (has_service) obs_service_deactivate(output->service, false); if (output->active_delay_ns) obs_output_cleanup_delay(output); do_output_signal(output, "deactivate"); os_atomic_set_bool(&output->active, false); os_event_signal(output->stopping_event); os_atomic_set_bool(&output->end_data_capture_thread_active, false); return NULL; }
void obs_output_end_data_capture(obs_output_t output) { bool encoded, has_video, has_audio, has_service; void (*encoded_callback)(void *data, struct encoder_packet *packet); void *param; if (!output) return; if (!output->active) return; convert_flags(output, 0, &encoded, &has_video, &has_audio, &has_service); if (encoded) { encoded_callback = (has_video && has_audio) ? interleave_packets : output->info.encoded_packet; param = (has_video && has_audio) ? output : output->context.data; if (has_video) obs_encoder_stop(output->video_encoder, encoded_callback, param); if (has_audio) obs_encoder_stop(output->audio_encoder, encoded_callback, param); } else { if (has_video) video_output_disconnect(output->video, output->info.raw_video, output->context.data); if (has_audio) audio_output_disconnect(output->audio, output->info.raw_audio, output->context.data); } if (has_service) obs_service_deactivate(output->service, false); output->active = false; }