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++;
     }