blob: 8bb0625bfd1524a83d492478dbe33cfb38b5cf66 [file] [log] [blame]
Ivo Creusen55de08e2018-09-03 11:49:27 +02001/*
2 * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "api/test/neteq_simulator_factory.h"
12
Alessio Bazzica5ad789c2019-03-13 11:51:44 +010013#include <string>
Mirko Bonadei2ab97f62019-07-18 13:44:12 +020014#include <vector>
Alessio Bazzica5ad789c2019-03-13 11:51:44 +010015
Mirko Bonadei2ab97f62019-07-18 13:44:12 +020016#include "absl/flags/flag.h"
17#include "absl/flags/parse.h"
Ivo Creusen55de08e2018-09-03 11:49:27 +020018#include "absl/memory/memory.h"
19#include "modules/audio_coding/neteq/tools/neteq_test_factory.h"
Ivo Creusenf81b0f12018-09-11 10:30:58 +020020#include "rtc_base/checks.h"
Ivo Creusen55de08e2018-09-03 11:49:27 +020021
Ivo Creusenba7886b2019-02-26 13:03:21 +010022namespace {
23
Mirko Bonadei2ab97f62019-07-18 13:44:12 +020024ABSL_FLAG(std::string,
25 replacement_audio_file,
26 "",
27 "A PCM file that will be used to populate dummy"
28 " RTP packets");
29ABSL_FLAG(int,
30 max_nr_packets_in_buffer,
31 50,
32 "Maximum allowed number of packets in the buffer");
Ivo Creusenba7886b2019-02-26 13:03:21 +010033
34} // namespace
35
Ivo Creusen55de08e2018-09-03 11:49:27 +020036namespace webrtc {
37namespace test {
38
39NetEqSimulatorFactory::NetEqSimulatorFactory()
40 : factory_(absl::make_unique<NetEqTestFactory>()) {}
41
42NetEqSimulatorFactory::~NetEqSimulatorFactory() = default;
43
44std::unique_ptr<NetEqSimulator> NetEqSimulatorFactory::CreateSimulator(
45 int argc,
46 char* argv[]) {
Mirko Bonadei2ab97f62019-07-18 13:44:12 +020047 std::vector<char*> args = absl::ParseCommandLine(argc, argv);
48 RTC_CHECK_EQ(args.size(), 3)
49 << "Wrong number of input arguments. Expected 3, got " << args.size();
Ivo Creusenba7886b2019-02-26 13:03:21 +010050 // TODO(ivoc) Stop (ab)using command-line flags in this function.
Mirko Bonadei2ab97f62019-07-18 13:44:12 +020051 const std::string output_audio_filename(args[2]);
Ivo Creusenba7886b2019-02-26 13:03:21 +010052 NetEqTestFactory::Config config;
Mirko Bonadei2ab97f62019-07-18 13:44:12 +020053 config.replacement_audio_file = absl::GetFlag(FLAGS_replacement_audio_file);
54 config.max_nr_packets_in_buffer =
55 absl::GetFlag(FLAGS_max_nr_packets_in_buffer);
Alessio Bazzica5ad789c2019-03-13 11:51:44 +010056 config.output_audio_filename = output_audio_filename;
Mirko Bonadei2ab97f62019-07-18 13:44:12 +020057 return factory_->InitializeTestFromFile(args[1], config);
Ivo Creusen5ec61562019-03-20 10:52:18 +010058}
59
60std::unique_ptr<NetEqSimulator> NetEqSimulatorFactory::CreateSimulatorFromFile(
61 absl::string_view event_log_filename,
62 absl::string_view replacement_audio_filename,
63 Config simulation_config) {
64 NetEqTestFactory::Config config;
65 config.replacement_audio_file = std::string(replacement_audio_filename);
66 config.max_nr_packets_in_buffer = simulation_config.max_nr_packets_in_buffer;
67 return factory_->InitializeTestFromFile(std::string(event_log_filename),
68 config);
69}
70
71std::unique_ptr<NetEqSimulator>
72NetEqSimulatorFactory::CreateSimulatorFromString(
73 absl::string_view event_log_file_contents,
74 absl::string_view replacement_audio_filename,
75 Config simulation_config) {
76 NetEqTestFactory::Config config;
77 config.replacement_audio_file = std::string(replacement_audio_filename);
78 config.max_nr_packets_in_buffer = simulation_config.max_nr_packets_in_buffer;
79 return factory_->InitializeTestFromString(
80 std::string(event_log_file_contents), config);
Ivo Creusen55de08e2018-09-03 11:49:27 +020081}
82
83} // namespace test
84} // namespace webrtc