/* * Copyright (c) 2020 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef TEST_PC_E2E_TEST_PEER_FACTORY_H_ #define TEST_PC_E2E_TEST_PEER_FACTORY_H_ #include #include #include #include #include "absl/strings/string_view.h" #include "api/rtc_event_log/rtc_event_log_factory.h" #include "api/test/peerconnection_quality_test_fixture.h" #include "api/test/time_controller.h" #include "modules/audio_device/include/test_audio_device.h" #include "rtc_base/task_queue.h" #include "test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.h" #include "test/pc/e2e/peer_configurer.h" #include "test/pc/e2e/peer_connection_quality_test_params.h" #include "test/pc/e2e/test_peer.h" namespace webrtc { namespace webrtc_pc_e2e { struct RemotePeerAudioConfig { explicit RemotePeerAudioConfig( PeerConnectionE2EQualityTestFixture::AudioConfig config) : sampling_frequency_in_hz(config.sampling_frequency_in_hz), output_file_name(config.output_dump_file_name) {} static absl::optional Create( absl::optional config); int sampling_frequency_in_hz; absl::optional output_file_name; }; class TestPeerFactory { public: // Creates a test peer factory. // |signaling_thread| will be used as a signaling thread for all peers created // by this factory. // |time_controller| will be used to create required threads, task queue // factories and call factory. // |video_analyzer_helper| will be used to setup video quality analysis for // created peers. // |task_queue| will be used for AEC dump if it is requested. TestPeerFactory(rtc::Thread* signaling_thread, TimeController& time_controller, VideoQualityAnalyzerInjectionHelper* video_analyzer_helper, rtc::TaskQueue* task_queue) : signaling_thread_(signaling_thread), time_controller_(time_controller), video_analyzer_helper_(video_analyzer_helper), task_queue_(task_queue) {} // Setups all components, that should be provided to WebRTC // PeerConnectionFactory and PeerConnection creation methods, // also will setup dependencies, that are required for media analyzers // injection. std::unique_ptr CreateTestPeer( std::unique_ptr configurer, std::unique_ptr observer, absl::optional remote_audio_config, double bitrate_multiplier, absl::optional echo_emulation_config); private: rtc::Thread* signaling_thread_; TimeController& time_controller_; VideoQualityAnalyzerInjectionHelper* video_analyzer_helper_; rtc::TaskQueue* task_queue_; }; } // namespace webrtc_pc_e2e } // namespace webrtc #endif // TEST_PC_E2E_TEST_PEER_FACTORY_H_