Support opus red in neteq_rtpplay
BUG=webrtc:42221750 Change-Id: I6fc92c454cbe17865c8ef69f1e9fca084493ebfe Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/373642 Commit-Queue: Philipp Hancke <phancke@meta.com> Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org> Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org> Cr-Commit-Position: refs/heads/main@{#43687}
This commit is contained in:
parent
59b1d32c35
commit
d7b4c56d57
@ -1018,28 +1018,32 @@ if (rtc_include_tests) {
|
|||||||
visibility += webrtc_default_visibility
|
visibility += webrtc_default_visibility
|
||||||
defines = audio_codec_defines
|
defines = audio_codec_defines
|
||||||
deps = [
|
deps = [
|
||||||
|
":neteq",
|
||||||
":neteq_input_audio_tools",
|
":neteq_input_audio_tools",
|
||||||
|
":neteq_test_tools",
|
||||||
":neteq_tools",
|
":neteq_tools",
|
||||||
":neteq_tools_minimal",
|
":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:checks",
|
||||||
"../../rtc_base:refcount",
|
"../../rtc_base:refcount",
|
||||||
|
"../../test:audio_test_common",
|
||||||
|
"../../test:field_trial",
|
||||||
"../../test:fileutils",
|
"../../test:fileutils",
|
||||||
|
"../../test:test_support",
|
||||||
|
"../rtp_rtcp:rtp_rtcp_format",
|
||||||
"//third_party/abseil-cpp/absl/strings:string_view",
|
"//third_party/abseil-cpp/absl/strings:string_view",
|
||||||
]
|
]
|
||||||
sources = [
|
sources = [
|
||||||
"neteq/tools/neteq_test_factory.cc",
|
"neteq/tools/neteq_test_factory.cc",
|
||||||
"neteq/tools/neteq_test_factory.h",
|
"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_factory",
|
||||||
":neteq_test_tools",
|
":neteq_test_tools",
|
||||||
":neteq_tools_minimal",
|
":neteq_tools_minimal",
|
||||||
|
"../../rtc_base:checks",
|
||||||
"../../rtc_base:stringutils",
|
"../../rtc_base:stringutils",
|
||||||
"../../system_wrappers:field_trial",
|
"../../system_wrappers:field_trial",
|
||||||
"../../test:field_trial",
|
"../../test:field_trial",
|
||||||
|
|||||||
@ -8,18 +8,26 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <cerrno>
|
||||||
|
#include <climits>
|
||||||
|
#include <cstddef>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "absl/flags/flag.h"
|
#include "absl/flags/flag.h"
|
||||||
#include "absl/flags/parse.h"
|
#include "absl/flags/parse.h"
|
||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
#include "modules/audio_coding/neteq/tools/neteq_test.h"
|
#include "modules/audio_coding/neteq/tools/neteq_test.h"
|
||||||
#include "modules/audio_coding/neteq/tools/neteq_test_factory.h"
|
#include "modules/audio_coding/neteq/tools/neteq_test_factory.h"
|
||||||
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/strings/string_builder.h"
|
#include "rtc_base/strings/string_builder.h"
|
||||||
#include "system_wrappers/include/field_trial.h"
|
#include "system_wrappers/include/field_trial.h"
|
||||||
#include "test/field_trial.h"
|
|
||||||
|
|
||||||
using TestConfig = webrtc::test::NetEqTestFactory::Config;
|
using TestConfig = webrtc::test::NetEqTestFactory::Config;
|
||||||
|
|
||||||
@ -78,7 +86,11 @@ ABSL_FLAG(int,
|
|||||||
ABSL_FLAG(int,
|
ABSL_FLAG(int,
|
||||||
red,
|
red,
|
||||||
TestConfig::default_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,
|
ABSL_FLAG(int,
|
||||||
cn_nb,
|
cn_nb,
|
||||||
TestConfig::default_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 (16 kHz)", absl::GetFlag(FLAGS_avt_16));
|
||||||
PrintCodecMappingEntry("AVT/DTMF (32 kHz)", absl::GetFlag(FLAGS_avt_32));
|
PrintCodecMappingEntry("AVT/DTMF (32 kHz)", absl::GetFlag(FLAGS_avt_32));
|
||||||
PrintCodecMappingEntry("AVT/DTMF (48 kHz)", absl::GetFlag(FLAGS_avt_48));
|
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 (8 kHz)", absl::GetFlag(FLAGS_cn_nb));
|
||||||
PrintCodecMappingEntry("comfort noise (16 kHz)", absl::GetFlag(FLAGS_cn_wb));
|
PrintCodecMappingEntry("comfort noise (16 kHz)", absl::GetFlag(FLAGS_cn_wb));
|
||||||
PrintCodecMappingEntry("comfort noise (32 kHz)",
|
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_32)));
|
||||||
RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_avt_48)));
|
RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_avt_48)));
|
||||||
RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_red)));
|
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_nb)));
|
||||||
RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_cn_wb)));
|
RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_cn_wb)));
|
||||||
RTC_CHECK(ValidatePayloadType(absl::GetFlag(FLAGS_cn_swb32)));
|
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_32 = absl::GetFlag(FLAGS_avt_32);
|
||||||
config.avt_48 = absl::GetFlag(FLAGS_avt_48);
|
config.avt_48 = absl::GetFlag(FLAGS_avt_48);
|
||||||
config.red = absl::GetFlag(FLAGS_red);
|
config.red = absl::GetFlag(FLAGS_red);
|
||||||
|
config.opus_red = absl::GetFlag(FLAGS_opus_red);
|
||||||
config.cn_nb = absl::GetFlag(FLAGS_cn_nb);
|
config.cn_nb = absl::GetFlag(FLAGS_cn_nb);
|
||||||
config.cn_wb = absl::GetFlag(FLAGS_cn_wb);
|
config.cn_wb = absl::GetFlag(FLAGS_cn_wb);
|
||||||
config.cn_swb32 = absl::GetFlag(FLAGS_cn_swb32);
|
config.cn_swb32 = absl::GetFlag(FLAGS_cn_swb32);
|
||||||
|
|||||||
@ -10,27 +10,39 @@
|
|||||||
|
|
||||||
#include "modules/audio_coding/neteq/tools/neteq_test_factory.h"
|
#include "modules/audio_coding/neteq/tools/neteq_test_factory.h"
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <limits.h> // For ULONG_MAX returned by strtoul.
|
#include <limits.h> // For ULONG_MAX returned by strtoul.
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h> // For strtoul.
|
#include <stdlib.h> // For strtoul.
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <optional>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "absl/strings/string_view.h"
|
#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/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.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/audio_sink.h"
|
||||||
#include "modules/audio_coding/neteq/tools/fake_decode_from_file.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/initial_packet_inserter_neteq_input.h"
|
||||||
#include "modules/audio_coding/neteq/tools/input_audio_file.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_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_replacement_input.h"
|
||||||
#include "modules/audio_coding/neteq/tools/neteq_rtp_dump_input.h"
|
#include "modules/audio_coding/neteq/tools/neteq_rtp_dump_input.h"
|
||||||
#include "modules/audio_coding/neteq/tools/neteq_stats_getter.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_audio_file.h"
|
||||||
#include "modules/audio_coding/neteq/tools/output_wav_file.h"
|
#include "modules/audio_coding/neteq/tools/output_wav_file.h"
|
||||||
#include "modules/audio_coding/neteq/tools/rtp_file_source.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 "rtc_base/checks.h"
|
||||||
#include "test/function_audio_decoder_factory.h"
|
#include "test/function_audio_decoder_factory.h"
|
||||||
#include "test/testsupport/file_utils.h"
|
#include "test/testsupport/file_utils.h"
|
||||||
@ -62,7 +75,8 @@ std::optional<int> CodecSampleRate(
|
|||||||
payload_type == config.cn_swb32 || payload_type == config.avt_32)
|
payload_type == config.cn_swb32 || payload_type == config.avt_32)
|
||||||
return 32000;
|
return 32000;
|
||||||
if (payload_type == config.opus || payload_type == config.pcm16b_swb48 ||
|
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;
|
return 48000;
|
||||||
if (payload_type == config.red)
|
if (payload_type == config.red)
|
||||||
return 0;
|
return 0;
|
||||||
@ -284,9 +298,9 @@ std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest(
|
|||||||
|
|
||||||
std::set<uint8_t> cn_types = std_set_int32_to_uint8(
|
std::set<uint8_t> cn_types = std_set_int32_to_uint8(
|
||||||
{config.cn_nb, config.cn_wb, config.cn_swb32, config.cn_swb48});
|
{config.cn_nb, config.cn_wb, config.cn_swb32, config.cn_swb48});
|
||||||
std::set<uint8_t> forbidden_types =
|
std::set<uint8_t> forbidden_types = std_set_int32_to_uint8(
|
||||||
std_set_int32_to_uint8({config.g722, config.red, config.avt,
|
{config.g722, config.red, config.opus_red, config.avt, config.avt_16,
|
||||||
config.avt_16, config.avt_32, config.avt_48});
|
config.avt_32, config.avt_48});
|
||||||
input.reset(new NetEqReplacementInput(std::move(input), replacement_pt,
|
input.reset(new NetEqReplacementInput(std::move(input), replacement_pt,
|
||||||
cn_types, forbidden_types));
|
cn_types, forbidden_types));
|
||||||
|
|
||||||
|
|||||||
@ -11,11 +11,14 @@
|
|||||||
#ifndef MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_FACTORY_H_
|
#ifndef MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_FACTORY_H_
|
||||||
#define MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_FACTORY_H_
|
#define MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_FACTORY_H_
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "absl/strings/string_view.h"
|
#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"
|
#include "modules/audio_coding/neteq/tools/neteq_test.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@ -80,6 +83,9 @@ class NetEqTestFactory {
|
|||||||
// RTP payload type for redundant audio (RED).
|
// RTP payload type for redundant audio (RED).
|
||||||
static constexpr int default_red() { return 117; }
|
static constexpr int default_red() { return 117; }
|
||||||
int red = default_red();
|
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).
|
// RTP payload type for comfort noise (8 kHz).
|
||||||
static constexpr int default_cn_nb() { return 13; }
|
static constexpr int default_cn_nb() { return 13; }
|
||||||
int cn_nb = default_cn_nb();
|
int cn_nb = default_cn_nb();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user