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}
This commit is contained in:
Karl Wiberg
2018-09-25 14:48:33 +02:00
committed by Commit Bot
parent a7af021882
commit bf7a0463da
3 changed files with 56 additions and 43 deletions

View File

@ -1332,6 +1332,7 @@ if (rtc_include_tests) {
"../../api/audio:audio_frame_api",
"../../api/audio_codecs:builtin_audio_decoder_factory",
"../../api/audio_codecs:builtin_audio_encoder_factory",
"../../api/audio_codecs/isac:audio_encoder_isac_float",
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
"../../rtc_base/synchronization:rw_lock_wrapper",

View File

@ -51,7 +51,6 @@ TEST(AudioCodingModuleTest, TestRedFec) {
}
#endif
#if defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)
#if defined(WEBRTC_ANDROID)
TEST(AudioCodingModuleTest, DISABLED_TestIsac) {
#else
@ -59,7 +58,6 @@ TEST(AudioCodingModuleTest, TestIsac) {
#endif
webrtc::ISACTest(ACM_TEST_MODE).Perform();
}
#endif
#if (defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)) && \
defined(WEBRTC_CODEC_ILBC)

View File

@ -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 @@ void SetISACConfigDefault(ACMTestISACConfig& isacConfig) {
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 @@ void ISACTest::Setup() {
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 @@ void ISACTest::EncodeDecode(int testNr,
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 @@ void ISACTest::SwitchingSamplingRate(int testNr, int maxSampRateChange) {
// 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 @@ void ISACTest::SwitchingSamplingRate(int testNr, int maxSampRateChange) {
// 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 @@ void ISACTest::SwitchingSamplingRate(int testNr, int maxSampRateChange) {
// 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++;
}