[PCLF] Add ability to provide audio processor and mixer
Bug: b/196034093 Change-Id: Ia444acfcf3f3c40e4a3affd61ed9c107470ef013 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/253880 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Sam Zackrisson <saza@webrtc.org> Commit-Queue: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/main@{#36148}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
e9126c18bf
commit
7e04b49bb8
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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<NetEqFactory> neteq_factory) = 0;
|
||||
virtual PeerConfigurer* SetAudioProcessing(
|
||||
rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing) = 0;
|
||||
virtual PeerConfigurer* SetAudioMixer(
|
||||
rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer) = 0;
|
||||
|
||||
// The parameters of the following 4 methods will be passed to the
|
||||
// PeerConnectionInterface implementation that will be created for this
|
||||
|
@ -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",
|
||||
]
|
||||
|
@ -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<webrtc::AudioProcessing> audio_processing) override {
|
||||
components_->pcf_dependencies->audio_processing = audio_processing;
|
||||
return this;
|
||||
}
|
||||
PeerConfigurer* SetAudioMixer(
|
||||
rtc::scoped_refptr<webrtc::AudioMixer> 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;
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include <vector>
|
||||
|
||||
#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<VideoDecoderFactory> video_decoder_factory;
|
||||
|
||||
std::unique_ptr<WebRtcKeyValueConfig> trials;
|
||||
|
||||
rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing;
|
||||
rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer;
|
||||
};
|
||||
|
||||
// Contains most parts from PeerConnectionDependencies. Also all fields are
|
||||
|
@ -167,12 +167,12 @@ rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceModule(
|
||||
|
||||
std::unique_ptr<cricket::MediaEngineInterface> CreateMediaEngine(
|
||||
PeerConnectionFactoryComponents* pcf_dependencies,
|
||||
rtc::scoped_refptr<AudioDeviceModule> audio_device_module,
|
||||
rtc::scoped_refptr<AudioProcessing> audio_processing) {
|
||||
rtc::scoped_refptr<AudioDeviceModule> 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<TestPeer> TestPeerFactory::CreateTestPeer(
|
||||
params->rtc_configuration.sdp_semantics = SdpSemantics::kUnifiedPlan;
|
||||
|
||||
// Create peer connection factory.
|
||||
rtc::scoped_refptr<AudioProcessing> audio_processing =
|
||||
if (components->pcf_dependencies->audio_processing == nullptr) {
|
||||
components->pcf_dependencies->audio_processing =
|
||||
webrtc::AudioProcessingBuilder().Create();
|
||||
if (params->aec_dump_path && audio_processing) {
|
||||
audio_processing->CreateAndAttachAecDump(*params->aec_dump_path, -1,
|
||||
task_queue_);
|
||||
}
|
||||
if (params->aec_dump_path) {
|
||||
components->pcf_dependencies->audio_processing->CreateAndAttachAecDump(
|
||||
*params->aec_dump_path, -1, task_queue_);
|
||||
}
|
||||
rtc::scoped_refptr<AudioDeviceModule> audio_device_module =
|
||||
CreateAudioDeviceModule(
|
||||
@ -333,11 +335,15 @@ std::unique_ptr<TestPeer> TestPeerFactory::CreateTestPeer(
|
||||
components->pcf_dependencies.get(),
|
||||
video_analyzer_helper_);
|
||||
std::unique_ptr<cricket::MediaEngineInterface> media_engine =
|
||||
CreateMediaEngine(components->pcf_dependencies.get(), audio_device_module,
|
||||
audio_processing);
|
||||
CreateMediaEngine(components->pcf_dependencies.get(),
|
||||
audio_device_module);
|
||||
|
||||
std::unique_ptr<rtc::Thread> worker_thread =
|
||||
time_controller_.CreateThread("worker_thread");
|
||||
// Store `webrtc::AudioProcessing` into local variable before move of
|
||||
// `components->pcf_dependencies`
|
||||
rtc::scoped_refptr<webrtc::AudioProcessing> 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);
|
||||
|
Reference in New Issue
Block a user