diff --git a/api/BUILD.gn b/api/BUILD.gn index 9d9bf55b8b..f8a6532866 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -445,8 +445,10 @@ rtc_source_set("peer_connection_quality_test_fixture_api") { ":track_id_stream_info_map", ":video_quality_analyzer_api", "../media:rtc_media_base", + "../modules/audio_processing:api", "../rtc_base:rtc_base", "../rtc_base:threading", + "audio:audio_mixer_api", "rtc_event_log", "task_queue", "transport:network_control", diff --git a/api/test/DEPS b/api/test/DEPS index 6c3a9ebed1..48889d528f 100644 --- a/api/test/DEPS +++ b/api/test/DEPS @@ -27,6 +27,7 @@ specific_include_rules = { "+rtc_base/ssl_certificate.h", "+rtc_base/thread.h", "+media/base/media_constants.h", + "+modules/audio_processing/include/audio_processing.h", ], "time_controller\.h": [ "+modules/utility/include/process_thread.h", diff --git a/api/test/peerconnection_quality_test_fixture.h b/api/test/peerconnection_quality_test_fixture.h index 1bd2eb2635..434a3a643f 100644 --- a/api/test/peerconnection_quality_test_fixture.h +++ b/api/test/peerconnection_quality_test_fixture.h @@ -20,6 +20,7 @@ #include "absl/strings/string_view.h" #include "absl/types/optional.h" #include "api/async_resolver_factory.h" +#include "api/audio/audio_mixer.h" #include "api/call/call_factory_interface.h" #include "api/fec_controller.h" #include "api/function_view.h" @@ -41,6 +42,7 @@ #include "api/video_codecs/video_encoder.h" #include "api/video_codecs/video_encoder_factory.h" #include "media/base/media_constants.h" +#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/network.h" #include "rtc_base/rtc_certificate_generator.h" #include "rtc_base/ssl_certificate.h" @@ -357,6 +359,10 @@ class PeerConnectionE2EQualityTestFixture { // Set a custom NetEqFactory to be used in the call. virtual PeerConfigurer* SetNetEqFactory( std::unique_ptr neteq_factory) = 0; + virtual PeerConfigurer* SetAudioProcessing( + rtc::scoped_refptr audio_processing) = 0; + virtual PeerConfigurer* SetAudioMixer( + rtc::scoped_refptr audio_mixer) = 0; // The parameters of the following 4 methods will be passed to the // PeerConnectionInterface implementation that will be created for this diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn index 4e4b6bfda3..37cf51b6b7 100644 --- a/test/pc/e2e/BUILD.gn +++ b/test/pc/e2e/BUILD.gn @@ -55,11 +55,13 @@ if (!build_with_chromium) { "../../../api:libjingle_peerconnection_api", "../../../api:packet_socket_factory", "../../../api:peer_connection_quality_test_fixture_api", + "../../../api/audio:audio_mixer_api", "../../../api/rtc_event_log", "../../../api/task_queue", "../../../api/transport:network_control", "../../../api/transport:webrtc_key_value_config", "../../../api/video_codecs:video_codecs_api", + "../../../modules/audio_processing:api", "../../../p2p:rtc_p2p", "../../../rtc_base", "../../../rtc_base:threading", @@ -313,10 +315,12 @@ if (!build_with_chromium) { "../../../api:fec_controller_api", "../../../api:packet_socket_factory", "../../../api:peer_connection_quality_test_fixture_api", + "../../../api/audio:audio_mixer_api", "../../../api/rtc_event_log", "../../../api/task_queue", "../../../api/transport:network_control", "../../../api/video_codecs:video_codecs_api", + "../../../modules/audio_processing:api", "../../../rtc_base", "../../../rtc_base:threading", ] diff --git a/test/pc/e2e/peer_configurer.h b/test/pc/e2e/peer_configurer.h index 33ad5ebd12..27133e494d 100644 --- a/test/pc/e2e/peer_configurer.h +++ b/test/pc/e2e/peer_configurer.h @@ -17,6 +17,7 @@ #include "absl/strings/string_view.h" #include "api/async_resolver_factory.h" +#include "api/audio/audio_mixer.h" #include "api/call/call_factory_interface.h" #include "api/fec_controller.h" #include "api/rtc_event_log/rtc_event_log_factory_interface.h" @@ -26,6 +27,7 @@ #include "api/transport/network_control.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" +#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/network.h" #include "rtc_base/rtc_certificate_generator.h" #include "rtc_base/ssl_certificate.h" @@ -165,6 +167,16 @@ class PeerConfigurerImpl final components_->pcf_dependencies->neteq_factory = std::move(neteq_factory); return this; } + PeerConfigurer* SetAudioProcessing( + rtc::scoped_refptr audio_processing) override { + components_->pcf_dependencies->audio_processing = audio_processing; + return this; + } + PeerConfigurer* SetAudioMixer( + rtc::scoped_refptr audio_mixer) override { + components_->pcf_dependencies->audio_mixer = audio_mixer; + return this; + } PeerConfigurer* SetRtcEventLogPath(std::string path) override { params_->rtc_event_log_path = std::move(path); return this; diff --git a/test/pc/e2e/peer_connection_quality_test_params.h b/test/pc/e2e/peer_connection_quality_test_params.h index 93fa8c11b9..fae231c653 100644 --- a/test/pc/e2e/peer_connection_quality_test_params.h +++ b/test/pc/e2e/peer_connection_quality_test_params.h @@ -15,6 +15,7 @@ #include #include "api/async_resolver_factory.h" +#include "api/audio/audio_mixer.h" #include "api/call/call_factory_interface.h" #include "api/fec_controller.h" #include "api/rtc_event_log/rtc_event_log_factory_interface.h" @@ -24,6 +25,7 @@ #include "api/transport/webrtc_key_value_config.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" +#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/port_allocator.h" #include "rtc_base/network.h" #include "rtc_base/rtc_certificate_generator.h" @@ -56,6 +58,9 @@ struct PeerConnectionFactoryComponents { std::unique_ptr video_decoder_factory; std::unique_ptr trials; + + rtc::scoped_refptr audio_processing; + rtc::scoped_refptr audio_mixer; }; // Contains most parts from PeerConnectionDependencies. Also all fields are diff --git a/test/pc/e2e/test_peer_factory.cc b/test/pc/e2e/test_peer_factory.cc index 119c8e114f..29a4c6a8f2 100644 --- a/test/pc/e2e/test_peer_factory.cc +++ b/test/pc/e2e/test_peer_factory.cc @@ -167,12 +167,12 @@ rtc::scoped_refptr CreateAudioDeviceModule( std::unique_ptr CreateMediaEngine( PeerConnectionFactoryComponents* pcf_dependencies, - rtc::scoped_refptr audio_device_module, - rtc::scoped_refptr audio_processing) { + rtc::scoped_refptr audio_device_module) { cricket::MediaEngineDependencies media_deps; media_deps.task_queue_factory = pcf_dependencies->task_queue_factory.get(); media_deps.adm = audio_device_module; - media_deps.audio_processing = audio_processing; + media_deps.audio_processing = pcf_dependencies->audio_processing; + media_deps.audio_mixer = pcf_dependencies->audio_mixer; media_deps.video_encoder_factory = std::move(pcf_dependencies->video_encoder_factory); media_deps.video_decoder_factory = @@ -315,11 +315,13 @@ std::unique_ptr TestPeerFactory::CreateTestPeer( params->rtc_configuration.sdp_semantics = SdpSemantics::kUnifiedPlan; // Create peer connection factory. - rtc::scoped_refptr audio_processing = - webrtc::AudioProcessingBuilder().Create(); - if (params->aec_dump_path && audio_processing) { - audio_processing->CreateAndAttachAecDump(*params->aec_dump_path, -1, - task_queue_); + if (components->pcf_dependencies->audio_processing == nullptr) { + components->pcf_dependencies->audio_processing = + webrtc::AudioProcessingBuilder().Create(); + } + if (params->aec_dump_path) { + components->pcf_dependencies->audio_processing->CreateAndAttachAecDump( + *params->aec_dump_path, -1, task_queue_); } rtc::scoped_refptr audio_device_module = CreateAudioDeviceModule( @@ -333,11 +335,15 @@ std::unique_ptr TestPeerFactory::CreateTestPeer( components->pcf_dependencies.get(), video_analyzer_helper_); std::unique_ptr media_engine = - CreateMediaEngine(components->pcf_dependencies.get(), audio_device_module, - audio_processing); + CreateMediaEngine(components->pcf_dependencies.get(), + audio_device_module); std::unique_ptr worker_thread = time_controller_.CreateThread("worker_thread"); + // Store `webrtc::AudioProcessing` into local variable before move of + // `components->pcf_dependencies` + rtc::scoped_refptr audio_processing = + components->pcf_dependencies->audio_processing; PeerConnectionFactoryDependencies pcf_deps = CreatePCFDependencies( std::move(components->pcf_dependencies), std::move(media_engine), signaling_thread_, worker_thread.get(), components->network_thread);