Use AudioProcessingBuilder everywhere AudioProcessing is created.

The AudioProcessingBuilder was recently introduced in https://webrtc-review.googlesource.com/c/src/+/34651 to make it easier to create APM instances. This CL replaces all calls to the old Create methods with the new AudioProcessingBuilder.

Bug: webrtc:8668
Change-Id: Ibb5f0fc0dbcc85fcf3355b01bec916f20fe0eb67
Reviewed-on: https://webrtc-review.googlesource.com/36082
Commit-Queue: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21534}
diff --git a/call/call_perf_tests.cc b/call/call_perf_tests.cc
index f457546..8e734e9 100644
--- a/call/call_perf_tests.cc
+++ b/call/call_perf_tests.cc
@@ -193,7 +193,8 @@
     AudioState::Config send_audio_state_config;
     send_audio_state_config.voice_engine = voice_engine;
     send_audio_state_config.audio_mixer = AudioMixerImpl::Create();
-    send_audio_state_config.audio_processing = AudioProcessing::Create();
+    send_audio_state_config.audio_processing =
+        AudioProcessingBuilder().Create();
     send_audio_state_config.audio_device_module = fake_audio_device;
     Call::Config sender_config(event_log_.get());
 
diff --git a/media/engine/apm_helpers_unittest.cc b/media/engine/apm_helpers_unittest.cc
index e1139b2..bad24af 100644
--- a/media/engine/apm_helpers_unittest.cc
+++ b/media/engine/apm_helpers_unittest.cc
@@ -25,7 +25,8 @@
     // This replicates the conditions from voe_auto_test.
     Config config;
     config.Set<ExperimentalAgc>(new ExperimentalAgc(false));
-    apm_ = rtc::scoped_refptr<AudioProcessing>(AudioProcessing::Create(config));
+    apm_ = rtc::scoped_refptr<AudioProcessing>(
+        AudioProcessingBuilder().Create(config));
     apm_helpers::Init(apm());
   }
 
diff --git a/media/engine/nullwebrtcvideoengine_unittest.cc b/media/engine/nullwebrtcvideoengine_unittest.cc
index a53f773..6c740b8 100644
--- a/media/engine/nullwebrtcvideoengine_unittest.cc
+++ b/media/engine/nullwebrtcvideoengine_unittest.cc
@@ -32,7 +32,7 @@
                                   audio_encoder_factory,
                                   audio_decoder_factory,
                                   nullptr,
-                                  webrtc::AudioProcessing::Create()),
+                                  webrtc::AudioProcessingBuilder().Create()),
             std::forward_as_tuple()) {}
 };
 
diff --git a/media/engine/webrtcmediaengine.cc b/media/engine/webrtcmediaengine.cc
index 8d8b768..6c6464a 100644
--- a/media/engine/webrtcmediaengine.cc
+++ b/media/engine/webrtcmediaengine.cc
@@ -66,9 +66,10 @@
         audio_decoder_factory,
     WebRtcVideoEncoderFactory* video_encoder_factory,
     WebRtcVideoDecoderFactory* video_decoder_factory) {
-  return CreateWebRtcMediaEngine(
-      adm, audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
-      video_decoder_factory, nullptr, webrtc::AudioProcessing::Create());
+  return CreateWebRtcMediaEngine(adm, audio_encoder_factory,
+                                 audio_decoder_factory, video_encoder_factory,
+                                 video_decoder_factory, nullptr,
+                                 webrtc::AudioProcessingBuilder().Create());
 }
 
 MediaEngineInterface* WebRtcMediaEngineFactory::Create(
diff --git a/media/engine/webrtcvoiceengine_unittest.cc b/media/engine/webrtcvoiceengine_unittest.cc
index 5e661c7..ebf6e9e 100644
--- a/media/engine/webrtcvoiceengine_unittest.cc
+++ b/media/engine/webrtcvoiceengine_unittest.cc
@@ -3336,7 +3336,7 @@
   // we never want it to create a decoder at this stage.
   testing::NiceMock<webrtc::test::MockAudioDeviceModule> adm;
   rtc::scoped_refptr<webrtc::AudioProcessing> apm =
-      webrtc::AudioProcessing::Create();
+      webrtc::AudioProcessingBuilder().Create();
   cricket::WebRtcVoiceEngine engine(
       &adm, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
       webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
@@ -3359,7 +3359,7 @@
       .WillRepeatedly(Return(rtc::RefCountReleaseStatus::kDroppedLastRef));
   {
     rtc::scoped_refptr<webrtc::AudioProcessing> apm =
-        webrtc::AudioProcessing::Create();
+        webrtc::AudioProcessingBuilder().Create();
     cricket::WebRtcVoiceEngine engine(
         &adm, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
         webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
@@ -3380,7 +3380,7 @@
   // type assignments checked here? It shouldn't really matter.
   testing::NiceMock<webrtc::test::MockAudioDeviceModule> adm;
   rtc::scoped_refptr<webrtc::AudioProcessing> apm =
-      webrtc::AudioProcessing::Create();
+      webrtc::AudioProcessingBuilder().Create();
   cricket::WebRtcVoiceEngine engine(
       &adm, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
       webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
@@ -3425,7 +3425,7 @@
 TEST(WebRtcVoiceEngineTest, Has32Channels) {
   testing::NiceMock<webrtc::test::MockAudioDeviceModule> adm;
   rtc::scoped_refptr<webrtc::AudioProcessing> apm =
-      webrtc::AudioProcessing::Create();
+      webrtc::AudioProcessingBuilder().Create();
   cricket::WebRtcVoiceEngine engine(
       &adm, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
       webrtc::MockAudioDecoderFactory::CreateUnusedFactory(), nullptr, apm);
@@ -3463,7 +3463,7 @@
   // I think it will become clear once audio decoder injection is completed.
   testing::NiceMock<webrtc::test::MockAudioDeviceModule> adm;
   rtc::scoped_refptr<webrtc::AudioProcessing> apm =
-      webrtc::AudioProcessing::Create();
+      webrtc::AudioProcessingBuilder().Create();
   cricket::WebRtcVoiceEngine engine(
       &adm, webrtc::MockAudioEncoderFactory::CreateUnusedFactory(),
       webrtc::CreateBuiltinAudioDecoderFactory(), nullptr, apm);
@@ -3505,7 +3505,7 @@
   testing::NiceMock<webrtc::test::MockAudioDeviceModule> adm;
 
   rtc::scoped_refptr<webrtc::AudioProcessing> apm =
-      webrtc::AudioProcessing::Create();
+      webrtc::AudioProcessingBuilder().Create();
   cricket::WebRtcVoiceEngine engine(&adm, unused_encoder_factory,
                                     mock_decoder_factory, nullptr, apm);
   engine.Init();
diff --git a/modules/audio_mixer/frame_combiner.cc b/modules/audio_mixer/frame_combiner.cc
index 09faf56..7c671ec 100644
--- a/modules/audio_mixer/frame_combiner.cc
+++ b/modules/audio_mixer/frame_combiner.cc
@@ -138,7 +138,8 @@
   Config config;
   config.Set<ExperimentalAgc>(new ExperimentalAgc(false));
 
-  std::unique_ptr<AudioProcessing> limiter(AudioProcessing::Create(config));
+  std::unique_ptr<AudioProcessing> limiter(
+      AudioProcessingBuilder().Create(config));
   RTC_DCHECK(limiter);
 
   webrtc::AudioProcessing::Config apm_config;
diff --git a/modules/audio_processing/aec_dump/aec_dump_integration_test.cc b/modules/audio_processing/aec_dump/aec_dump_integration_test.cc
index 720e4f5..a7d53b5 100644
--- a/modules/audio_processing/aec_dump/aec_dump_integration_test.cc
+++ b/modules/audio_processing/aec_dump/aec_dump_integration_test.cc
@@ -24,7 +24,7 @@
 std::unique_ptr<webrtc::AudioProcessing> CreateAudioProcessing() {
   webrtc::Config config;
   std::unique_ptr<webrtc::AudioProcessing> apm(
-      webrtc::AudioProcessing::Create(config));
+      webrtc::AudioProcessingBuilder().Create(config));
   RTC_DCHECK(apm);
   return apm;
 }
diff --git a/modules/audio_processing/audio_processing_impl_locking_unittest.cc b/modules/audio_processing/audio_processing_impl_locking_unittest.cc
index 6c3bad5..d4cff45 100644
--- a/modules/audio_processing/audio_processing_impl_locking_unittest.cc
+++ b/modules/audio_processing/audio_processing_impl_locking_unittest.cc
@@ -496,7 +496,7 @@
       render_thread_(RenderProcessorThreadFunc, this, "render"),
       capture_thread_(CaptureProcessorThreadFunc, this, "capture"),
       stats_thread_(StatsProcessorThreadFunc, this, "stats"),
-      apm_(AudioProcessingImpl::Create()),
+      apm_(AudioProcessingBuilder().Create()),
       render_thread_state_(kMaxFrameSize,
                            &rand_gen_,
                            &render_call_event_,
diff --git a/modules/audio_processing/audio_processing_performance_unittest.cc b/modules/audio_processing/audio_processing_performance_unittest.cc
index ea01f24..8dd81b2 100644
--- a/modules/audio_processing/audio_processing_performance_unittest.cc
+++ b/modules/audio_processing/audio_processing_performance_unittest.cc
@@ -559,7 +559,7 @@
     int num_capture_channels = 1;
     switch (simulation_config_.simulation_settings) {
       case SettingsType::kDefaultApmMobile: {
-        apm_.reset(AudioProcessingImpl::Create());
+        apm_.reset(AudioProcessingBuilder().Create());
         ASSERT_TRUE(!!apm_);
         set_default_mobile_apm_runtime_settings(apm_.get());
         break;
@@ -567,7 +567,7 @@
       case SettingsType::kDefaultApmDesktop: {
         Config config;
         add_default_desktop_config(&config);
-        apm_.reset(AudioProcessingImpl::Create(config));
+        apm_.reset(AudioProcessingBuilder().Create(config));
         ASSERT_TRUE(!!apm_);
         set_default_desktop_apm_runtime_settings(apm_.get());
         apm_->SetExtraOptions(config);
@@ -577,7 +577,7 @@
         Config config;
         add_beamformer_config(&config);
         add_default_desktop_config(&config);
-        apm_.reset(AudioProcessingImpl::Create(config));
+        apm_.reset(AudioProcessingBuilder().Create(config));
         ASSERT_TRUE(!!apm_);
         set_default_desktop_apm_runtime_settings(apm_.get());
         apm_->SetExtraOptions(config);
@@ -588,14 +588,14 @@
         Config config;
         config.Set<Intelligibility>(new Intelligibility(true));
         add_default_desktop_config(&config);
-        apm_.reset(AudioProcessingImpl::Create(config));
+        apm_.reset(AudioProcessingBuilder().Create(config));
         ASSERT_TRUE(!!apm_);
         set_default_desktop_apm_runtime_settings(apm_.get());
         apm_->SetExtraOptions(config);
         break;
       }
       case SettingsType::kAllSubmodulesTurnedOff: {
-        apm_.reset(AudioProcessingImpl::Create());
+        apm_.reset(AudioProcessingBuilder().Create());
         ASSERT_TRUE(!!apm_);
         turn_off_default_apm_runtime_settings(apm_.get());
         break;
@@ -604,7 +604,7 @@
         Config config;
         config.Set<ExtendedFilter>(new ExtendedFilter(true));
         config.Set<DelayAgnostic>(new DelayAgnostic(false));
-        apm_.reset(AudioProcessingImpl::Create(config));
+        apm_.reset(AudioProcessingBuilder().Create(config));
         ASSERT_TRUE(!!apm_);
         set_default_desktop_apm_runtime_settings(apm_.get());
         apm_->SetExtraOptions(config);
@@ -614,7 +614,7 @@
         Config config;
         config.Set<ExtendedFilter>(new ExtendedFilter(false));
         config.Set<DelayAgnostic>(new DelayAgnostic(true));
-        apm_.reset(AudioProcessingImpl::Create(config));
+        apm_.reset(AudioProcessingBuilder().Create(config));
         ASSERT_TRUE(!!apm_);
         set_default_desktop_apm_runtime_settings(apm_.get());
         apm_->SetExtraOptions(config);
diff --git a/modules/audio_processing/audio_processing_unittest.cc b/modules/audio_processing/audio_processing_unittest.cc
index 335f836..a75037b 100644
--- a/modules/audio_processing/audio_processing_unittest.cc
+++ b/modules/audio_processing/audio_processing_unittest.cc
@@ -452,7 +452,7 @@
       out_file_(NULL) {
   Config config;
   config.Set<ExperimentalAgc>(new ExperimentalAgc(false));
-  apm_.reset(AudioProcessing::Create(config));
+  apm_.reset(AudioProcessingBuilder().Create(config));
 }
 
 void ApmTest::SetUp() {
@@ -1318,7 +1318,10 @@
   testing::NiceMock<MockNonlinearBeamformer>* beamformer =
       new testing::NiceMock<MockNonlinearBeamformer>(geometry, 1u);
   std::unique_ptr<AudioProcessing> apm(
-      AudioProcessing::Create(config, nullptr, nullptr, nullptr, beamformer));
+      AudioProcessingBuilder()
+          .SetNonlinearBeamformer(
+              std::unique_ptr<webrtc::NonlinearBeamformer>(beamformer))
+          .Create(config));
   EXPECT_EQ(kNoErr, apm->gain_control()->Enable(true));
   ChannelBuffer<float> src_buf(kSamplesPerChannel, kNumInputChannels);
   ChannelBuffer<float> dest_buf(kSamplesPerChannel, kNumOutputChannels);
@@ -1582,7 +1585,7 @@
   auto src_channels = &src[0];
   auto dest_channels = &dest[0];
 
-  apm_.reset(AudioProcessing::Create());
+  apm_.reset(AudioProcessingBuilder().Create());
   EXPECT_NOERR(apm_->ProcessStream(
       &src_channels, kSamples, sample_rate, LayoutFromChannels(1),
       sample_rate, LayoutFromChannels(1), &dest_channels));
@@ -1962,7 +1965,8 @@
 
   Config config;
   config.Set<ExperimentalAgc>(new ExperimentalAgc(false));
-  std::unique_ptr<AudioProcessing> fapm(AudioProcessing::Create(config));
+  std::unique_ptr<AudioProcessing> fapm(
+      AudioProcessingBuilder().Create(config));
   EnableAllComponents();
   EnableAllAPComponents(fapm.get());
   for (int i = 0; i < ref_data.test_size(); i++) {
@@ -2114,7 +2118,7 @@
     config.Set<ExperimentalAgc>(new ExperimentalAgc(false));
     config.Set<ExtendedFilter>(
         new ExtendedFilter(test->use_aec_extended_filter()));
-    apm_.reset(AudioProcessing::Create(config));
+    apm_.reset(AudioProcessingBuilder().Create(config));
 
     EnableAllComponents();
 
@@ -2329,7 +2333,7 @@
     {AudioProcessing::kStereoAndKeyboard, AudioProcessing::kStereo},
   };
 
-  std::unique_ptr<AudioProcessing> ap(AudioProcessing::Create());
+  std::unique_ptr<AudioProcessing> ap(AudioProcessingBuilder().Create());
   // Enable one component just to ensure some processing takes place.
   ap->noise_suppression()->Enable(true);
   for (size_t i = 0; i < arraysize(cf); ++i) {
@@ -2458,7 +2462,8 @@
                             const std::string& output_file_prefix) {
     Config config;
     config.Set<ExperimentalAgc>(new ExperimentalAgc(false));
-    std::unique_ptr<AudioProcessing> ap(AudioProcessing::Create(config));
+    std::unique_ptr<AudioProcessing> ap(
+        AudioProcessingBuilder().Create(config));
     EnableAllAPComponents(ap.get());
 
     ProcessingConfig processing_config = {
@@ -2935,8 +2940,10 @@
       new testing::NiceMock<test::MockCustomProcessing>();
   auto mock_pre_processor =
       std::unique_ptr<CustomProcessing>(mock_pre_processor_ptr);
-  rtc::scoped_refptr<AudioProcessing> apm = AudioProcessing::Create(
-      webrtc_config, nullptr, std::move(mock_pre_processor), nullptr, nullptr);
+  rtc::scoped_refptr<AudioProcessing> apm =
+      AudioProcessingBuilder()
+          .SetRenderPreProcessing(std::move(mock_pre_processor))
+          .Create(webrtc_config);
 
   AudioFrame audio;
   audio.num_channels_ = 1;
@@ -2982,7 +2989,8 @@
     old_config.Set<ExtendedFilter>(new ExtendedFilter(true));
     old_config.Set<DelayAgnostic>(new DelayAgnostic(true));
   }
-  std::unique_ptr<AudioProcessing> apm(AudioProcessing::Create(old_config));
+  std::unique_ptr<AudioProcessing> apm(
+      AudioProcessingBuilder().Create(old_config));
   if (!apm) {
     return apm;
   }
diff --git a/modules/audio_processing/echo_cancellation_impl_unittest.cc b/modules/audio_processing/echo_cancellation_impl_unittest.cc
index 2b9e5c5..ec30abc 100644
--- a/modules/audio_processing/echo_cancellation_impl_unittest.cc
+++ b/modules/audio_processing/echo_cancellation_impl_unittest.cc
@@ -17,7 +17,7 @@
 namespace webrtc {
 
 TEST(EchoCancellationInternalTest, ExtendedFilter) {
-  std::unique_ptr<AudioProcessing> ap(AudioProcessing::Create());
+  std::unique_ptr<AudioProcessing> ap(AudioProcessingBuilder().Create());
   EXPECT_TRUE(ap->echo_cancellation()->aec_core() == NULL);
 
   EXPECT_EQ(ap->kNoError, ap->echo_cancellation()->Enable(true));
@@ -47,7 +47,7 @@
 }
 
 TEST(EchoCancellationInternalTest, DelayAgnostic) {
-  std::unique_ptr<AudioProcessing> ap(AudioProcessing::Create());
+  std::unique_ptr<AudioProcessing> ap(AudioProcessingBuilder().Create());
   EXPECT_TRUE(ap->echo_cancellation()->aec_core() == NULL);
 
   EXPECT_EQ(ap->kNoError, ap->echo_cancellation()->Enable(true));
diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h
index 2e4fd0e..60bf0c7 100644
--- a/modules/audio_processing/include/audio_processing.h
+++ b/modules/audio_processing/include/audio_processing.h
@@ -112,7 +112,7 @@
 // microphone volume is set too low. The value is clamped to its operating range
 // [12, 255]. Here, 255 maps to 100%.
 //
-// Must be provided through AudioProcessing::Create(Confg&).
+// Must be provided through AudioProcessingBuilder().Create(config).
 #if defined(WEBRTC_CHROMIUM_BUILD)
 static const int kAgcStartupMinVolume = 85;
 #else
@@ -205,7 +205,7 @@
 // data.
 //
 // Usage example, omitting error checking:
-// AudioProcessing* apm = AudioProcessing::Create(0);
+// AudioProcessing* apm = AudioProcessingBuilder().Create();
 //
 // AudioProcessing::Config config;
 // config.level_controller.enabled = true;
diff --git a/modules/audio_processing/level_controller/level_controller_complexity_unittest.cc b/modules/audio_processing/level_controller/level_controller_complexity_unittest.cc
index 7d61cff..83f6725 100644
--- a/modules/audio_processing/level_controller/level_controller_complexity_unittest.cc
+++ b/modules/audio_processing/level_controller/level_controller_complexity_unittest.cc
@@ -86,7 +86,7 @@
   apm_config.residual_echo_detector.enabled = include_default_apm_processing;
 
   std::unique_ptr<AudioProcessing> apm;
-  apm.reset(AudioProcessing::Create(config));
+  apm.reset(AudioProcessingBuilder().Create(config));
   ASSERT_TRUE(apm.get());
   apm->ApplyConfig(apm_config);
 
diff --git a/modules/audio_processing/test/audio_processing_simulator.cc b/modules/audio_processing/test/audio_processing_simulator.cc
index 2477a1f..a72ac1c 100644
--- a/modules/audio_processing/test/audio_processing_simulator.cc
+++ b/modules/audio_processing/test/audio_processing_simulator.cc
@@ -348,8 +348,9 @@
     apm_config.residual_echo_detector.enabled = *settings_.use_ed;
   }
 
-  ap_.reset(AudioProcessing::Create(config, nullptr, nullptr,
-                                    std::move(echo_control_factory), nullptr));
+  ap_.reset(AudioProcessingBuilder()
+                .SetEchoControlFactory(std::move(echo_control_factory))
+                .Create(config));
   RTC_CHECK(ap_);
 
   ap_->ApplyConfig(apm_config);
diff --git a/modules/audio_processing/test/debug_dump_replayer.cc b/modules/audio_processing/test/debug_dump_replayer.cc
index a027d07..262f347 100644
--- a/modules/audio_processing/test/debug_dump_replayer.cc
+++ b/modules/audio_processing/test/debug_dump_replayer.cc
@@ -193,7 +193,7 @@
   // We only create APM once, since changes on these fields should not
   // happen in current implementation.
   if (!apm_.get()) {
-    apm_.reset(AudioProcessing::Create(config));
+    apm_.reset(AudioProcessingBuilder().Create(config));
   }
 }
 
diff --git a/modules/audio_processing/test/debug_dump_test.cc b/modules/audio_processing/test/debug_dump_test.cc
index b901fd0..69231b2 100644
--- a/modules/audio_processing/test/debug_dump_test.cc
+++ b/modules/audio_processing/test/debug_dump_test.cc
@@ -139,15 +139,14 @@
       output_(new ChannelBuffer<float>(output_config_.num_frames(),
                                        output_config_.num_channels())),
       worker_queue_("debug_dump_generator_worker_queue"),
-      apm_(AudioProcessing::Create(
-          config,
-          nullptr,
-          nullptr,
-          (enable_aec3 ? std::unique_ptr<EchoControlFactory>(
-                             new EchoCanceller3Factory())
-                       : nullptr),
-          nullptr)),
-      dump_file_name_(dump_file_name) {}
+      dump_file_name_(dump_file_name) {
+  AudioProcessingBuilder apm_builder;
+  if (enable_aec3) {
+    apm_builder.SetEchoControlFactory(
+        std::unique_ptr<EchoControlFactory>(new EchoCanceller3Factory()));
+  }
+  apm_.reset(apm_builder.Create(config));
+}
 
 DebugDumpGenerator::DebugDumpGenerator(
     const Config& config,
diff --git a/ortc/ortcfactory.cc b/ortc/ortcfactory.cc
index 7492dd4..c648985 100644
--- a/ortc/ortcfactory.cc
+++ b/ortc/ortcfactory.cc
@@ -562,7 +562,7 @@
   return std::unique_ptr<cricket::MediaEngineInterface>(
       cricket::WebRtcMediaEngineFactory::Create(
           adm_, audio_encoder_factory_, audio_decoder_factory_, nullptr,
-          nullptr, nullptr, webrtc::AudioProcessing::Create()));
+          nullptr, nullptr, webrtc::AudioProcessingBuilder().Create()));
 }
 
 }  // namespace webrtc
diff --git a/pc/createpeerconnectionfactory.cc b/pc/createpeerconnectionfactory.cc
index 8098ecf..3f389af 100644
--- a/pc/createpeerconnectionfactory.cc
+++ b/pc/createpeerconnectionfactory.cc
@@ -48,7 +48,7 @@
     rtc::scoped_refptr<AudioProcessing> audio_processing) {
   rtc::scoped_refptr<AudioProcessing> audio_processing_use = audio_processing;
   if (!audio_processing_use) {
-    audio_processing_use = AudioProcessing::Create();
+    audio_processing_use = AudioProcessingBuilder().Create();
   }
 
   std::unique_ptr<cricket::MediaEngineInterface> media_engine(
@@ -79,7 +79,7 @@
     rtc::scoped_refptr<AudioMixer> audio_mixer,
     rtc::scoped_refptr<AudioProcessing> audio_processing) {
   if (!audio_processing)
-    audio_processing = AudioProcessing::Create();
+    audio_processing = AudioProcessingBuilder().Create();
 
   std::unique_ptr<cricket::MediaEngineInterface> media_engine =
       cricket::WebRtcMediaEngineFactory::Create(
diff --git a/pc/peerconnection_jsep_unittest.cc b/pc/peerconnection_jsep_unittest.cc
index 5edd1a3..3ab8b5a 100644
--- a/pc/peerconnection_jsep_unittest.cc
+++ b/pc/peerconnection_jsep_unittest.cc
@@ -54,7 +54,7 @@
                 nullptr,
                 nullptr,
                 nullptr,
-                AudioProcessing::Create())),
+                AudioProcessingBuilder().Create())),
             CreateCallFactory(),
             nullptr) {}
 
diff --git a/pc/peerconnectioninterface_unittest.cc b/pc/peerconnectioninterface_unittest.cc
index d8e1761..bc6b5e5 100644
--- a/pc/peerconnectioninterface_unittest.cc
+++ b/pc/peerconnectioninterface_unittest.cc
@@ -551,7 +551,7 @@
         cricket::WebRtcMediaEngineFactory::Create(
             FakeAudioCaptureModule::Create(), audio_encoder_factory,
             audio_decoder_factory, nullptr, nullptr, nullptr,
-            webrtc::AudioProcessing::Create()));
+            webrtc::AudioProcessingBuilder().Create()));
 
     std::unique_ptr<webrtc::CallFactoryInterface> call_factory =
         webrtc::CreateCallFactory();
diff --git a/sdk/android/src/jni/pc/audio.cc b/sdk/android/src/jni/pc/audio.cc
index dc45bef..376c421 100644
--- a/sdk/android/src/jni/pc/audio.cc
+++ b/sdk/android/src/jni/pc/audio.cc
@@ -26,7 +26,7 @@
 }
 
 rtc::scoped_refptr<AudioProcessing> CreateAudioProcessing() {
-  return AudioProcessing::Create();
+  return AudioProcessingBuilder().Create();
 }
 
 }  // namespace jni
diff --git a/sdk/android/src/jni/pc/defaultaudioprocessingfactory.cc b/sdk/android/src/jni/pc/defaultaudioprocessingfactory.cc
index 071e218..ea5131c 100644
--- a/sdk/android/src/jni/pc/defaultaudioprocessingfactory.cc
+++ b/sdk/android/src/jni/pc/defaultaudioprocessingfactory.cc
@@ -25,10 +25,9 @@
   std::unique_ptr<CustomProcessing> post_processor(
       reinterpret_cast<CustomProcessing*>(native_post_processor));
   rtc::scoped_refptr<AudioProcessing> audio_processing =
-      AudioProcessing::Create(webrtc::Config(), std::move(post_processor),
-                              nullptr /* render_pre_processing */,
-                              nullptr /* echo_control_factory */,
-                              nullptr /* beamformer */);
+      AudioProcessingBuilder()
+          .SetCapturePostProcessing(std::move(post_processor))
+          .Create();
   return jlongFromPointer(audio_processing.release());
 }
 
diff --git a/test/call_test.cc b/test/call_test.cc
index d89d6eb..6f02149 100644
--- a/test/call_test.cc
+++ b/test/call_test.cc
@@ -65,8 +65,8 @@
       CreateFakeAudioDevices(test->CreateCapturer(), test->CreateRenderer());
       test->OnFakeAudioDevicesCreated(fake_send_audio_device_.get(),
                                       fake_recv_audio_device_.get());
-      apm_send_ = AudioProcessing::Create();
-      apm_recv_ = AudioProcessing::Create();
+      apm_send_ = AudioProcessingBuilder().Create();
+      apm_recv_ = AudioProcessingBuilder().Create();
       CreateVoiceEngines();
       AudioState::Config audio_state_config;
       audio_state_config.voice_engine = voe_send_.voice_engine;
diff --git a/test/fuzzers/audio_processing_fuzzer_configs.cc b/test/fuzzers/audio_processing_fuzzer_configs.cc
index 369aa5a..2e0a540 100644
--- a/test/fuzzers/audio_processing_fuzzer_configs.cc
+++ b/test/fuzzers/audio_processing_fuzzer_configs.cc
@@ -69,8 +69,10 @@
   config.Set<DelayAgnostic>(new DelayAgnostic(*da));
   config.Set<Intelligibility>(new Intelligibility(*ie));
 
-  std::unique_ptr<AudioProcessing> apm(AudioProcessing::Create(
-      config, nullptr, nullptr, std::move(echo_control_factory), nullptr));
+  std::unique_ptr<AudioProcessing> apm(
+      AudioProcessingBuilder()
+          .SetEchoControlFactory(std::move(echo_control_factory))
+          .Create(config));
 
   webrtc::AudioProcessing::Config apm_config;
   apm_config.residual_echo_detector.enabled = *red;
diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc
index f7ec413..2f76ce9 100644
--- a/video/video_quality_test.cc
+++ b/video/video_quality_test.cc
@@ -2096,7 +2096,7 @@
       AudioState::Config audio_state_config;
       audio_state_config.voice_engine = voe.voice_engine;
       audio_state_config.audio_mixer = AudioMixerImpl::Create();
-      audio_state_config.audio_processing = AudioProcessing::Create();
+      audio_state_config.audio_processing = AudioProcessingBuilder().Create();
       audio_state_config.audio_device_module = fake_audio_device;
       call_config.audio_state = AudioState::Create(audio_state_config);
       fake_audio_device->RegisterAudioCallback(