Refactor NetEqTestFactory to not use "external" decoders
Bug: webrtc:10080 Change-Id: Icfca98d6d91fc5139e678c1aa3de1e2c35abff5c Reviewed-on: https://webrtc-review.googlesource.com/c/115240 Reviewed-by: Ivo Creusen <ivoc@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26090}
This commit is contained in:
@ -1492,6 +1492,7 @@ if (rtc_include_tests) {
|
||||
"../..:webrtc_common",
|
||||
"../../api/audio_codecs:builtin_audio_decoder_factory",
|
||||
"../../rtc_base:rtc_base_approved",
|
||||
"../../test:audio_codec_mocks",
|
||||
"../../test:test_support",
|
||||
"//third_party/abseil-cpp/absl/memory",
|
||||
]
|
||||
|
||||
@ -77,6 +77,8 @@ absl::optional<SdpAudioFormat> NetEqDecoderToSdpAudioFormat(NetEqDecoder nd) {
|
||||
return SdpAudioFormat("cn", 32000, 1);
|
||||
case NetEqDecoder::kDecoderCNGswb48kHz:
|
||||
return SdpAudioFormat("cn", 48000, 1);
|
||||
case NetEqDecoder::kDecoderReplacementForTest:
|
||||
return SdpAudioFormat("replacement", 48000, 1);
|
||||
default:
|
||||
return absl::nullopt;
|
||||
}
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
// TODO(bugs.webrtc.org/10080): Delete, together with RegisterExternalDecoder.
|
||||
enum class NetEqDecoder {
|
||||
kDecoderPCMu,
|
||||
kDecoderPCMa,
|
||||
@ -47,6 +48,8 @@ enum class NetEqDecoder {
|
||||
kDecoderArbitrary,
|
||||
kDecoderOpus,
|
||||
kDecoderOpus_2ch,
|
||||
// Used in NetEqTestFactory
|
||||
kDecoderReplacementForTest,
|
||||
};
|
||||
|
||||
absl::optional<SdpAudioFormat> NetEqDecoderToSdpAudioFormat(NetEqDecoder nd);
|
||||
|
||||
@ -38,6 +38,8 @@
|
||||
#include "modules/audio_coding/neteq/tools/rtp_file_source.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/flags.h"
|
||||
#include "rtc_base/refcountedobject.h"
|
||||
#include "test/function_audio_decoder_factory.h"
|
||||
#include "test/testsupport/fileutils.h"
|
||||
|
||||
namespace webrtc {
|
||||
@ -431,12 +433,14 @@ std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest(
|
||||
std::make_pair(NetEqDecoder::kDecoderCNGswb48kHz, "cng-swb48")}
|
||||
};
|
||||
|
||||
rtc::scoped_refptr<AudioDecoderFactory> decoder_factory =
|
||||
CreateBuiltinAudioDecoderFactory();
|
||||
|
||||
// Check if a replacement audio file was provided.
|
||||
if (strlen(FLAG_replacement_audio_file) > 0) {
|
||||
// Find largest unused payload type.
|
||||
int replacement_pt = 127;
|
||||
while (!(codecs.find(replacement_pt) == codecs.end() &&
|
||||
ext_codecs_.find(replacement_pt) == ext_codecs_.end())) {
|
||||
while (codecs.find(replacement_pt) != codecs.end()) {
|
||||
--replacement_pt;
|
||||
RTC_CHECK_GE(replacement_pt, 0);
|
||||
}
|
||||
@ -456,14 +460,23 @@ std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest(
|
||||
input.reset(new NetEqReplacementInput(std::move(input), replacement_pt,
|
||||
cn_types, forbidden_types));
|
||||
|
||||
replacement_decoder_.reset(new FakeDecodeFromFile(
|
||||
std::unique_ptr<InputAudioFile>(
|
||||
new InputAudioFile(FLAG_replacement_audio_file)),
|
||||
48000, false));
|
||||
NetEqTest::ExternalDecoderInfo ext_dec_info = {
|
||||
replacement_decoder_.get(), NetEqDecoder::kDecoderArbitrary,
|
||||
"replacement codec"};
|
||||
ext_codecs_[replacement_pt] = ext_dec_info;
|
||||
// Note that capture-by-copy implies that the lambda captures the value of
|
||||
// decoder_factory before it's reassigned on the left-hand side.
|
||||
decoder_factory = new rtc::RefCountedObject<FunctionAudioDecoderFactory>(
|
||||
[decoder_factory](const SdpAudioFormat& format,
|
||||
absl::optional<AudioCodecPairId> codec_pair_id) {
|
||||
std::unique_ptr<AudioDecoder> decoder =
|
||||
decoder_factory->MakeAudioDecoder(format, codec_pair_id);
|
||||
if (!decoder && format.name == "replacement") {
|
||||
decoder = absl::make_unique<FakeDecodeFromFile>(
|
||||
absl::make_unique<InputAudioFile>(FLAG_replacement_audio_file),
|
||||
format.clockrate_hz, format.num_channels > 1);
|
||||
}
|
||||
return decoder;
|
||||
});
|
||||
|
||||
codecs[replacement_pt] = {NetEqDecoder::kDecoderReplacementForTest,
|
||||
"replacement codec"};
|
||||
}
|
||||
|
||||
// Create a text log file if needed.
|
||||
@ -487,9 +500,10 @@ std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest(
|
||||
config.sample_rate_hz = *sample_rate_hz;
|
||||
config.max_packets_in_buffer = FLAG_max_nr_packets_in_buffer;
|
||||
config.enable_fast_accelerate = FLAG_enable_fast_accelerate;
|
||||
NetEqTest::ExtDecoderMap ext_codecs;
|
||||
return absl::make_unique<NetEqTest>(
|
||||
config, CreateBuiltinAudioDecoderFactory(), codecs, ext_codecs_,
|
||||
std::move(text_log), std::move(input), std::move(output), callbacks);
|
||||
config, decoder_factory, codecs, ext_codecs, std::move(text_log),
|
||||
std::move(input), std::move(output), callbacks);
|
||||
}
|
||||
|
||||
} // namespace test
|
||||
|
||||
@ -34,8 +34,6 @@ class NetEqTestFactory {
|
||||
std::string output_filename);
|
||||
|
||||
private:
|
||||
std::unique_ptr<AudioDecoder> replacement_decoder_;
|
||||
NetEqTest::ExtDecoderMap ext_codecs_;
|
||||
std::unique_ptr<SsrcSwitchDetector> ssrc_switch_detector_;
|
||||
std::unique_ptr<NetEqStatsPlotter> stats_plotter_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user