AudioDecoderOpus: Add support for 16 kHz output sample rate

In addition to the 48 kHz that we've always used.

Bug: webrtc:10631
Change-Id: If73bf7ff9c1c0d22e0d1caa245128612850f8e41
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/138268
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28104}
diff --git a/api/audio_codecs/opus/audio_decoder_opus.cc b/api/audio_codecs/opus/audio_decoder_opus.cc
index cd70416..82bb1b2 100644
--- a/api/audio_codecs/opus/audio_decoder_opus.cc
+++ b/api/audio_codecs/opus/audio_decoder_opus.cc
@@ -20,6 +20,18 @@
 
 namespace webrtc {
 
+bool AudioDecoderOpus::Config::IsOk() const {
+  if (sample_rate_hz != 16000 && sample_rate_hz != 48000) {
+    // Unsupported sample rate. (libopus supports a few other rates as
+    // well; we can add support for them when needed.)
+    return false;
+  }
+  if (num_channels != 1 && num_channels != 2) {
+    return false;
+  }
+  return true;
+}
+
 absl::optional<AudioDecoderOpus::Config> AudioDecoderOpus::SdpToConfig(
     const SdpAudioFormat& format) {
   const auto num_channels = [&]() -> absl::optional<int> {
@@ -38,7 +50,10 @@
   if (absl::EqualsIgnoreCase(format.name, "opus") &&
       format.clockrate_hz == 48000 && format.num_channels == 2 &&
       num_channels) {
-    return Config{*num_channels};
+    Config config;
+    config.num_channels = *num_channels;
+    RTC_DCHECK(config.IsOk());
+    return config;
   } else {
     return absl::nullopt;
   }
@@ -57,7 +72,9 @@
 std::unique_ptr<AudioDecoder> AudioDecoderOpus::MakeAudioDecoder(
     Config config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/) {
-  return absl::make_unique<AudioDecoderOpusImpl>(config.num_channels);
+  RTC_DCHECK(config.IsOk());
+  return absl::make_unique<AudioDecoderOpusImpl>(config.num_channels,
+                                                 config.sample_rate_hz);
 }
 
 }  // namespace webrtc