@@ -114,10 +114,14 @@ std::unique_ptr<VideoTrackSourceInterface> create_device_video_source(
114114std::unique_ptr<AudioDeviceModule> create_audio_device_module (
115115 Thread& worker_thread,
116116 AudioLayer audio_layer,
117- TaskQueueFactory& task_queue_factory) {
117+ TaskQueueFactory& task_queue_factory,
118+ const AudioProcessing& ap) {
118119 AudioDeviceModule adm = worker_thread.BlockingCall ([audio_layer,
119- &task_queue_factory] {
120- return ::OpenALAudioDeviceModule::Create (audio_layer, &task_queue_factory);
120+ &task_queue_factory,
121+ &ap] {
122+ return ::OpenALAudioDeviceModule::Create (audio_layer,
123+ &task_queue_factory,
124+ ap.get ());
121125 });
122126
123127 if (adm == nullptr ) {
@@ -249,9 +253,14 @@ int32_t set_audio_playout_device(const AudioDeviceModule& audio_device_module,
249253
250254// Calls `AudioProcessingBuilder().Create()`.
251255std::unique_ptr<AudioProcessing> create_audio_processing () {
252- auto ap = webrtc::AudioProcessingBuilder ().Create ();
256+ webrtc::AudioProcessing::Config apm_config;
257+ apm_config.echo_canceller .enabled = true ;
258+ apm_config.echo_canceller .mobile_mode = false ;
259+ apm_config.gain_controller1 .enabled = true ;
260+ apm_config.gain_controller1 .enable_limiter = true ;
253261
254- return std::make_unique<AudioProcessing>(ap);
262+ auto apm = webrtc::AudioProcessingBuilder ().SetConfig (apm_config).Create ();
263+ return std::make_unique<AudioProcessing>(apm);
255264}
256265
257266// Calls `AudioProcessing->set_output_will_be_muted()`.
@@ -346,7 +355,7 @@ void dispose_audio_source(const AudioDeviceModule& audio_device_module,
346355// Creates a new fake `AudioSource`.
347356std::unique_ptr<AudioSourceInterface> create_fake_audio_source () {
348357 return std::make_unique<AudioSourceInterface>(
349- bridge::LocalAudioSource::Create (cricket::AudioOptions ()));
358+ bridge::LocalAudioSource::Create (cricket::AudioOptions (), nullptr ));
350359}
351360
352361// Calls `PeerConnectionFactoryInterface->CreateVideoTrack`.
@@ -1161,4 +1170,37 @@ std::unique_ptr<std::string> display_source_title(const DisplaySource& source) {
11611170 return std::make_unique<std::string>(source.title );
11621171}
11631172
1173+ // Creates a new `AudioProcessingConfig`.
1174+ std::unique_ptr<AudioProcessingConfig> create_audio_processing_config () {
1175+ webrtc::AudioProcessing::Config apm_config;
1176+ apm_config.echo_canceller .enabled = true ;
1177+ apm_config.echo_canceller .mobile_mode = false ;
1178+ apm_config.gain_controller1 .enabled = true ;
1179+ apm_config.gain_controller1 .mode ==
1180+ webrtc::AudioProcessing::Config::GainController1::kAdaptiveDigital ;
1181+ apm_config.gain_controller1 .enable_limiter = true ;
1182+ return std::make_unique<AudioProcessingConfig>(apm_config);
1183+ }
1184+
1185+ // Enables/disables AGC (auto gain control) in the provided
1186+ // `AudioProcessingConfig`.
1187+ void config_gain_controller1_set_enabled (AudioProcessingConfig& config,
1188+ bool enabled) {
1189+ config.gain_controller1 .enabled = enabled;
1190+ config.gain_controller1 .analog_gain_controller .enabled = enabled;
1191+ }
1192+
1193+ // Returns `AudioProcessingConfig` of the provided `AudioProcessing`.
1194+ std::unique_ptr<AudioProcessingConfig> audio_processing_get_config (
1195+ const AudioProcessing& ap) {
1196+ return std::make_unique<AudioProcessingConfig>(ap->GetConfig ());
1197+ }
1198+
1199+ // Applies the provided `AudioProcessingConfig` to the provided
1200+ // `AudioProcessing`.
1201+ void audio_processing_apply_config (const AudioProcessing& ap,
1202+ const AudioProcessingConfig& config) {
1203+ ap->ApplyConfig (config);
1204+ }
1205+
11641206} // namespace bridge
0 commit comments