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