Revert "Remove CodecInst pt.1"
This reverts commit 056f9738bf7a3d16da45398239656e165c4e0851.
Reason for revert: breaks downstream
Original change's description:
> Remove CodecInst pt.1
>
> Update audio_coding tests to not use CodecInst.
>
> Bug: webrtc:7626
> Change-Id: I880fb8d72d7d0a915d274e67feb6106f023697c2
> Reviewed-on: https://webrtc-review.googlesource.com/c/112594
> Commit-Queue: Fredrik Solenberg <solenberg@webrtc.org>
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#25879}
TBR=solenberg@webrtc.org,kwiberg@webrtc.org
Change-Id: I51d666969bcd63e2b7cb7d669ec2f59b5f8f9dde
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:7626
Reviewed-on: https://webrtc-review.googlesource.com/c/112906
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Commit-Queue: Fredrik Solenberg <solenberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25881}
diff --git a/modules/audio_coding/test/iSACTest.cc b/modules/audio_coding/test/iSACTest.cc
index 339d419..c332fe0 100644
--- a/modules/audio_coding/test/iSACTest.cc
+++ b/modules/audio_coding/test/iSACTest.cc
@@ -14,9 +14,20 @@
#include <stdio.h>
#include <string.h>
+#ifdef _WIN32
+#include <windows.h>
+#elif defined(WEBRTC_LINUX)
+#include <time.h>
+#else
+#include <sys/time.h>
+#include <time.h>
+#endif
+
#include "absl/strings/match.h"
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
#include "api/audio_codecs/isac/audio_encoder_isac_float.h"
+#include "modules/audio_coding/codecs/audio_format_conversion.h"
+#include "modules/audio_coding/test/utility.h"
#include "rtc_base/strings/string_builder.h"
#include "rtc_base/timeutils.h"
#include "system_wrappers/include/sleep.h"
@@ -32,10 +43,15 @@
namespace {
-constexpr int kISAC16kPayloadType = 103;
-constexpr int kISAC32kPayloadType = 104;
-const SdpAudioFormat kISAC16kFormat = { "ISAC", 16000, 1 };
-const SdpAudioFormat kISAC32kFormat = { "ISAC", 32000, 1 };
+AudioEncoderIsacFloat::Config MakeConfig(const CodecInst& ci) {
+ EXPECT_THAT(ci.plname, StrCaseEq("ISAC"));
+ EXPECT_THAT(ci.plfreq, AnyOf(Eq(16000), Eq(32000)));
+ EXPECT_THAT(ci.channels, Eq(1u));
+ AudioEncoderIsacFloat::Config config;
+ config.sample_rate_hz = ci.plfreq;
+ EXPECT_THAT(config.IsOk(), Eq(true));
+ return config;
+}
AudioEncoderIsacFloat::Config TweakConfig(
AudioEncoderIsacFloat::Config config,
@@ -61,96 +77,43 @@
} // namespace
-ISACTest::ACMTestTimer::ACMTestTimer() : _msec(0), _sec(0), _min(0), _hour(0) {
- return;
-}
-
-ISACTest::ACMTestTimer::~ACMTestTimer() {
- return;
-}
-
-void ISACTest::ACMTestTimer::Reset() {
- _msec = 0;
- _sec = 0;
- _min = 0;
- _hour = 0;
- return;
-}
-void ISACTest::ACMTestTimer::Tick10ms() {
- _msec += 10;
- Adjust();
- return;
-}
-
-void ISACTest::ACMTestTimer::Tick1ms() {
- _msec++;
- Adjust();
- return;
-}
-
-void ISACTest::ACMTestTimer::Tick100ms() {
- _msec += 100;
- Adjust();
- return;
-}
-
-void ISACTest::ACMTestTimer::Tick1sec() {
- _sec++;
- Adjust();
- return;
-}
-
-void ISACTest::ACMTestTimer::CurrentTimeHMS(char* currTime) {
- sprintf(currTime, "%4lu:%02u:%06.3f", _hour, _min,
- (double)_sec + (double)_msec / 1000.);
- return;
-}
-
-void ISACTest::ACMTestTimer::CurrentTime(unsigned long& h,
- unsigned char& m,
- unsigned char& s,
- unsigned short& ms) {
- h = _hour;
- m = _min;
- s = _sec;
- ms = _msec;
- return;
-}
-
-void ISACTest::ACMTestTimer::Adjust() {
- unsigned int n;
- if (_msec >= 1000) {
- n = _msec / 1000;
- _msec -= (1000 * n);
- _sec += n;
- }
- if (_sec >= 60) {
- n = _sec / 60;
- _sec -= (n * 60);
- _min += n;
- }
- if (_min >= 60) {
- n = _min / 60;
- _min -= (n * 60);
- _hour += n;
- }
-}
-
-ISACTest::ISACTest()
+ISACTest::ISACTest(int testMode)
: _acmA(AudioCodingModule::Create(
AudioCodingModule::Config(CreateBuiltinAudioDecoderFactory()))),
_acmB(AudioCodingModule::Create(
- AudioCodingModule::Config(CreateBuiltinAudioDecoderFactory()))) {}
+ AudioCodingModule::Config(CreateBuiltinAudioDecoderFactory()))),
+ _testMode(testMode) {}
ISACTest::~ISACTest() {}
void ISACTest::Setup() {
+ int codecCntr;
+ CodecInst codecParam;
+
+ for (codecCntr = 0; codecCntr < AudioCodingModule::NumberOfCodecs();
+ codecCntr++) {
+ EXPECT_EQ(0, AudioCodingModule::Codec(codecCntr, &codecParam));
+ if (absl::EqualsIgnoreCase(codecParam.plname, "ISAC") &&
+ codecParam.plfreq == 16000) {
+ memcpy(&_paramISAC16kHz, &codecParam, sizeof(CodecInst));
+ _idISAC16kHz = codecCntr;
+ }
+ if (absl::EqualsIgnoreCase(codecParam.plname, "ISAC") &&
+ codecParam.plfreq == 32000) {
+ memcpy(&_paramISAC32kHz, &codecParam, sizeof(CodecInst));
+ _idISAC32kHz = codecCntr;
+ }
+ }
+
// Register both iSAC-wb & iSAC-swb in both sides as receiver codecs.
- std::map<int, SdpAudioFormat> receive_codecs =
- {{kISAC16kPayloadType, kISAC16kFormat},
- {kISAC32kPayloadType, kISAC32kFormat}};
- _acmA->SetReceiveCodecs(receive_codecs);
- _acmB->SetReceiveCodecs(receive_codecs);
+ EXPECT_EQ(true, _acmA->RegisterReceiveCodec(_paramISAC16kHz.pltype,
+ CodecInstToSdp(_paramISAC16kHz)));
+ EXPECT_EQ(true, _acmA->RegisterReceiveCodec(_paramISAC32kHz.pltype,
+ CodecInstToSdp(_paramISAC32kHz)));
+ EXPECT_EQ(true, _acmB->RegisterReceiveCodec(_paramISAC16kHz.pltype,
+ CodecInstToSdp(_paramISAC16kHz)));
+ EXPECT_EQ(true, _acmB->RegisterReceiveCodec(_paramISAC32kHz.pltype,
+ CodecInstToSdp(_paramISAC32kHz)));
//--- Set A-to-B channel
_channel_A2B.reset(new Channel);
@@ -165,14 +128,10 @@
file_name_swb_ =
webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm");
- _acmB->SetEncoder(
- AudioEncoderIsacFloat::MakeAudioEncoder(
- *AudioEncoderIsacFloat::SdpToConfig(kISAC16kFormat),
- kISAC16kPayloadType));
- _acmA->SetEncoder(
- AudioEncoderIsacFloat::MakeAudioEncoder(
- *AudioEncoderIsacFloat::SdpToConfig(kISAC32kFormat),
- kISAC32kPayloadType));
+ _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
+ _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
_inFileA.Open(file_name_swb_, 32000, "rb");
// Set test length to 500 ms (50 blocks of 10 ms each).
@@ -187,9 +146,9 @@
while (!_inFileA.EndOfFile()) {
Run10ms();
}
-
- EXPECT_TRUE(_acmA->ReceiveFormat());
- EXPECT_TRUE(_acmB->ReceiveFormat());
+ CodecInst receiveCodec;
+ EXPECT_EQ(0, _acmA->ReceiveCodec(&receiveCodec));
+ EXPECT_EQ(0, _acmB->ReceiveCodec(&receiveCodec));
_inFileA.Close();
_outFileA.Close();
@@ -211,13 +170,45 @@
testNr++;
EncodeDecode(testNr, wbISACConfig, swbISACConfig);
+ if (_testMode != 0) {
+ SetISACConfigDefault(wbISACConfig);
+ SetISACConfigDefault(swbISACConfig);
+
+ wbISACConfig.currentRateBitPerSec = -1;
+ swbISACConfig.currentRateBitPerSec = -1;
+ wbISACConfig.initRateBitPerSec = 13000;
+ wbISACConfig.initFrameSizeInMsec = 60;
+ swbISACConfig.initRateBitPerSec = 20000;
+ swbISACConfig.initFrameSizeInMsec = 30;
+ testNr++;
+ EncodeDecode(testNr, wbISACConfig, swbISACConfig);
+
+ SetISACConfigDefault(wbISACConfig);
+ SetISACConfigDefault(swbISACConfig);
+
+ wbISACConfig.currentRateBitPerSec = 20000;
+ swbISACConfig.currentRateBitPerSec = 48000;
+ testNr++;
+ EncodeDecode(testNr, wbISACConfig, swbISACConfig);
+
+ wbISACConfig.currentRateBitPerSec = 16000;
+ swbISACConfig.currentRateBitPerSec = 30000;
+ wbISACConfig.currentFrameSizeMsec = 60;
+ testNr++;
+ EncodeDecode(testNr, wbISACConfig, swbISACConfig);
+ }
+
SetISACConfigDefault(wbISACConfig);
SetISACConfigDefault(swbISACConfig);
testNr++;
EncodeDecode(testNr, wbISACConfig, swbISACConfig);
testNr++;
- SwitchingSamplingRate(testNr, 4);
+ if (_testMode == 0) {
+ SwitchingSamplingRate(testNr, 4);
+ } else {
+ SwitchingSamplingRate(testNr, 80);
+ }
}
void ISACTest::Run10ms() {
@@ -254,16 +245,12 @@
_outFileB.Open(file_name_out, 32000, "wb");
// Side A is sending super-wideband, and side B is sending wideband.
- _acmA->SetEncoder(
- AudioEncoderIsacFloat::MakeAudioEncoder(
- TweakConfig(*AudioEncoderIsacFloat::SdpToConfig(kISAC32kFormat),
- swbISACConfig),
- kISAC32kPayloadType));
- _acmB->SetEncoder(
- AudioEncoderIsacFloat::MakeAudioEncoder(
- TweakConfig(*AudioEncoderIsacFloat::SdpToConfig(kISAC16kFormat),
- wbISACConfig),
- kISAC16kPayloadType));
+ _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ TweakConfig(MakeConfig(_paramISAC32kHz), swbISACConfig),
+ _paramISAC32kHz.pltype));
+ _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ TweakConfig(MakeConfig(_paramISAC16kHz), wbISACConfig),
+ _paramISAC16kHz.pltype));
bool adaptiveMode = false;
if ((swbISACConfig.currentRateBitPerSec == -1) ||
@@ -275,10 +262,30 @@
_channel_B2A->ResetStats();
char currentTime[500];
+ int64_t time_ms = rtc::TimeMillis();
while (!(_inFileA.EndOfFile() || _inFileA.Rewinded())) {
Run10ms();
_myTimer.Tick10ms();
_myTimer.CurrentTimeHMS(currentTime);
+
+ if ((adaptiveMode) && (_testMode != 0)) {
+ time_ms += 10;
+ int64_t time_left_ms = time_ms - rtc::TimeMillis();
+ if (time_left_ms > 0) {
+ SleepMs(time_left_ms);
+ }
+
+ EXPECT_TRUE(_acmA->SendCodec());
+ EXPECT_TRUE(_acmB->SendCodec());
+ }
+ }
+
+ if (_testMode != 0) {
+ printf("\n\nSide A statistics\n\n");
+ _channel_A2B->PrintStats(_paramISAC32kHz);
+
+ printf("\n\nSide B statistics\n\n");
+ _channel_B2A->PrintStats(_paramISAC16kHz);
}
_channel_A2B->ResetStats();
@@ -309,14 +316,10 @@
// Start with side A sending super-wideband and side B seding wideband.
// Toggle sending wideband/super-wideband in this test.
- _acmA->SetEncoder(
- AudioEncoderIsacFloat::MakeAudioEncoder(
- *AudioEncoderIsacFloat::SdpToConfig(kISAC32kFormat),
- kISAC32kPayloadType));
- _acmB->SetEncoder(
- AudioEncoderIsacFloat::MakeAudioEncoder(
- *AudioEncoderIsacFloat::SdpToConfig(kISAC16kFormat),
- kISAC16kPayloadType));
+ _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
+ _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
int numSendCodecChanged = 0;
_myTimer.Reset();
@@ -325,23 +328,21 @@
Run10ms();
_myTimer.Tick10ms();
_myTimer.CurrentTimeHMS(currentTime);
+ if (_testMode == 2)
+ printf("\r%s", currentTime);
if (_inFileA.EndOfFile()) {
if (_inFileA.SamplingFrequency() == 16000) {
// Switch side A to send super-wideband.
_inFileA.Close();
_inFileA.Open(file_name_swb_, 32000, "rb");
- _acmA->SetEncoder(
- AudioEncoderIsacFloat::MakeAudioEncoder(
- *AudioEncoderIsacFloat::SdpToConfig(kISAC32kFormat),
- kISAC32kPayloadType));
+ _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
} else {
// Switch side A to send wideband.
_inFileA.Close();
_inFileA.Open(file_name_swb_, 32000, "rb");
- _acmA->SetEncoder(
- AudioEncoderIsacFloat::MakeAudioEncoder(
- *AudioEncoderIsacFloat::SdpToConfig(kISAC16kFormat),
- kISAC16kPayloadType));
+ _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
}
numSendCodecChanged++;
}
@@ -351,18 +352,14 @@
// Switch side B to send super-wideband.
_inFileB.Close();
_inFileB.Open(file_name_swb_, 32000, "rb");
- _acmB->SetEncoder(
- AudioEncoderIsacFloat::MakeAudioEncoder(
- *AudioEncoderIsacFloat::SdpToConfig(kISAC32kFormat),
- kISAC32kPayloadType));
+ _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
} else {
// Switch side B to send wideband.
_inFileB.Close();
_inFileB.Open(file_name_swb_, 32000, "rb");
- _acmB->SetEncoder(
- AudioEncoderIsacFloat::MakeAudioEncoder(
- *AudioEncoderIsacFloat::SdpToConfig(kISAC16kFormat),
- kISAC16kPayloadType));
+ _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
}
numSendCodecChanged++;
}