diff --git a/call/BUILD.gn b/call/BUILD.gn index ab93575312..6ce4327475 100644 --- a/call/BUILD.gn +++ b/call/BUILD.gn @@ -661,6 +661,7 @@ if (rtc_include_tests) { "../api:simulated_network_api", "../api/audio:audio_device", "../api/audio:audio_processing", + "../api/audio:builtin_audio_processing_builder", "../api/audio_codecs:builtin_audio_encoder_factory", "../api/environment", "../api/numerics", diff --git a/call/call_perf_tests.cc b/call/call_perf_tests.cc index 6ec41fef89..58c578d045 100644 --- a/call/call_perf_tests.cc +++ b/call/call_perf_tests.cc @@ -24,7 +24,7 @@ #include "absl/strings/string_view.h" #include "api/array_view.h" #include "api/audio/audio_device.h" -#include "api/audio/audio_processing.h" +#include "api/audio/builtin_audio_processing_builder.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/environment/environment.h" #include "api/field_trials_view.h" @@ -246,7 +246,7 @@ void CallPerfTest::TestAudioVideoSync(FecMode fec, AudioState::Config send_audio_state_config; send_audio_state_config.audio_mixer = AudioMixerImpl::Create(); send_audio_state_config.audio_processing = - AudioProcessingBuilder().Create(); + BuiltinAudioProcessingBuilder().Build(env()); send_audio_state_config.audio_device_module = fake_audio_device; CallConfig sender_config = SendCallConfig(); diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn index e4bb0c7aff..03a63bb6c0 100644 --- a/modules/audio_processing/BUILD.gn +++ b/modules/audio_processing/BUILD.gn @@ -349,6 +349,7 @@ if (rtc_include_tests) { "../../api/audio:audio_processing", "../../api/audio:builtin_audio_processing_builder", "../../api/audio:echo_detector_creator", + "../../api/environment", "../../api/environment:environment_factory", "../../common_audio", "../../common_audio:common_audio_c", diff --git a/modules/audio_processing/audio_processing_impl_unittest.cc b/modules/audio_processing/audio_processing_impl_unittest.cc index cebc60aeaa..d4503389fd 100644 --- a/modules/audio_processing/audio_processing_impl_unittest.cc +++ b/modules/audio_processing/audio_processing_impl_unittest.cc @@ -18,6 +18,7 @@ #include "api/audio/audio_processing.h" #include "api/audio/builtin_audio_processing_builder.h" +#include "api/environment/environment.h" #include "api/environment/environment_factory.h" #include "api/make_ref_counted.h" #include "api/scoped_refptr.h" @@ -644,7 +645,7 @@ TEST_P(StartupInputVolumeParameterizedTest, webrtc::AudioProcessing::Config config; config.gain_controller1.enabled = false; config.gain_controller2.enabled = false; - auto apm = AudioProcessingBuilder().SetConfig(config).Create(); + auto apm = BuiltinAudioProcessingBuilder(config).Build(CreateEnvironment()); int startup_volume = GetParam(); int recommended_volume = ProcessInputVolume( @@ -663,7 +664,7 @@ TEST(AudioProcessingImplTest, webrtc::AudioProcessing::Config config; config.gain_controller1.enabled = false; config.gain_controller2.enabled = false; - auto apm = AudioProcessingBuilder().SetConfig(config).Create(); + auto apm = BuiltinAudioProcessingBuilder(config).Build(CreateEnvironment()); Random rand_gen(42); for (int i = 0; i < 32; ++i) { @@ -708,7 +709,8 @@ class ApmInputVolumeControllerParametrizedTest TEST_P(ApmInputVolumeControllerParametrizedTest, EnforceMinInputVolumeAtStartupWithZeroVolume) { const StreamConfig stream_config(sample_rate_hz(), num_channels()); - auto apm = AudioProcessingBuilder().SetConfig(GetConfig()).Create(); + auto apm = + BuiltinAudioProcessingBuilder(GetConfig()).Build(CreateEnvironment()); apm->set_stream_analog_level(0); apm->ProcessStream(channel_pointers(), stream_config, stream_config, @@ -719,7 +721,8 @@ TEST_P(ApmInputVolumeControllerParametrizedTest, TEST_P(ApmInputVolumeControllerParametrizedTest, EnforceMinInputVolumeAtStartupWithNonZeroVolume) { const StreamConfig stream_config(sample_rate_hz(), num_channels()); - auto apm = AudioProcessingBuilder().SetConfig(GetConfig()).Create(); + auto apm = + BuiltinAudioProcessingBuilder(GetConfig()).Build(CreateEnvironment()); constexpr int kStartupVolume = 3; apm->set_stream_analog_level(kStartupVolume); @@ -737,7 +740,8 @@ TEST_P(ApmInputVolumeControllerParametrizedTest, GTEST_SKIP() << "Does not apply to AGC1"; } const StreamConfig stream_config(sample_rate_hz(), num_channels()); - auto apm = AudioProcessingBuilder().SetConfig(GetConfig()).Create(); + auto apm = + BuiltinAudioProcessingBuilder(GetConfig()).Build(CreateEnvironment()); apm->set_stream_analog_level(20); apm->ProcessStream(channel_pointers(), stream_config, stream_config, @@ -752,7 +756,8 @@ TEST_P(ApmInputVolumeControllerParametrizedTest, TEST_P(ApmInputVolumeControllerParametrizedTest, DoNotEnforceMinInputVolumeAtStartupWithHighVolume) { const StreamConfig stream_config(sample_rate_hz(), num_channels()); - auto apm = AudioProcessingBuilder().SetConfig(GetConfig()).Create(); + auto apm = + BuiltinAudioProcessingBuilder(GetConfig()).Build(CreateEnvironment()); constexpr int kStartupVolume = 200; apm->set_stream_analog_level(kStartupVolume); @@ -764,7 +769,8 @@ TEST_P(ApmInputVolumeControllerParametrizedTest, TEST_P(ApmInputVolumeControllerParametrizedTest, DoNotEnforceMinInputVolumeAfterManualVolumeAdjustmentToZero) { const StreamConfig stream_config(sample_rate_hz(), num_channels()); - auto apm = AudioProcessingBuilder().SetConfig(GetConfig()).Create(); + auto apm = + BuiltinAudioProcessingBuilder(GetConfig()).Build(CreateEnvironment()); apm->set_stream_analog_level(100); apm->ProcessStream(channel_pointers(), stream_config, stream_config, @@ -802,10 +808,10 @@ INSTANTIATE_TEST_SUITE_P( // active, the recommended volume must always be the applied volume. TEST(AudioProcessingImplTest, RecommendAppliedInputVolumeWithNoAgcWithNoEmulation) { - auto apm = AudioProcessingBuilder() - .SetConfig({.capture_level_adjustment = {.enabled = false}, - .gain_controller1 = {.enabled = false}}) - .Create(); + auto apm = BuiltinAudioProcessingBuilder( + {.capture_level_adjustment = {.enabled = false}, + .gain_controller1 = {.enabled = false}}) + .Build(CreateEnvironment()); constexpr int kOneFrame = 1; EXPECT_EQ(ProcessInputVolume(*apm, kOneFrame, /*initial_volume=*/123), 123); @@ -819,14 +825,13 @@ TEST(AudioProcessingImplTest, // TODO(bugs.webrtc.org/14581): Enable when APM fixed to let this test pass. TEST(AudioProcessingImplTest, DISABLED_RecommendAppliedInputVolumeWithNoAgcWithEmulation) { - auto apm = - AudioProcessingBuilder() - .SetConfig({.capture_level_adjustment = {.enabled = true, - .analog_mic_gain_emulation{ - .enabled = true, - .initial_level = 255}}, - .gain_controller1 = {.enabled = false}}) - .Create(); + auto apm = BuiltinAudioProcessingBuilder( + {.capture_level_adjustment = {.enabled = true, + .analog_mic_gain_emulation{ + .enabled = true, + .initial_level = 255}}, + .gain_controller1 = {.enabled = false}}) + .Build(CreateEnvironment()); constexpr int kOneFrame = 1; EXPECT_EQ(ProcessInputVolume(*apm, kOneFrame, /*initial_volume=*/123), 123); @@ -841,16 +846,15 @@ TEST(AudioProcessingImplTest, // TODO(bugs.webrtc.org/14581): Enable when APM fixed to let this test pass. TEST(AudioProcessingImplTest, DISABLED_RecommendAppliedInputVolumeWithAgcWithEmulation) { - auto apm = - AudioProcessingBuilder() - .SetConfig({.capture_level_adjustment = {.enabled = true, - .analog_mic_gain_emulation{ - .enabled = true}}, - .gain_controller1 = {.enabled = true, - .analog_gain_controller{ - .enabled = true, - }}}) - .Create(); + auto apm = BuiltinAudioProcessingBuilder( + {.capture_level_adjustment = {.enabled = true, + .analog_mic_gain_emulation{ + .enabled = true}}, + .gain_controller1 = {.enabled = true, + .analog_gain_controller{ + .enabled = true, + }}}) + .Build(CreateEnvironment()); constexpr int kOneFrame = 1; EXPECT_EQ(ProcessInputVolume(*apm, kOneFrame, /*initial_volume=*/123), 123); @@ -862,7 +866,8 @@ class Agc2ParametrizedTest : public ::testing::TestWithParam {}; TEST_P(Agc2ParametrizedTest, ProcessSucceedsWhenOneAgcEnabled) { - auto apm = AudioProcessingBuilder().SetConfig(GetParam()).Create(); + auto apm = + BuiltinAudioProcessingBuilder(GetParam()).Build(CreateEnvironment()); constexpr int kSampleRateHz = 48000; constexpr int kNumChannels = 1; std::array buffer; @@ -884,16 +889,17 @@ TEST_P(Agc2ParametrizedTest, ProcessSucceedsWhenOneAgcEnabled) { TEST_P(Agc2ParametrizedTest, BitExactWithAndWithoutTransientSuppressionEnabledInConfig) { + const Environment env = CreateEnvironment(); // Enable transient suppression in the config (expect no effect). auto config = GetParam(); config.transient_suppression.enabled = true; - auto apm = AudioProcessingBuilder().SetConfig(config).Create(); + auto apm = BuiltinAudioProcessingBuilder(config).Build(env); ASSERT_EQ(apm->Initialize(), AudioProcessing::kNoError); // Disable transient suppression in the config. auto config_reference = GetParam(); config_reference.transient_suppression.enabled = false; auto apm_reference = - AudioProcessingBuilder().SetConfig(config_reference).Create(); + BuiltinAudioProcessingBuilder(config_reference).Build(env); ASSERT_EQ(apm_reference->Initialize(), AudioProcessing::kNoError); constexpr int kSampleRateHz = 16000; diff --git a/test/BUILD.gn b/test/BUILD.gn index ed210b327b..d5a5314f0e 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -1248,6 +1248,7 @@ if (!build_with_chromium) { "../api:simulated_network_api", "../api:transport_api", "../api/audio:audio_device", + "../api/audio:builtin_audio_processing_builder", "../api/audio_codecs:builtin_audio_decoder_factory", "../api/audio_codecs:builtin_audio_encoder_factory", "../api/environment", diff --git a/test/call_test.cc b/test/call_test.cc index bee23d6109..76246e034f 100644 --- a/test/call_test.cc +++ b/test/call_test.cc @@ -14,6 +14,7 @@ #include #include "api/audio/audio_device.h" +#include "api/audio/builtin_audio_processing_builder.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/environment/environment.h" @@ -111,13 +112,14 @@ void CallTest::RunBaseTest(BaseTest* test) { num_flexfec_streams_ = test->GetNumFlexfecStreams(); RTC_DCHECK(num_video_streams_ > 0 || num_audio_streams_ > 0); CallConfig send_config = SendCallConfig(); + CallConfig recv_config = RecvCallConfig(); test->ModifySenderBitrateConfig(&send_config.bitrate_config); if (num_audio_streams_ > 0) { CreateFakeAudioDevices(test->CreateCapturer(), test->CreateRenderer()); test->OnFakeAudioDevicesCreated(fake_send_audio_device_.get(), fake_recv_audio_device_.get()); - apm_send_ = AudioProcessingBuilder().Create(); - apm_recv_ = AudioProcessingBuilder().Create(); + apm_send_ = BuiltinAudioProcessingBuilder().Build(send_config.env); + apm_recv_ = BuiltinAudioProcessingBuilder().Build(recv_config.env); EXPECT_EQ(0, fake_send_audio_device_->Init()); EXPECT_EQ(0, fake_recv_audio_device_->Init()); AudioState::Config audio_state_config; @@ -130,7 +132,6 @@ void CallTest::RunBaseTest(BaseTest* test) { } CreateSenderCall(std::move(send_config)); if (test->ShouldCreateReceivers()) { - CallConfig recv_config = RecvCallConfig(); test->ModifyReceiverBitrateConfig(&recv_config.bitrate_config); if (num_audio_streams_ > 0) { AudioState::Config audio_state_config; diff --git a/test/scenario/BUILD.gn b/test/scenario/BUILD.gn index 49b0739baf..5b7f9a64a6 100644 --- a/test/scenario/BUILD.gn +++ b/test/scenario/BUILD.gn @@ -89,6 +89,7 @@ if (rtc_include_tests && !build_with_chromium) { "../../api:time_controller", "../../api:transport_api", "../../api/audio:audio_device", + "../../api/audio:builtin_audio_processing_builder", "../../api/audio_codecs:builtin_audio_decoder_factory", "../../api/audio_codecs:builtin_audio_encoder_factory", "../../api/environment", diff --git a/test/scenario/call_client.cc b/test/scenario/call_client.cc index 607f3daaa6..b58ae71d4b 100644 --- a/test/scenario/call_client.cc +++ b/test/scenario/call_client.cc @@ -13,6 +13,7 @@ #include #include +#include "api/audio/builtin_audio_processing_builder.h" #include "api/environment/environment.h" #include "api/environment/environment_factory.h" #include "api/media_types.h" @@ -42,14 +43,13 @@ const uint32_t kReceiverLocalAudioSsrc = 0x1234567; constexpr int kEventLogOutputIntervalMs = 5000; -CallClientFakeAudio InitAudio(TimeController* time_controller) { +CallClientFakeAudio InitAudio(const Environment& env) { CallClientFakeAudio setup; auto capturer = TestAudioDeviceModule::CreatePulsedNoiseCapturer(256, 48000); auto renderer = TestAudioDeviceModule::CreateDiscardRenderer(48000); setup.fake_audio_device = TestAudioDeviceModule::Create( - time_controller->GetTaskQueueFactory(), std::move(capturer), - std::move(renderer), 1.f); - setup.apm = AudioProcessingBuilder().Create(); + &env.task_queue_factory(), std::move(capturer), std::move(renderer), 1.f); + setup.apm = BuiltinAudioProcessingBuilder().Build(env); setup.fake_audio_device->Init(); AudioState::Config audio_state_config; audio_state_config.audio_mixer = AudioMixerImpl::Create(); @@ -223,7 +223,7 @@ CallClient::CallClient( env_factory.Set(CreateEventLog(env_, *log_writer_factory_)); env_ = env_factory.Create(); } - fake_audio_setup_ = InitAudio(time_controller_); + fake_audio_setup_ = InitAudio(env_); call_ = CreateCall(env_, config, &network_controller_factory_, fake_audio_setup_.audio_state); diff --git a/video/BUILD.gn b/video/BUILD.gn index c1473a56fa..83780db703 100644 --- a/video/BUILD.gn +++ b/video/BUILD.gn @@ -520,6 +520,7 @@ if (rtc_include_tests) { "../api:test_dependency_factory", "../api:video_quality_test_fixture_api", "../api/audio:audio_device", + "../api/audio:builtin_audio_processing_builder", "../api/environment", "../api/numerics", "../api/rtc_event_log:rtc_event_log_factory", diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc index 824f088126..7d148f6caf 100644 --- a/video/video_quality_test.cc +++ b/video/video_quality_test.cc @@ -23,6 +23,7 @@ #include #include "api/audio/audio_device.h" +#include "api/audio/builtin_audio_processing_builder.h" #include "api/fec_controller_override.h" #include "api/rtc_event_log_output_file.h" #include "api/task_queue/default_task_queue_factory.h" @@ -1371,7 +1372,8 @@ void VideoQualityTest::InitializeAudioDevice(CallConfig* send_call_config, AudioState::Config audio_state_config; audio_state_config.audio_mixer = AudioMixerImpl::Create(); - audio_state_config.audio_processing = AudioProcessingBuilder().Create(); + audio_state_config.audio_processing = + BuiltinAudioProcessingBuilder().Build(send_call_config->env); audio_state_config.audio_device_module = audio_device; send_call_config->audio_state = AudioState::Create(audio_state_config); recv_call_config->audio_state = AudioState::Create(audio_state_config); diff --git a/webrtc_lib_link_test.cc b/webrtc_lib_link_test.cc index e3a7a7ba34..c65f153173 100644 --- a/webrtc_lib_link_test.cc +++ b/webrtc_lib_link_test.cc @@ -10,6 +10,7 @@ #include "api/audio/audio_device.h" #include "api/audio/audio_processing.h" +#include "api/audio/builtin_audio_processing_builder.h" #include "api/audio_codecs/audio_decoder_factory_template.h" #include "api/audio_codecs/audio_encoder_factory_template.h" #include "api/audio_codecs/opus/audio_decoder_opus.h" @@ -48,7 +49,8 @@ void CreateSomeMediaDeps(PeerConnectionFactoryDependencies& media_deps) { std::make_unique>(); - media_deps.audio_processing = webrtc::AudioProcessingBuilder().Create(); + media_deps.audio_processing_builder = + std::make_unique(); } webrtc::PeerConnectionFactoryDependencies CreateSomePcfDeps() {