diff --git a/modules/audio_coding/BUILD.gn b/modules/audio_coding/BUILD.gn index 20c55108d7..0f6fbeb960 100644 --- a/modules/audio_coding/BUILD.gn +++ b/modules/audio_coding/BUILD.gn @@ -1110,6 +1110,7 @@ if (rtc_include_tests) { ":neteq_test_support", ":neteq_test_tools", "../../api/audio_codecs/opus:audio_encoder_opus", + "../../api/environment:environment_factory", "../../api/test/metrics:global_metrics_logger_and_exporter", "../../api/test/metrics:metric", "../../rtc_base:macromagic", @@ -1200,6 +1201,7 @@ if (rtc_include_tests) { ":neteq_tools", "../../api/audio_codecs:audio_codecs_api", "../../api/audio_codecs/opus:audio_encoder_opus", + "../../api/environment:environment_factory", "../../common_audio", "../../rtc_base/system:arch", "../../test:fileutils", @@ -1398,6 +1400,7 @@ if (rtc_include_tests) { "../../api/audio_codecs/g722:audio_encoder_g722", "../../api/audio_codecs/ilbc:audio_encoder_ilbc", "../../api/audio_codecs/opus:audio_encoder_opus", + "../../api/environment:environment_factory", "../../rtc_base:safe_conversions", "//third_party/abseil-cpp/absl/flags:flag", "//third_party/abseil-cpp/absl/flags:parse", diff --git a/modules/audio_coding/acm2/audio_coding_module_unittest.cc b/modules/audio_coding/acm2/audio_coding_module_unittest.cc index 8eaa2bf0c1..90f7383292 100644 --- a/modules/audio_coding/acm2/audio_coding_module_unittest.cc +++ b/modules/audio_coding/acm2/audio_coding_module_unittest.cc @@ -940,7 +940,9 @@ TEST_F(AcmSenderBitExactnessNewApi, OpusFromFormat_stereo_20ms) { SdpAudioFormat("opus", 48000, 2, {{"stereo", "1"}})); ASSERT_TRUE(SetUpSender(kTestFileFakeStereo32kHz, 32000)); ASSERT_NO_FATAL_FAILURE(SetUpTestExternalEncoder( - AudioEncoderOpus::MakeAudioEncoder(*config, 120), 120)); + AudioEncoderOpus::MakeAudioEncoder(CreateEnvironment(), *config, + {.payload_type = 120}), + 120)); Run(audio_checksum, payload_checksum, /*expected_packets=*/50, /*expected_channels=*/test::AcmReceiveTestOldApi::kStereoOutput); } @@ -995,7 +997,9 @@ TEST_F(AcmSenderBitExactnessNewApi, OpusFromFormat_stereo_20ms_voip) { config->application = AudioEncoderOpusConfig::ApplicationMode::kVoip; ASSERT_TRUE(SetUpSender(kTestFileFakeStereo32kHz, 32000)); ASSERT_NO_FATAL_FAILURE(SetUpTestExternalEncoder( - AudioEncoderOpus::MakeAudioEncoder(*config, 120), 120)); + AudioEncoderOpus::MakeAudioEncoder(CreateEnvironment(), *config, + {.payload_type = 120}), + 120)); const std::string audio_maybe_sse = "cb644fc17d9666a0f5986eef24818159" "|4a74024473c7c729543c2790829b1e42"; @@ -1086,8 +1090,10 @@ TEST_F(AcmSetBitRateNewApi, OpusFromFormat_48khz_20ms_10kbps) { const auto config = AudioEncoderOpus::SdpToConfig( SdpAudioFormat("opus", 48000, 2, {{"maxaveragebitrate", "10000"}})); ASSERT_TRUE(SetUpSender()); - RegisterExternalSendCodec(AudioEncoderOpus::MakeAudioEncoder(*config, 107), - 107); + RegisterExternalSendCodec( + AudioEncoderOpus::MakeAudioEncoder(CreateEnvironment(), *config, + {.payload_type = 107}), + 107); RunInner(7000, 12000); } @@ -1095,8 +1101,10 @@ TEST_F(AcmSetBitRateNewApi, OpusFromFormat_48khz_20ms_50kbps) { const auto config = AudioEncoderOpus::SdpToConfig( SdpAudioFormat("opus", 48000, 2, {{"maxaveragebitrate", "50000"}})); ASSERT_TRUE(SetUpSender()); - RegisterExternalSendCodec(AudioEncoderOpus::MakeAudioEncoder(*config, 107), - 107); + RegisterExternalSendCodec( + AudioEncoderOpus::MakeAudioEncoder(CreateEnvironment(), *config, + {.payload_type = 107}), + 107); RunInner(40000, 60000); } @@ -1203,8 +1211,10 @@ TEST_F(AcmSetBitRateNewApi, MAYBE_OpusFromFormat_48khz_20ms_100kbps) { const auto config = AudioEncoderOpus::SdpToConfig( SdpAudioFormat("opus", 48000, 2, {{"maxaveragebitrate", "100000"}})); ASSERT_TRUE(SetUpSender()); - RegisterExternalSendCodec(AudioEncoderOpus::MakeAudioEncoder(*config, 107), - 107); + RegisterExternalSendCodec( + AudioEncoderOpus::MakeAudioEncoder(CreateEnvironment(), *config, + {.payload_type = 107}), + 107); RunInner(80000, 120000); } diff --git a/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc b/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc index 996bf53f03..b0bf204a17 100644 --- a/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc +++ b/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc @@ -674,8 +674,8 @@ TEST(AudioEncoderOpusTest, TestConfigFromInvalidParams) { TEST(AudioEncoderOpusTest, GetFrameLenghtRange) { AudioEncoderOpusConfig config = CreateConfigWithParameters({{"maxptime", "10"}, {"ptime", "10"}}); - std::unique_ptr encoder = - AudioEncoderOpus::MakeAudioEncoder(config, kDefaultOpusPayloadType); + std::unique_ptr encoder = AudioEncoderOpus::MakeAudioEncoder( + CreateEnvironment(), config, {.payload_type = kDefaultOpusPayloadType}); auto ptime = webrtc::TimeDelta::Millis(10); absl::optional> range = { {ptime, ptime}}; @@ -766,8 +766,8 @@ TEST_P(AudioEncoderOpusTest, OpusFlagDtxAsNonSpeech) { AudioEncoderOpusConfig config; config.dtx_enabled = true; config.sample_rate_hz = sample_rate_hz_; - constexpr int payload_type = 17; - const auto encoder = AudioEncoderOpus::MakeAudioEncoder(config, payload_type); + const auto encoder = AudioEncoderOpus::MakeAudioEncoder( + CreateEnvironment(), config, {.payload_type = 17}); // Open file containing speech and silence. const std::string kInputFileName = diff --git a/modules/audio_coding/codecs/opus/opus_bandwidth_unittest.cc b/modules/audio_coding/codecs/opus/opus_bandwidth_unittest.cc index 38b60c6187..423d389db2 100644 --- a/modules/audio_coding/codecs/opus/opus_bandwidth_unittest.cc +++ b/modules/audio_coding/codecs/opus/opus_bandwidth_unittest.cc @@ -10,11 +10,13 @@ #include "api/audio_codecs/opus/audio_decoder_opus.h" #include "api/audio_codecs/opus/audio_encoder_opus.h" +#include "api/environment/environment.h" +#include "api/environment/environment_factory.h" #include "common_audio/include/audio_util.h" #include "common_audio/window_generator.h" #include "modules/audio_coding/codecs/opus/test/lapped_transform.h" #include "modules/audio_coding/neteq/tools/audio_loop.h" -#include "test/field_trial.h" +#include "test/explicit_key_value_config.h" #include "test/gtest.h" #include "test/testsupport/file_utils.h" @@ -103,8 +105,9 @@ float EncodedPowerRatio(AudioEncoder* encoder, // TODO(ivoc): Remove this test, WebRTC-AdjustOpusBandwidth is obsolete. TEST(BandwidthAdaptationTest, BandwidthAdaptationTest) { - test::ScopedFieldTrials override_field_trials( - "WebRTC-AdjustOpusBandwidth/Enabled/"); + const Environment env = + CreateEnvironment(std::make_unique( + "WebRTC-AdjustOpusBandwidth/Enabled/")); constexpr float kMaxNarrowbandRatio = 0.0035f; constexpr float kMinWidebandRatio = 0.01f; @@ -113,8 +116,8 @@ TEST(BandwidthAdaptationTest, BandwidthAdaptationTest) { AudioEncoderOpusConfig enc_config; enc_config.bitrate_bps = absl::optional(7999); enc_config.num_channels = kNumChannels; - constexpr int payload_type = 17; - auto encoder = AudioEncoderOpus::MakeAudioEncoder(enc_config, payload_type); + auto encoder = + AudioEncoderOpus::MakeAudioEncoder(env, enc_config, {.payload_type = 17}); // Create decoder. AudioDecoderOpus::Config dec_config; diff --git a/modules/audio_coding/codecs/opus/opus_complexity_unittest.cc b/modules/audio_coding/codecs/opus/opus_complexity_unittest.cc index e8c131092c..d3bb5e7578 100644 --- a/modules/audio_coding/codecs/opus/opus_complexity_unittest.cc +++ b/modules/audio_coding/codecs/opus/opus_complexity_unittest.cc @@ -9,6 +9,7 @@ */ #include "api/audio_codecs/opus/audio_encoder_opus.h" +#include "api/environment/environment_factory.h" #include "api/test/metrics/global_metrics_logger_and_exporter.h" #include "api/test/metrics/metric.h" #include "modules/audio_coding/neteq/tools/audio_loop.h" @@ -23,10 +24,11 @@ using ::webrtc::test::GetGlobalMetricsLogger; using ::webrtc::test::ImprovementDirection; using ::webrtc::test::Unit; -int64_t RunComplexityTest(const AudioEncoderOpusConfig& config) { +int64_t RunComplexityTest(const Environment& env, + const AudioEncoderOpusConfig& config) { // Create encoder. - constexpr int payload_type = 17; - const auto encoder = AudioEncoderOpus::MakeAudioEncoder(config, payload_type); + const auto encoder = + AudioEncoderOpus::MakeAudioEncoder(env, config, {.payload_type = 17}); // Open speech file. const std::string kInputFileName = webrtc::test::ResourcePath("audio_coding/speech_mono_32_48kHz", "pcm"); @@ -63,16 +65,17 @@ int64_t RunComplexityTest(const AudioEncoderOpusConfig& config) { // be higher, since we have explicitly asked for a higher complexity setting at // the lower rate. TEST(AudioEncoderOpusComplexityAdaptationTest, Adaptation_On) { + const Environment env = CreateEnvironment(); // Create config. AudioEncoderOpusConfig config; // The limit -- including the hysteresis window -- at which the complexity // shuold be increased. config.bitrate_bps = 11000 - 1; config.low_rate_complexity = 9; - int64_t runtime_10999bps = RunComplexityTest(config); + int64_t runtime_10999bps = RunComplexityTest(env, config); config.bitrate_bps = 15500; - int64_t runtime_15500bps = RunComplexityTest(config); + int64_t runtime_15500bps = RunComplexityTest(env, config); GetGlobalMetricsLogger()->LogSingleValueMetric( "opus_encoding_complexity_ratio", "adaptation_on", @@ -84,16 +87,17 @@ TEST(AudioEncoderOpusComplexityAdaptationTest, Adaptation_On) { // adaptation enabled (neither on desktop, nor on mobile). The expectation is // that the resulting ratio is less than 100% at all times. TEST(AudioEncoderOpusComplexityAdaptationTest, Adaptation_Off) { + const Environment env = CreateEnvironment(); // Create config. AudioEncoderOpusConfig config; // The limit -- including the hysteresis window -- at which the complexity // shuold be increased (but not in this test since complexity adaptation is // disabled). config.bitrate_bps = 11000 - 1; - int64_t runtime_10999bps = RunComplexityTest(config); + int64_t runtime_10999bps = RunComplexityTest(env, config); config.bitrate_bps = 15500; - int64_t runtime_15500bps = RunComplexityTest(config); + int64_t runtime_15500bps = RunComplexityTest(env, config); GetGlobalMetricsLogger()->LogSingleValueMetric( "opus_encoding_complexity_ratio", "adaptation_off", diff --git a/modules/audio_coding/neteq/audio_decoder_unittest.cc b/modules/audio_coding/neteq/audio_decoder_unittest.cc index 7cb907cdbf..da2f496120 100644 --- a/modules/audio_coding/neteq/audio_decoder_unittest.cc +++ b/modules/audio_coding/neteq/audio_decoder_unittest.cc @@ -16,6 +16,7 @@ #include #include "api/audio_codecs/opus/audio_encoder_opus.h" +#include "api/environment/environment_factory.h" #include "modules/audio_coding/codecs/g711/audio_decoder_pcm.h" #include "modules/audio_coding/codecs/g711/audio_encoder_pcm.h" #include "modules/audio_coding/codecs/g722/audio_decoder_g722.h" @@ -392,7 +393,8 @@ class AudioDecoderOpusTest config.application = opus_num_channels_ == 1 ? AudioEncoderOpusConfig::ApplicationMode::kVoip : AudioEncoderOpusConfig::ApplicationMode::kAudio; - audio_encoder_ = AudioEncoderOpus::MakeAudioEncoder(config, payload_type_); + audio_encoder_ = AudioEncoderOpus::MakeAudioEncoder( + CreateEnvironment(), config, {.payload_type = payload_type_}); audio_encoder_->OnReceivedOverhead(kOverheadBytesPerPacket); } const int opus_sample_rate_hz_{std::get<0>(GetParam())}; diff --git a/modules/audio_coding/neteq/tools/rtp_encode.cc b/modules/audio_coding/neteq/tools/rtp_encode.cc index 0dfa8764b2..e6017094d8 100644 --- a/modules/audio_coding/neteq/tools/rtp_encode.cc +++ b/modules/audio_coding/neteq/tools/rtp_encode.cc @@ -31,6 +31,7 @@ #include "api/audio_codecs/g722/audio_encoder_g722.h" #include "api/audio_codecs/ilbc/audio_encoder_ilbc.h" #include "api/audio_codecs/opus/audio_encoder_opus.h" +#include "api/environment/environment_factory.h" #include "modules/audio_coding/codecs/cng/audio_encoder_cng.h" #include "modules/audio_coding/include/audio_coding_module.h" #include "modules/audio_coding/neteq/tools/input_audio_file.h" @@ -206,7 +207,8 @@ std::unique_ptr CreateEncoder(CodecType codec_type, config.dtx_enabled = absl::GetFlag(FLAGS_dtx); config.fec_enabled = absl::GetFlag(FLAGS_fec); RTC_CHECK(config.IsOk()); - return AudioEncoderOpus::MakeAudioEncoder(config, payload_type); + return AudioEncoderOpus::MakeAudioEncoder(CreateEnvironment(), config, + {.payload_type = payload_type}); } case CodecType::kPcmU: diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn index 1785740f89..16c7917909 100644 --- a/test/fuzzers/BUILD.gn +++ b/test/fuzzers/BUILD.gn @@ -383,6 +383,8 @@ webrtc_fuzzer_test("audio_encoder_opus_fuzzer") { deps = [ ":audio_encoder_fuzzer", "../../api/audio_codecs/opus:audio_encoder_opus", + "../../api/environment", + "../../api/environment:environment_factory", "../../rtc_base:checks", ] } diff --git a/test/fuzzers/audio_encoder_opus_fuzzer.cc b/test/fuzzers/audio_encoder_opus_fuzzer.cc index d67e6d6067..9e88da328b 100644 --- a/test/fuzzers/audio_encoder_opus_fuzzer.cc +++ b/test/fuzzers/audio_encoder_opus_fuzzer.cc @@ -9,19 +9,26 @@ */ #include "api/audio_codecs/opus/audio_encoder_opus.h" +#include "api/environment/environment.h" +#include "api/environment/environment_factory.h" #include "rtc_base/checks.h" #include "test/fuzzers/audio_encoder_fuzzer.h" namespace webrtc { void FuzzOneInput(const uint8_t* data, size_t size) { + // Create Environment once because creating it for each input noticably + // reduces the speed of the fuzzer. + static const Environment* const env = new Environment(CreateEnvironment()); + AudioEncoderOpus::Config config; config.frame_size_ms = 20; RTC_CHECK(config.IsOk()); - constexpr int kPayloadType = 100; + FuzzAudioEncoder( /*data_view=*/{data, size}, - /*encoder=*/AudioEncoderOpus::MakeAudioEncoder(config, kPayloadType)); + /*encoder=*/AudioEncoderOpus::MakeAudioEncoder(*env, config, + {.payload_type = 100})); } } // namespace webrtc