Add AudioDecoderIsacT::Config to include sampling rate and BWInfo object

This CL will make AudioDecoderIsacT symmetrical to AudioEncoderIsacT.

Bug: webrtc:10826
Change-Id: I78d1cf7bc2245bf4a282aabd81c8ece6ca23f285
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/146683
Commit-Queue: Jiawei Ou <ouj@fb.com>
Reviewed-by: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28847}
diff --git a/api/audio_codecs/isac/audio_decoder_isac_fix.cc b/api/audio_codecs/isac/audio_decoder_isac_fix.cc
index 51ae572..0e2d6bc 100644
--- a/api/audio_codecs/isac/audio_decoder_isac_fix.cc
+++ b/api/audio_codecs/isac/audio_decoder_isac_fix.cc
@@ -32,7 +32,9 @@
 std::unique_ptr<AudioDecoder> AudioDecoderIsacFix::MakeAudioDecoder(
     Config config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
-  return absl::make_unique<AudioDecoderIsacFixImpl>(16000);
+  AudioDecoderIsacFixImpl::Config c;
+  c.sample_rate_hz = 16000;
+  return absl::make_unique<AudioDecoderIsacFixImpl>(c);
 }
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/isac/audio_decoder_isac_float.cc b/api/audio_codecs/isac/audio_decoder_isac_float.cc
index d9de3a0..ec774eb 100644
--- a/api/audio_codecs/isac/audio_decoder_isac_float.cc
+++ b/api/audio_codecs/isac/audio_decoder_isac_float.cc
@@ -39,7 +39,9 @@
     Config config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
   RTC_DCHECK(config.IsOk());
-  return absl::make_unique<AudioDecoderIsacFloatImpl>(config.sample_rate_hz);
+  AudioDecoderIsacFloatImpl::Config c;
+  c.sample_rate_hz = config.sample_rate_hz;
+  return absl::make_unique<AudioDecoderIsacFloatImpl>(c);
 }
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/codecs/isac/audio_decoder_isac_t.h b/modules/audio_coding/codecs/isac/audio_decoder_isac_t.h
index 7cadd91..1e6560f 100644
--- a/modules/audio_coding/codecs/isac/audio_decoder_isac_t.h
+++ b/modules/audio_coding/codecs/isac/audio_decoder_isac_t.h
@@ -24,10 +24,13 @@
 template <typename T>
 class AudioDecoderIsacT final : public AudioDecoder {
  public:
-  explicit AudioDecoderIsacT(int sample_rate_hz);
-  AudioDecoderIsacT(int sample_rate_hz,
-                    const rtc::scoped_refptr<LockedIsacBandwidthInfo>& bwinfo);
-  ~AudioDecoderIsacT() override;
+  struct Config {
+    bool IsOk() const;
+    rtc::scoped_refptr<LockedIsacBandwidthInfo> bwinfo;
+    int sample_rate_hz = 16000;
+  };
+  explicit AudioDecoderIsacT(const Config& config);
+  virtual ~AudioDecoderIsacT() override;
 
   bool HasDecodePlc() const override;
   size_t DecodePlc(size_t num_frames, int16_t* decoded) override;
diff --git a/modules/audio_coding/codecs/isac/audio_decoder_isac_t_impl.h b/modules/audio_coding/codecs/isac/audio_decoder_isac_t_impl.h
index b2783c6..0d65517 100644
--- a/modules/audio_coding/codecs/isac/audio_decoder_isac_t_impl.h
+++ b/modules/audio_coding/codecs/isac/audio_decoder_isac_t_impl.h
@@ -16,16 +16,15 @@
 namespace webrtc {
 
 template <typename T>
-AudioDecoderIsacT<T>::AudioDecoderIsacT(int sample_rate_hz)
-    : AudioDecoderIsacT(sample_rate_hz, nullptr) {}
+bool AudioDecoderIsacT<T>::Config::IsOk() const {
+  return (sample_rate_hz == 16000 || sample_rate_hz == 32000);
+}
 
 template <typename T>
-AudioDecoderIsacT<T>::AudioDecoderIsacT(
-    int sample_rate_hz,
-    const rtc::scoped_refptr<LockedIsacBandwidthInfo>& bwinfo)
-    : sample_rate_hz_(sample_rate_hz), bwinfo_(bwinfo) {
-  RTC_CHECK(sample_rate_hz == 16000 || sample_rate_hz == 32000)
-      << "Unsupported sample rate " << sample_rate_hz;
+AudioDecoderIsacT<T>::AudioDecoderIsacT(const Config& config)
+    : sample_rate_hz_(config.sample_rate_hz), bwinfo_(config.bwinfo) {
+  RTC_CHECK(config.IsOk()) << "Unsupported sample rate "
+                           << config.sample_rate_hz;
   RTC_CHECK_EQ(0, T::Create(&isac_state_));
   T::DecoderInit(isac_state_);
   if (bwinfo_) {
diff --git a/modules/audio_coding/neteq/audio_decoder_unittest.cc b/modules/audio_coding/neteq/audio_decoder_unittest.cc
index d8e35ce..e58b08d 100644
--- a/modules/audio_coding/neteq/audio_decoder_unittest.cc
+++ b/modules/audio_coding/neteq/audio_decoder_unittest.cc
@@ -357,7 +357,10 @@
     config.frame_size_ms =
         1000 * static_cast<int>(frame_size_) / codec_input_rate_hz_;
     audio_encoder_.reset(new AudioEncoderIsacFloatImpl(config));
-    decoder_ = new AudioDecoderIsacFloatImpl(codec_input_rate_hz_);
+
+    AudioDecoderIsacFloatImpl::Config decoder_config;
+    decoder_config.sample_rate_hz = codec_input_rate_hz_;
+    decoder_ = new AudioDecoderIsacFloatImpl(decoder_config);
   }
 };
 
@@ -374,7 +377,10 @@
     config.frame_size_ms =
         1000 * static_cast<int>(frame_size_) / codec_input_rate_hz_;
     audio_encoder_.reset(new AudioEncoderIsacFloatImpl(config));
-    decoder_ = new AudioDecoderIsacFloatImpl(codec_input_rate_hz_);
+
+    AudioDecoderIsacFloatImpl::Config decoder_config;
+    decoder_config.sample_rate_hz = codec_input_rate_hz_;
+    decoder_ = new AudioDecoderIsacFloatImpl(decoder_config);
   }
 };
 
@@ -391,7 +397,10 @@
     config.frame_size_ms =
         1000 * static_cast<int>(frame_size_) / codec_input_rate_hz_;
     audio_encoder_.reset(new AudioEncoderIsacFixImpl(config));
-    decoder_ = new AudioDecoderIsacFixImpl(codec_input_rate_hz_);
+
+    AudioDecoderIsacFixImpl::Config decoder_config;
+    decoder_config.sample_rate_hz = codec_input_rate_hz_;
+    decoder_ = new AudioDecoderIsacFixImpl(decoder_config);
   }
 };
 
diff --git a/test/fuzzers/audio_decoder_isac_fuzzer.cc b/test/fuzzers/audio_decoder_isac_fuzzer.cc
index b579083..96fa75d 100644
--- a/test/fuzzers/audio_decoder_isac_fuzzer.cc
+++ b/test/fuzzers/audio_decoder_isac_fuzzer.cc
@@ -19,7 +19,9 @@
   const int sample_rate_hz = size % 2 == 0 ? 16000 : 32000;     // 16 or 32 kHz.
   static const size_t kAllocatedOuputSizeSamples = 32000 / 10;  // 100 ms.
   int16_t output[kAllocatedOuputSizeSamples];
-  AudioDecoderIsacFloatImpl dec(sample_rate_hz);
+  AudioDecoderIsacFloatImpl::Config c;
+  c.sample_rate_hz = sample_rate_hz;
+  AudioDecoderIsacFloatImpl dec(c);
   FuzzAudioDecoder(DecoderFunctionType::kNormalDecode, data, size, &dec,
                    sample_rate_hz, sizeof(output), output);
 }
diff --git a/test/fuzzers/audio_decoder_isac_incoming_packet_fuzzer.cc b/test/fuzzers/audio_decoder_isac_incoming_packet_fuzzer.cc
index 9bd6234..a67ac59 100644
--- a/test/fuzzers/audio_decoder_isac_incoming_packet_fuzzer.cc
+++ b/test/fuzzers/audio_decoder_isac_incoming_packet_fuzzer.cc
@@ -16,7 +16,9 @@
   if (size > 20000) {
     return;
   }
-  AudioDecoderIsacFloatImpl dec(16000);
+  AudioDecoderIsacFloatImpl::Config c;
+  c.sample_rate_hz = 16000;
+  AudioDecoderIsacFloatImpl dec(c);
   FuzzAudioDecoderIncomingPacket(data, size, &dec);
 }
 }  // namespace webrtc
diff --git a/test/fuzzers/audio_decoder_isacfix_fuzzer.cc b/test/fuzzers/audio_decoder_isacfix_fuzzer.cc
index 6477dc3..08aa69f 100644
--- a/test/fuzzers/audio_decoder_isacfix_fuzzer.cc
+++ b/test/fuzzers/audio_decoder_isacfix_fuzzer.cc
@@ -19,7 +19,9 @@
   static const int kSampleRateHz = 16000;
   static const size_t kAllocatedOuputSizeSamples = 16000 / 10;  // 100 ms.
   int16_t output[kAllocatedOuputSizeSamples];
-  AudioDecoderIsacFixImpl dec(kSampleRateHz);
+  AudioDecoderIsacFixImpl::Config c;
+  c.sample_rate_hz = kSampleRateHz;
+  AudioDecoderIsacFixImpl dec(c);
   FuzzAudioDecoder(DecoderFunctionType::kNormalDecode, data, size, &dec,
                    kSampleRateHz, sizeof(output), output);
 }