AudioCodingModuleTest.TestIsac: Don't rely on the ACM to create encoders
It will soon lose the ability to do so.
Bug: webrtc:8396
Change-Id: Id413204e53afec28495dff0873f027a56caed80f
Reviewed-on: https://webrtc-review.googlesource.com/101861
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24834}
diff --git a/modules/audio_coding/test/iSACTest.cc b/modules/audio_coding/test/iSACTest.cc
index 95af4d4..a130ae3 100644
--- a/modules/audio_coding/test/iSACTest.cc
+++ b/modules/audio_coding/test/iSACTest.cc
@@ -24,15 +24,47 @@
#endif
#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"
+#include "test/gmock.h"
+#include "test/gtest.h"
#include "test/testsupport/fileutils.h"
namespace webrtc {
+using ::testing::AnyOf;
+using ::testing::Eq;
+using ::testing::StrCaseEq;
+
+namespace {
+
+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,
+ const ACMTestISACConfig& test_config) {
+ if (test_config.currentRateBitPerSec > 0) {
+ config.bit_rate = test_config.currentRateBitPerSec;
+ }
+ if (test_config.currentFrameSizeMsec != 0) {
+ config.frame_size_ms = test_config.currentFrameSizeMsec;
+ }
+ EXPECT_THAT(config.IsOk(), Eq(true));
+ return config;
+}
+
void SetISACConfigDefault(ACMTestISACConfig& isacConfig) {
isacConfig.currentRateBitPerSec = 0;
isacConfig.currentFrameSizeMsec = 0;
@@ -40,34 +72,9 @@
isacConfig.initRateBitPerSec = 0;
isacConfig.initFrameSizeInMsec = 0;
isacConfig.enforceFrameSize = false;
- return;
}
-int16_t SetISAConfig(ACMTestISACConfig& isacConfig,
- AudioCodingModule* acm,
- int testMode) {
- if ((isacConfig.currentRateBitPerSec != 0) ||
- (isacConfig.currentFrameSizeMsec != 0)) {
- auto sendCodec = acm->SendCodec();
- EXPECT_TRUE(sendCodec);
- if (isacConfig.currentRateBitPerSec < 0) {
- // Register iSAC in adaptive (channel-dependent) mode.
- sendCodec->rate = -1;
- EXPECT_EQ(0, acm->RegisterSendCodec(*sendCodec));
- } else {
- if (isacConfig.currentRateBitPerSec != 0) {
- sendCodec->rate = isacConfig.currentRateBitPerSec;
- }
- if (isacConfig.currentFrameSizeMsec != 0) {
- sendCodec->pacsize =
- isacConfig.currentFrameSizeMsec * (sendCodec->plfreq / 1000);
- }
- EXPECT_EQ(0, acm->RegisterSendCodec(*sendCodec));
- }
- }
-
- return 0;
-}
+} // namespace
ISACTest::ISACTest(int testMode)
: _acmA(AudioCodingModule::Create(
@@ -120,8 +127,10 @@
file_name_swb_ =
webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm");
- EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC16kHz));
- EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC32kHz));
+ _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).
@@ -234,14 +243,13 @@
file_name_out = file_stream_b.str();
_outFileB.Open(file_name_out, 32000, "wb");
- EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC16kHz));
- EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC32kHz));
- EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC32kHz));
- EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC16kHz));
-
// Side A is sending super-wideband, and side B is sending wideband.
- SetISAConfig(swbISACConfig, _acmA.get(), _testMode);
- SetISAConfig(wbISACConfig, _acmB.get(), _testMode);
+ _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) ||
@@ -307,8 +315,10 @@
// Start with side A sending super-wideband and side B seding wideband.
// Toggle sending wideband/super-wideband in this test.
- EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC32kHz));
- EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC16kHz));
+ _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
+ _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
int numSendCodecChanged = 0;
_myTimer.Reset();
@@ -324,12 +334,14 @@
// Switch side A to send super-wideband.
_inFileA.Close();
_inFileA.Open(file_name_swb_, 32000, "rb");
- EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC32kHz));
+ _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
} else {
// Switch side A to send wideband.
_inFileA.Close();
_inFileA.Open(file_name_swb_, 32000, "rb");
- EXPECT_EQ(0, _acmA->RegisterSendCodec(_paramISAC16kHz));
+ _acmA->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
}
numSendCodecChanged++;
}
@@ -339,12 +351,14 @@
// Switch side B to send super-wideband.
_inFileB.Close();
_inFileB.Open(file_name_swb_, 32000, "rb");
- EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC32kHz));
+ _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC32kHz), _paramISAC32kHz.pltype));
} else {
// Switch side B to send wideband.
_inFileB.Close();
_inFileB.Open(file_name_swb_, 32000, "rb");
- EXPECT_EQ(0, _acmB->RegisterSendCodec(_paramISAC16kHz));
+ _acmB->SetEncoder(AudioEncoderIsacFloat::MakeAudioEncoder(
+ MakeConfig(_paramISAC16kHz), _paramISAC16kHz.pltype));
}
numSendCodecChanged++;
}