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:
@ -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",
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user