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:
Niels Möller
2018-12-20 15:51:43 +01:00
committed by Commit Bot
parent a921660060
commit d375f1c8d1
5 changed files with 32 additions and 14 deletions

View File

@ -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

View File

@ -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_;
};