From fb3e571ce8592c080f9a9d346c76e361b96bb531 Mon Sep 17 00:00:00 2001 From: Ruwen Hahn Date: Tue, 18 Jun 2024 15:12:57 +0200 Subject: [PATCH] UI: Use advanced mode audio track in multitrack video output --- UI/multitrack-video-output.cpp | 16 +++++++++------- UI/multitrack-video-output.hpp | 1 + UI/window-basic-main-outputs.cpp | 20 ++++++++++++-------- UI/window-basic-main-outputs.hpp | 7 +++---- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/UI/multitrack-video-output.cpp b/UI/multitrack-video-output.cpp index 0d8a31d7c..d9888a2c5 100644 --- a/UI/multitrack-video-output.cpp +++ b/UI/multitrack-video-output.cpp @@ -335,7 +335,7 @@ SetupOBSOutput(obs_data_t *dump_stream_to_file_config, const GoLiveApi::Config &go_live_config, std::vector &audio_encoders, std::shared_ptr &video_encoder_group, - const char *audio_encoder_id, + const char *audio_encoder_id, size_t main_audio_mixer, std::optional vod_track_mixer); static void SetupSignalHandlers(bool recording, MultitrackVideoOutput *self, obs_output_t *output, OBSSignal &start, @@ -348,7 +348,7 @@ void MultitrackVideoOutput::PrepareStreaming( std::optional maximum_aggregate_bitrate, std::optional maximum_video_tracks, std::optional custom_config, - obs_data_t *dump_stream_to_file_config, + obs_data_t *dump_stream_to_file_config, size_t main_audio_mixer, std::optional vod_track_mixer) { { @@ -467,7 +467,8 @@ void MultitrackVideoOutput::PrepareStreaming( std::shared_ptr video_encoder_group; auto outputs = SetupOBSOutput(dump_stream_to_file_config, output_config, audio_encoders, video_encoder_group, - audio_encoder_id, vod_track_mixer); + audio_encoder_id, main_audio_mixer, + vod_track_mixer); auto output = std::move(outputs.output); auto recording_output = std::move(outputs.recording_output); if (!output) @@ -728,7 +729,7 @@ static void create_audio_encoders(const GoLiveApi::Config &go_live_config, std::vector &audio_encoders, obs_output_t *output, obs_output_t *recording_output, - const char *audio_encoder_id, + const char *audio_encoder_id, size_t main_audio_mixer, std::optional vod_track_mixer) { using encoder_configs_type = @@ -768,7 +769,8 @@ create_audio_encoders(const GoLiveApi::Config &go_live_config, }; create_encoders("multitrack video live audio", - go_live_config.audio_configurations.live, 0); + go_live_config.audio_configurations.live, + main_audio_mixer); if (!vod_track_mixer.has_value()) return; @@ -787,7 +789,7 @@ SetupOBSOutput(obs_data_t *dump_stream_to_file_config, const GoLiveApi::Config &go_live_config, std::vector &audio_encoders, std::shared_ptr &video_encoder_group, - const char *audio_encoder_id, + const char *audio_encoder_id, size_t main_audio_mixer, std::optional vod_track_mixer) { @@ -803,7 +805,7 @@ SetupOBSOutput(obs_data_t *dump_stream_to_file_config, create_audio_encoders(go_live_config, audio_encoders, output, recording_output, audio_encoder_id, - vod_track_mixer); + main_audio_mixer, vod_track_mixer); return {std::move(output), std::move(recording_output)}; } diff --git a/UI/multitrack-video-output.hpp b/UI/multitrack-video-output.hpp index 01f67c171..83aa48e18 100644 --- a/UI/multitrack-video-output.hpp +++ b/UI/multitrack-video-output.hpp @@ -35,6 +35,7 @@ public: std::optional maximum_video_tracks, std::optional custom_config, obs_data_t *dump_stream_to_file_config, + size_t main_audio_mixer, std::optional vod_track_mixer); signal_handler_t *StreamingSignalHandler(); void StartedStreaming(); diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index fc1a760db..3bf83e1d5 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1138,7 +1138,7 @@ FutureHolder SimpleOutput::SetupStreaming(obs_service_t *service) : std::nullopt; auto holder = SetupMultitrackVideo( - service, GetSimpleAACEncoderForBitrate(audio_bitrate), + service, GetSimpleAACEncoderForBitrate(audio_bitrate), 0, vod_track_mixer); auto future = PreventFutureDeadlock(holder.future) @@ -2286,9 +2286,13 @@ FutureHolder AdvancedOutput::SetupStreaming(obs_service_t *service) const char *audio_encoder_id = config_get_string(main->Config(), "AdvOut", "AudioEncoder"); + int streamTrackIndex = + config_get_int(main->Config(), "AdvOut", "TrackIndex"); - auto holder = SetupMultitrackVideo(service, audio_encoder_id, - VodTrackMixerIdx(service)); + auto holder = + SetupMultitrackVideo(service, audio_encoder_id, + static_cast(streamTrackIndex), + VodTrackMixerIdx(service)); auto future = PreventFutureDeadlock(holder.future) .then(main, [&](std::optional @@ -2701,10 +2705,9 @@ std::string BasicOutputHandler::GetRecordingFilename( extern std::string DeserializeConfigText(const char *text); -FutureHolder> -BasicOutputHandler::SetupMultitrackVideo(obs_service_t *service, - std::string audio_encoder_id, - std::optional vod_track_mixer) +FutureHolder> BasicOutputHandler::SetupMultitrackVideo( + obs_service_t *service, std::string audio_encoder_id, + size_t main_audio_mixer, std::optional vod_track_mixer) { if (!multitrackVideo) return {[] {}, CreateFuture().then([] { @@ -2784,7 +2787,8 @@ BasicOutputHandler::SetupMultitrackVideo(obs_service_t *service, audio_encoder_id.c_str(), maximum_aggregate_bitrate, maximum_video_tracks, custom_config, - stream_dump_config, vod_track_mixer); + stream_dump_config, main_audio_mixer, + vod_track_mixer); } catch (const MultitrackVideoError &error) { return error; } diff --git a/UI/window-basic-main-outputs.hpp b/UI/window-basic-main-outputs.hpp index 5dd86df46..abf40d66f 100644 --- a/UI/window-basic-main-outputs.hpp +++ b/UI/window-basic-main-outputs.hpp @@ -98,10 +98,9 @@ protected: bool overwrite, const char *format, bool ffmpeg); - FutureHolder> - SetupMultitrackVideo(obs_service_t *service, - std::string audio_encoder_id, - std::optional vod_track_mixer); + FutureHolder> SetupMultitrackVideo( + obs_service_t *service, std::string audio_encoder_id, + size_t main_audio_mixer, std::optional vod_track_mixer); OBSDataAutoRelease GenerateMultitrackVideoStreamDumpConfig(); };