blob: c332fe08f11183694b1a89eb89d1b4a31c28b6c0 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
andrew@webrtc.org9dc45da2012-05-23 15:39:01 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "modules/audio_coding/test/iSACTest.h"
tina.legrand@webrtc.org73222cf2013-03-15 13:29:17 +000012
pbos@webrtc.org12dc1a32013-08-05 16:22:53 +000013#include <ctype.h>
niklase@google.com470e71d2011-07-07 08:21:25 +000014#include <stdio.h>
15#include <string.h>
16
kwiberg77eab702016-09-28 17:42:01 -070017#ifdef _WIN32
niklase@google.com470e71d2011-07-07 08:21:25 +000018#include <windows.h>
kwiberg77eab702016-09-28 17:42:01 -070019#elif defined(WEBRTC_LINUX)
pbos@webrtc.org12dc1a32013-08-05 16:22:53 +000020#include <time.h>
niklase@google.com470e71d2011-07-07 08:21:25 +000021#else
22#include <sys/time.h>
23#include <time.h>
andrew@webrtc.org89df0922013-09-12 01:27:43 +000024#endif
niklase@google.com470e71d2011-07-07 08:21:25 +000025
Niels Möller2edab4c2018-10-22 09:48:08 +020026#include "absl/strings/match.h"
Karl Wiberg5817d3d2018-04-06 10:06:42 +020027#include "api/audio_codecs/builtin_audio_decoder_factory.h"
Karl Wibergbf7a0462018-09-25 14:48:33 +020028#include "api/audio_codecs/isac/audio_encoder_isac_float.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020029#include "modules/audio_coding/codecs/audio_format_conversion.h"
30#include "modules/audio_coding/test/utility.h"
Jonas Olsson366a50c2018-09-06 13:41:30 +020031#include "rtc_base/strings/string_builder.h"
Danil Chapovalovdb128562018-09-17 13:11:50 +020032#include "rtc_base/timeutils.h"
Niels Möllerfe3240a2018-09-06 16:47:42 +020033#include "system_wrappers/include/sleep.h"
Karl Wibergbf7a0462018-09-25 14:48:33 +020034#include "test/gmock.h"
35#include "test/gtest.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020036#include "test/testsupport/fileutils.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000037
tina.legrand@webrtc.org554ae1a2011-12-16 10:09:04 +000038namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000039
Karl Wibergbf7a0462018-09-25 14:48:33 +020040using ::testing::AnyOf;
41using ::testing::Eq;
42using ::testing::StrCaseEq;
43
44namespace {
45
46AudioEncoderIsacFloat::Config MakeConfig(const CodecInst& ci) {
47 EXPECT_THAT(ci.plname, StrCaseEq("ISAC"));
48 EXPECT_THAT(ci.plfreq, AnyOf(Eq(16000), Eq(32000)));
49 EXPECT_THAT(ci.channels, Eq(1u));
50 AudioEncoderIsacFloat::Config config;
51 config.sample_rate_hz = ci.plfreq;
52 EXPECT_THAT(config.IsOk(), Eq(true));
53 return config;
54}
55
56AudioEncoderIsacFloat::Config TweakConfig(
57 AudioEncoderIsacFloat::Config config,
58 const ACMTestISACConfig& test_config) {
59 if (test_config.currentRateBitPerSec > 0) {
60 config.bit_rate = test_config.currentRateBitPerSec;
61 }
62 if (test_config.currentFrameSizeMsec != 0) {
63 config.frame_size_ms = test_config.currentFrameSizeMsec;
64 }
65 EXPECT_THAT(config.IsOk(), Eq(true));
66 return config;
67}
68
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000069void SetISACConfigDefault(ACMTestISACConfig& isacConfig) {
70 isacConfig.currentRateBitPerSec = 0;
71 isacConfig.currentFrameSizeMsec = 0;
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000072 isacConfig.encodingMode = -1;
73 isacConfig.initRateBitPerSec = 0;
74 isacConfig.initFrameSizeInMsec = 0;
75 isacConfig.enforceFrameSize = false;
niklase@google.com470e71d2011-07-07 08:21:25 +000076}
77
Karl Wibergbf7a0462018-09-25 14:48:33 +020078} // namespace
niklase@google.com470e71d2011-07-07 08:21:25 +000079
henrik.lundin@webrtc.orgadaf8092014-04-17 08:29:10 +000080ISACTest::ISACTest(int testMode)
Karl Wiberg5817d3d2018-04-06 10:06:42 +020081 : _acmA(AudioCodingModule::Create(
82 AudioCodingModule::Config(CreateBuiltinAudioDecoderFactory()))),
83 _acmB(AudioCodingModule::Create(
84 AudioCodingModule::Config(CreateBuiltinAudioDecoderFactory()))),
henrik.lundin@webrtc.orgadaf8092014-04-17 08:29:10 +000085 _testMode(testMode) {}
niklase@google.com470e71d2011-07-07 08:21:25 +000086
turaj@webrtc.org55e17232013-10-29 04:40:09 +000087ISACTest::~ISACTest() {}
niklase@google.com470e71d2011-07-07 08:21:25 +000088
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000089void ISACTest::Setup() {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000090 int codecCntr;
91 CodecInst codecParam;
niklase@google.com470e71d2011-07-07 08:21:25 +000092
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000093 for (codecCntr = 0; codecCntr < AudioCodingModule::NumberOfCodecs();
Yves Gerey665174f2018-06-19 15:03:05 +020094 codecCntr++) {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +000095 EXPECT_EQ(0, AudioCodingModule::Codec(codecCntr, &codecParam));
Niels Möller2edab4c2018-10-22 09:48:08 +020096 if (absl::EqualsIgnoreCase(codecParam.plname, "ISAC") &&
Yves Gerey665174f2018-06-19 15:03:05 +020097 codecParam.plfreq == 16000) {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +000098 memcpy(&_paramISAC16kHz, &codecParam, sizeof(CodecInst));
99 _idISAC16kHz = codecCntr;
niklase@google.com470e71d2011-07-07 08:21:25 +0000100 }
Niels Möller2edab4c2018-10-22 09:48:08 +0200101 if (absl::EqualsIgnoreCase(codecParam.plname, "ISAC") &&
Yves Gerey665174f2018-06-19 15:03:05 +0200102 codecParam.plfreq == 32000) {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000103 memcpy(&_paramISAC32kHz, &codecParam, sizeof(CodecInst));
104 _idISAC32kHz = codecCntr;
niklase@google.com470e71d2011-07-07 08:21:25 +0000105 }
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000106 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000107
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000108 // Register both iSAC-wb & iSAC-swb in both sides as receiver codecs.
kwibergda2bf4e2016-10-24 13:47:09 -0700109 EXPECT_EQ(true, _acmA->RegisterReceiveCodec(_paramISAC16kHz.pltype,
110 CodecInstToSdp(_paramISAC16kHz)));
111 EXPECT_EQ(true, _acmA->RegisterReceiveCodec(_paramISAC32kHz.pltype,
112 CodecInstToSdp(_paramISAC32kHz)));
113 EXPECT_EQ(true, _acmB->RegisterReceiveCodec(_paramISAC16kHz.pltype,
114 CodecInstToSdp(_paramISAC16kHz)));
115 EXPECT_EQ(true, _acmB->RegisterReceiveCodec(_paramISAC32kHz.pltype,
116 CodecInstToSdp(_paramISAC32kHz)));
niklase@google.com470e71d2011-07-07 08:21:25 +0000117
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000118 //--- Set A-to-B channel
turaj@webrtc.org55e17232013-10-29 04:40:09 +0000119 _channel_A2B.reset(new Channel);
120 EXPECT_EQ(0, _acmA->RegisterTransportCallback(_channel_A2B.get()));
121 _channel_A2B->RegisterReceiverACM(_acmB.get());
niklase@google.com470e71d2011-07-07 08:21:25 +0000122
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000123 //--- Set B-to-A channel
turaj@webrtc.org55e17232013-10-29 04:40:09 +0000124 _channel_B2A.reset(new Channel);
125 EXPECT_EQ(0, _acmB->RegisterTransportCallback(_channel_B2A.get()));
126 _channel_B2A->RegisterReceiverACM(_acmA.get());
niklase@google.com470e71d2011-07-07 08:21:25 +0000127
Yves Gerey665174f2018-06-19 15:03:05 +0200128 file_name_swb_ =
129 webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm");
niklase@google.com470e71d2011-07-07 08:21:25 +0000130
Karl Wibergbf7a0462018-09-25 14:48:33 +0200131 _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
132 MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
133 _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
134 MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000135
136 _inFileA.Open(file_name_swb_, 32000, "rb");
Henrik Lundin4d682082015-12-10 16:24:39 +0100137 // Set test length to 500 ms (50 blocks of 10 ms each).
138 _inFileA.SetNum10MsBlocksToRead(50);
139 // Fast-forward 1 second (100 blocks) since the files start with silence.
140 _inFileA.FastForward(100);
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000141 std::string fileNameA = webrtc::test::OutputPath() + "testisac_a.pcm";
142 std::string fileNameB = webrtc::test::OutputPath() + "testisac_b.pcm";
143 _outFileA.Open(fileNameA, 32000, "wb");
144 _outFileB.Open(fileNameB, 32000, "wb");
145
146 while (!_inFileA.EndOfFile()) {
147 Run10ms();
148 }
149 CodecInst receiveCodec;
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000150 EXPECT_EQ(0, _acmA->ReceiveCodec(&receiveCodec));
151 EXPECT_EQ(0, _acmB->ReceiveCodec(&receiveCodec));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000152
153 _inFileA.Close();
154 _outFileA.Close();
155 _outFileB.Close();
niklase@google.com470e71d2011-07-07 08:21:25 +0000156}
157
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000158void ISACTest::Perform() {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000159 Setup();
niklase@google.com470e71d2011-07-07 08:21:25 +0000160
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000161 int16_t testNr = 0;
162 ACMTestISACConfig wbISACConfig;
163 ACMTestISACConfig swbISACConfig;
niklase@google.com470e71d2011-07-07 08:21:25 +0000164
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000165 SetISACConfigDefault(wbISACConfig);
166 SetISACConfigDefault(swbISACConfig);
niklase@google.com470e71d2011-07-07 08:21:25 +0000167
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000168 wbISACConfig.currentRateBitPerSec = -1;
169 swbISACConfig.currentRateBitPerSec = -1;
170 testNr++;
171 EncodeDecode(testNr, wbISACConfig, swbISACConfig);
172
173 if (_testMode != 0) {
niklase@google.com470e71d2011-07-07 08:21:25 +0000174 SetISACConfigDefault(wbISACConfig);
175 SetISACConfigDefault(swbISACConfig);
176
177 wbISACConfig.currentRateBitPerSec = -1;
178 swbISACConfig.currentRateBitPerSec = -1;
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000179 wbISACConfig.initRateBitPerSec = 13000;
180 wbISACConfig.initFrameSizeInMsec = 60;
181 swbISACConfig.initRateBitPerSec = 20000;
182 swbISACConfig.initFrameSizeInMsec = 30;
niklase@google.com470e71d2011-07-07 08:21:25 +0000183 testNr++;
184 EncodeDecode(testNr, wbISACConfig, swbISACConfig);
185
niklase@google.com470e71d2011-07-07 08:21:25 +0000186 SetISACConfigDefault(wbISACConfig);
187 SetISACConfigDefault(swbISACConfig);
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000188
189 wbISACConfig.currentRateBitPerSec = 20000;
190 swbISACConfig.currentRateBitPerSec = 48000;
niklase@google.com470e71d2011-07-07 08:21:25 +0000191 testNr++;
192 EncodeDecode(testNr, wbISACConfig, swbISACConfig);
pbos@webrtc.org0946a562013-04-09 00:28:06 +0000193
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000194 wbISACConfig.currentRateBitPerSec = 16000;
195 swbISACConfig.currentRateBitPerSec = 30000;
196 wbISACConfig.currentFrameSizeMsec = 60;
niklase@google.com470e71d2011-07-07 08:21:25 +0000197 testNr++;
198 EncodeDecode(testNr, wbISACConfig, swbISACConfig);
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000199 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000200
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000201 SetISACConfigDefault(wbISACConfig);
202 SetISACConfigDefault(swbISACConfig);
203 testNr++;
204 EncodeDecode(testNr, wbISACConfig, swbISACConfig);
niklase@google.com470e71d2011-07-07 08:21:25 +0000205
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000206 testNr++;
207 if (_testMode == 0) {
208 SwitchingSamplingRate(testNr, 4);
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000209 } else {
210 SwitchingSamplingRate(testNr, 80);
211 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000212}
213
andresp@webrtc.orgd0b436a2014-01-13 13:15:59 +0000214void ISACTest::Run10ms() {
215 AudioFrame audioFrame;
216 EXPECT_GT(_inFileA.Read10MsData(audioFrame), 0);
henrik.lundin@webrtc.orgf56c1622015-03-02 12:29:30 +0000217 EXPECT_GE(_acmA->Add10MsData(audioFrame), 0);
218 EXPECT_GE(_acmB->Add10MsData(audioFrame), 0);
henrik.lundind4ccb002016-05-17 12:21:55 -0700219 bool muted;
220 EXPECT_EQ(0, _acmA->PlayoutData10Ms(32000, &audioFrame, &muted));
221 ASSERT_FALSE(muted);
andresp@webrtc.orgd0b436a2014-01-13 13:15:59 +0000222 _outFileA.Write10MsData(audioFrame);
henrik.lundind4ccb002016-05-17 12:21:55 -0700223 EXPECT_EQ(0, _acmB->PlayoutData10Ms(32000, &audioFrame, &muted));
224 ASSERT_FALSE(muted);
andresp@webrtc.orgd0b436a2014-01-13 13:15:59 +0000225 _outFileB.Write10MsData(audioFrame);
226}
227
Yves Gerey665174f2018-06-19 15:03:05 +0200228void ISACTest::EncodeDecode(int testNr,
229 ACMTestISACConfig& wbISACConfig,
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000230 ACMTestISACConfig& swbISACConfig) {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000231 // Files in Side A and B
232 _inFileA.Open(file_name_swb_, 32000, "rb", true);
233 _inFileB.Open(file_name_swb_, 32000, "rb", true);
234
235 std::string file_name_out;
Jonas Olsson366a50c2018-09-06 13:41:30 +0200236 rtc::StringBuilder file_stream_a;
237 rtc::StringBuilder file_stream_b;
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000238 file_stream_a << webrtc::test::OutputPath();
239 file_stream_b << webrtc::test::OutputPath();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000240 file_stream_a << "out_iSACTest_A_" << testNr << ".pcm";
241 file_stream_b << "out_iSACTest_B_" << testNr << ".pcm";
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000242 file_name_out = file_stream_a.str();
243 _outFileA.Open(file_name_out, 32000, "wb");
244 file_name_out = file_stream_b.str();
245 _outFileB.Open(file_name_out, 32000, "wb");
246
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000247 // Side A is sending super-wideband, and side B is sending wideband.
Karl Wibergbf7a0462018-09-25 14:48:33 +0200248 _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
249 TweakConfig(MakeConfig(_paramISAC32kHz), swbISACConfig),
250 _paramISAC32kHz.pltype));
251 _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
252 TweakConfig(MakeConfig(_paramISAC16kHz), wbISACConfig),
253 _paramISAC16kHz.pltype));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000254
255 bool adaptiveMode = false;
Yves Gerey665174f2018-06-19 15:03:05 +0200256 if ((swbISACConfig.currentRateBitPerSec == -1) ||
257 (wbISACConfig.currentRateBitPerSec == -1)) {
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000258 adaptiveMode = true;
259 }
260 _myTimer.Reset();
261 _channel_A2B->ResetStats();
262 _channel_B2A->ResetStats();
263
264 char currentTime[500];
Niels Möllerfe3240a2018-09-06 16:47:42 +0200265 int64_t time_ms = rtc::TimeMillis();
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000266 while (!(_inFileA.EndOfFile() || _inFileA.Rewinded())) {
267 Run10ms();
268 _myTimer.Tick10ms();
269 _myTimer.CurrentTimeHMS(currentTime);
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000270
271 if ((adaptiveMode) && (_testMode != 0)) {
Niels Möllerfe3240a2018-09-06 16:47:42 +0200272 time_ms += 10;
273 int64_t time_left_ms = time_ms - rtc::TimeMillis();
274 if (time_left_ms > 0) {
275 SleepMs(time_left_ms);
276 }
277
kwiberg1fd4a4a2015-11-03 11:20:50 -0800278 EXPECT_TRUE(_acmA->SendCodec());
279 EXPECT_TRUE(_acmB->SendCodec());
niklase@google.com470e71d2011-07-07 08:21:25 +0000280 }
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000281 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000282
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000283 if (_testMode != 0) {
284 printf("\n\nSide A statistics\n\n");
285 _channel_A2B->PrintStats(_paramISAC32kHz);
tina.legrand@webrtc.orgba468042012-08-17 10:38:28 +0000286
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000287 printf("\n\nSide B statistics\n\n");
288 _channel_B2A->PrintStats(_paramISAC16kHz);
289 }
tina.legrand@webrtc.orgba468042012-08-17 10:38:28 +0000290
andresp@webrtc.orgd0b436a2014-01-13 13:15:59 +0000291 _channel_A2B->ResetStats();
292 _channel_B2A->ResetStats();
293
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000294 _outFileA.Close();
295 _outFileB.Close();
296 _inFileA.Close();
297 _inFileB.Close();
niklase@google.com470e71d2011-07-07 08:21:25 +0000298}
299
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000300void ISACTest::SwitchingSamplingRate(int testNr, int maxSampRateChange) {
301 // Files in Side A
302 _inFileA.Open(file_name_swb_, 32000, "rb");
303 _inFileB.Open(file_name_swb_, 32000, "rb");
tina.legrand@webrtc.orgba468042012-08-17 10:38:28 +0000304
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000305 std::string file_name_out;
Jonas Olsson366a50c2018-09-06 13:41:30 +0200306 rtc::StringBuilder file_stream_a;
307 rtc::StringBuilder file_stream_b;
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000308 file_stream_a << webrtc::test::OutputPath();
309 file_stream_b << webrtc::test::OutputPath();
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000310 file_stream_a << "out_iSACTest_A_" << testNr << ".pcm";
311 file_stream_b << "out_iSACTest_B_" << testNr << ".pcm";
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000312 file_name_out = file_stream_a.str();
313 _outFileA.Open(file_name_out, 32000, "wb");
314 file_name_out = file_stream_b.str();
315 _outFileB.Open(file_name_out, 32000, "wb");
niklase@google.com470e71d2011-07-07 08:21:25 +0000316
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000317 // Start with side A sending super-wideband and side B seding wideband.
318 // Toggle sending wideband/super-wideband in this test.
Karl Wibergbf7a0462018-09-25 14:48:33 +0200319 _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
320 MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
321 _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
322 MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000323
324 int numSendCodecChanged = 0;
325 _myTimer.Reset();
326 char currentTime[50];
327 while (numSendCodecChanged < (maxSampRateChange << 1)) {
328 Run10ms();
329 _myTimer.Tick10ms();
330 _myTimer.CurrentTimeHMS(currentTime);
331 if (_testMode == 2)
332 printf("\r%s", currentTime);
333 if (_inFileA.EndOfFile()) {
334 if (_inFileA.SamplingFrequency() == 16000) {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000335 // Switch side A to send super-wideband.
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000336 _inFileA.Close();
337 _inFileA.Open(file_name_swb_, 32000, "rb");
Karl Wibergbf7a0462018-09-25 14:48:33 +0200338 _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
339 MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000340 } else {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000341 // Switch side A to send wideband.
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000342 _inFileA.Close();
343 _inFileA.Open(file_name_swb_, 32000, "rb");
Karl Wibergbf7a0462018-09-25 14:48:33 +0200344 _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
345 MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000346 }
347 numSendCodecChanged++;
niklase@google.com470e71d2011-07-07 08:21:25 +0000348 }
349
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000350 if (_inFileB.EndOfFile()) {
351 if (_inFileB.SamplingFrequency() == 16000) {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000352 // Switch side B to send super-wideband.
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000353 _inFileB.Close();
354 _inFileB.Open(file_name_swb_, 32000, "rb");
Karl Wibergbf7a0462018-09-25 14:48:33 +0200355 _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
356 MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000357 } else {
tina.legrand@webrtc.orgee92b662013-08-27 07:33:51 +0000358 // Switch side B to send wideband.
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000359 _inFileB.Close();
360 _inFileB.Open(file_name_swb_, 32000, "rb");
Karl Wibergbf7a0462018-09-25 14:48:33 +0200361 _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
362 MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000363 }
364 numSendCodecChanged++;
niklase@google.com470e71d2011-07-07 08:21:25 +0000365 }
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000366 }
367 _outFileA.Close();
368 _outFileB.Close();
369 _inFileA.Close();
370 _inFileB.Close();
niklase@google.com470e71d2011-07-07 08:21:25 +0000371}
tina.legrand@webrtc.org554ae1a2011-12-16 10:09:04 +0000372
tina.legrand@webrtc.orgd5726a12013-05-03 07:34:12 +0000373} // namespace webrtc