diff --git a/modules/audio_coding/BUILD.gn b/modules/audio_coding/BUILD.gn index 3511b8ffed..573e7af58a 100644 --- a/modules/audio_coding/BUILD.gn +++ b/modules/audio_coding/BUILD.gn @@ -1018,28 +1018,32 @@ if (rtc_include_tests) { visibility += webrtc_default_visibility defines = audio_codec_defines deps = [ + ":neteq", ":neteq_input_audio_tools", + ":neteq_test_tools", ":neteq_tools", ":neteq_tools_minimal", + "../../api:make_ref_counted", + "../../api:rtp_headers", + "../../api:scoped_refptr", + "../../api/audio_codecs:audio_codecs_api", + "../../api/audio_codecs:builtin_audio_decoder_factory", + "../../api/environment:environment", + "../../api/neteq:neteq_api", + "../../logging:rtc_event_log_parser", "../../rtc_base:checks", "../../rtc_base:refcount", + "../../test:audio_test_common", + "../../test:field_trial", "../../test:fileutils", + "../../test:test_support", + "../rtp_rtcp:rtp_rtcp_format", "//third_party/abseil-cpp/absl/strings:string_view", ] sources = [ "neteq/tools/neteq_test_factory.cc", "neteq/tools/neteq_test_factory.h", ] - - deps += [ - ":neteq", - ":neteq_test_tools", - "../../api/audio_codecs:builtin_audio_decoder_factory", - "../../api/neteq:neteq_api", - "../../test:audio_test_common", - "../../test:field_trial", - "../../test:test_support", - ] } } @@ -1052,6 +1056,7 @@ if (rtc_include_tests) { ":neteq_test_factory", ":neteq_test_tools", ":neteq_tools_minimal", + "../../rtc_base:checks", "../../rtc_base:stringutils", "../../system_wrappers:field_trial", "../../test:field_trial", diff --git a/modules/audio_coding/neteq/tools/neteq_rtpplay.cc b/modules/audio_coding/neteq/tools/neteq_rtpplay.cc index a4a8ef1bbe..eb7075737b 100644 --- a/modules/audio_coding/neteq/tools/neteq_rtpplay.cc +++ b/modules/audio_coding/neteq/tools/neteq_rtpplay.cc @@ -8,18 +8,26 @@ * be found in the AUTHORS file in the root of the source tree. */ +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include #include "absl/flags/flag.h" #include "absl/flags/parse.h" #include "absl/strings/string_view.h" #include "modules/audio_coding/neteq/tools/neteq_test.h" #include "modules/audio_coding/neteq/tools/neteq_test_factory.h" +#include "rtc_base/checks.h" #include "rtc_base/strings/string_builder.h" #include "system_wrappers/include/field_trial.h" -#include "test/field_trial.h" using TestConfig = webrtc::test::NetEqTestFactory::Config; @@ -78,7 +86,11 @@ ABSL_FLAG(int, ABSL_FLAG(int, red, TestConfig::default_red(), - "RTP payload type for redundant audio (RED)"); + "RTP payload type for redundant audio (RED, 8kHz)"); +ABSL_FLAG(int, + opus_red, + TestConfig::default_opus_red(), + "RTP payload type for redundant audio (RED, 48kHz)"); ABSL_FLAG(int, cn_nb, TestConfig::default_cn_nb(), @@ -225,7 +237,10 @@ void PrintCodecMapping() { PrintCodecMappingEntry("AVT/DTMF (16 kHz)", absl::GetFlag(FLAGS_avt_16)); PrintCodecMappingEntry("AVT/DTMF (32 kHz)", absl::GetFlag(FLAGS_avt_32)); PrintCodecMappingEntry("AVT/DTMF (48 kHz)", absl::GetFlag(FLAGS_avt_48)); - PrintCodecMappingEntry("redundant audio (RED)", absl::GetFlag(FLAGS_red)); + PrintCodecMappingEntry("redundant audio (RED 8khz)", + absl::GetFlag(FLAGS_red)); + PrintCodecMappingEntry("redundant audio (RED 48khz)", + absl::GetFlag(FLAGS_opus_red)); PrintCodecMappingEntry("comfort noise (8 kHz)", absl::GetFlag(FLAGS_cn_nb)); PrintCodecMappingEntry("comfort noise (16 kHz)", absl::GetFlag(FLAGS_cn_wb)); PrintCodecMappingEntry("comfort noise (32 kHz)", @@ -325,6 +340,7 @@ int main(int argc, char* argv[]) { RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_avt_32))); RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_avt_48))); RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_red))); + RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_opus_red))); RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_cn_nb))); RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_cn_wb))); RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_cn_swb32))); @@ -358,6 +374,7 @@ int main(int argc, char* argv[]) { config.avt_32 = absl::GetFlag(FLAGS_avt_32); config.avt_48 = absl::GetFlag(FLAGS_avt_48); config.red = absl::GetFlag(FLAGS_red); + config.opus_red = absl::GetFlag(FLAGS_opus_red); config.cn_nb = absl::GetFlag(FLAGS_cn_nb); config.cn_wb = absl::GetFlag(FLAGS_cn_wb); config.cn_swb32 = absl::GetFlag(FLAGS_cn_swb32); diff --git a/modules/audio_coding/neteq/tools/neteq_test_factory.cc b/modules/audio_coding/neteq/tools/neteq_test_factory.cc index 909a5351e4..969590924a 100644 --- a/modules/audio_coding/neteq/tools/neteq_test_factory.cc +++ b/modules/audio_coding/neteq/tools/neteq_test_factory.cc @@ -10,27 +10,39 @@ #include "modules/audio_coding/neteq/tools/neteq_test_factory.h" -#include #include // For ULONG_MAX returned by strtoul. #include #include // For strtoul. +#include #include #include +#include #include +#include #include #include #include #include "absl/strings/string_view.h" +#include "api/audio_codecs/audio_codec_pair_id.h" +#include "api/audio_codecs/audio_decoder.h" +#include "api/audio_codecs/audio_decoder_factory.h" +#include "api/audio_codecs/audio_format.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" +#include "api/environment/environment.h" +#include "api/make_ref_counted.h" #include "api/neteq/neteq.h" +#include "api/neteq/neteq_factory.h" +#include "api/rtp_headers.h" +#include "api/scoped_refptr.h" +#include "logging/rtc_event_log/rtc_event_log_parser.h" #include "modules/audio_coding/neteq/tools/audio_sink.h" #include "modules/audio_coding/neteq/tools/fake_decode_from_file.h" #include "modules/audio_coding/neteq/tools/initial_packet_inserter_neteq_input.h" #include "modules/audio_coding/neteq/tools/input_audio_file.h" -#include "modules/audio_coding/neteq/tools/neteq_delay_analyzer.h" #include "modules/audio_coding/neteq/tools/neteq_event_log_input.h" +#include "modules/audio_coding/neteq/tools/neteq_input.h" #include "modules/audio_coding/neteq/tools/neteq_replacement_input.h" #include "modules/audio_coding/neteq/tools/neteq_rtp_dump_input.h" #include "modules/audio_coding/neteq/tools/neteq_stats_getter.h" @@ -39,6 +51,7 @@ #include "modules/audio_coding/neteq/tools/output_audio_file.h" #include "modules/audio_coding/neteq/tools/output_wav_file.h" #include "modules/audio_coding/neteq/tools/rtp_file_source.h" +#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "rtc_base/checks.h" #include "test/function_audio_decoder_factory.h" #include "test/testsupport/file_utils.h" @@ -62,7 +75,8 @@ std::optional CodecSampleRate( payload_type == config.cn_swb32 || payload_type == config.avt_32) return 32000; if (payload_type == config.opus || payload_type == config.pcm16b_swb48 || - payload_type == config.cn_swb48 || payload_type == config.avt_48) + payload_type == config.cn_swb48 || payload_type == config.avt_48 || + payload_type == config.opus_red) return 48000; if (payload_type == config.red) return 0; @@ -284,9 +298,9 @@ std::unique_ptr NetEqTestFactory::InitializeTest( std::set cn_types = std_set_int32_to_uint8( {config.cn_nb, config.cn_wb, config.cn_swb32, config.cn_swb48}); - std::set forbidden_types = - std_set_int32_to_uint8({config.g722, config.red, config.avt, - config.avt_16, config.avt_32, config.avt_48}); + std::set forbidden_types = std_set_int32_to_uint8( + {config.g722, config.red, config.opus_red, config.avt, config.avt_16, + config.avt_32, config.avt_48}); input.reset(new NetEqReplacementInput(std::move(input), replacement_pt, cn_types, forbidden_types)); diff --git a/modules/audio_coding/neteq/tools/neteq_test_factory.h b/modules/audio_coding/neteq/tools/neteq_test_factory.h index f991591c10..c7564fa718 100644 --- a/modules/audio_coding/neteq/tools/neteq_test_factory.h +++ b/modules/audio_coding/neteq/tools/neteq_test_factory.h @@ -11,11 +11,14 @@ #ifndef MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_FACTORY_H_ #define MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_FACTORY_H_ +#include #include #include #include #include "absl/strings/string_view.h" +#include "api/neteq/neteq_factory.h" +#include "modules/audio_coding/neteq/tools/neteq_input.h" #include "modules/audio_coding/neteq/tools/neteq_test.h" namespace webrtc { @@ -80,6 +83,9 @@ class NetEqTestFactory { // RTP payload type for redundant audio (RED). static constexpr int default_red() { return 117; } int red = default_red(); + + static constexpr int default_opus_red() { return 63; } + int opus_red = default_opus_red(); // RTP payload type for comfort noise (8 kHz). static constexpr int default_cn_nb() { return 13; } int cn_nb = default_cn_nb();