Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(554)

Unified Diff: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc

Issue 2503443002: Let Opus increase complexity for low bitrates (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
index f466926f195c8f386c685f6021b491b447714f8a..39d82a9d47035d9423a358961e51920eacaf152b 100644
--- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
+++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
@@ -44,6 +44,9 @@ AudioEncoderOpus::Config CreateConfig(const CodecInst& codec_inst) {
config.application = config.num_channels == 1 ? AudioEncoderOpus::kVoip
: AudioEncoderOpus::kAudio;
config.supported_frame_lengths_ms.push_back(config.frame_size_ms);
+#if WEBRTC_OPUS_VARIABLE_COMPLEXITY
+ config.low_rate_complexity = 9;
+#endif
return config;
}
@@ -118,7 +121,11 @@ class AudioEncoderOpus::PacketLossFractionSmoother {
rtc::ExpFilter smoother_;
};
-AudioEncoderOpus::Config::Config() = default;
+AudioEncoderOpus::Config::Config() {
+#if WEBRTC_OPUS_VARIABLE_COMPLEXITY
+ low_rate_complexity = 9;
+#endif
+}
AudioEncoderOpus::Config::Config(const Config&) = default;
AudioEncoderOpus::Config::~Config() = default;
auto AudioEncoderOpus::Config::operator=(const Config&) -> Config& = default;
@@ -133,6 +140,8 @@ bool AudioEncoderOpus::Config::IsOk() const {
return false;
if (complexity < 0 || complexity > 10)
return false;
+ if (low_rate_complexity < 0 || low_rate_complexity > 10)
+ return false;
return true;
}
@@ -144,6 +153,12 @@ int AudioEncoderOpus::Config::GetBitrateBps() const {
return num_channels == 1 ? 32000 : 64000; // Default value.
}
+int AudioEncoderOpus::Config::GetComplexity() const {
+ RTC_DCHECK(IsOk());
+ return GetBitrateBps() <= complexity_threshold_bps ? low_rate_complexity
+ : complexity;
+}
+
AudioEncoderOpus::AudioEncoderOpus(
const Config& config,
AudioNetworkAdaptorCreator&& audio_network_adaptor_creator)
@@ -250,6 +265,10 @@ void AudioEncoderOpus::SetTargetBitrate(int bits_per_second) {
std::max(std::min(bits_per_second, kMaxBitrateBps), kMinBitrateBps));
RTC_DCHECK(config_.IsOk());
RTC_CHECK_EQ(0, WebRtcOpus_SetBitRate(inst_, config_.GetBitrateBps()));
+ if (complexity_ != config_.GetComplexity()) {
+ complexity_ = config_.GetComplexity();
+ RTC_CHECK_EQ(0, WebRtcOpus_SetComplexity(inst_, complexity_));
+ }
}
bool AudioEncoderOpus::EnableAudioNetworkAdaptor(
@@ -399,7 +418,8 @@ bool AudioEncoderOpus::RecreateEncoderInstance(const Config& config) {
}
RTC_CHECK_EQ(
0, WebRtcOpus_SetMaxPlaybackRate(inst_, config.max_playback_rate_hz));
- RTC_CHECK_EQ(0, WebRtcOpus_SetComplexity(inst_, config.complexity));
+ complexity_ = config.GetComplexity();
+ RTC_CHECK_EQ(0, WebRtcOpus_SetComplexity(inst_, complexity_));
if (config.dtx_enabled) {
RTC_CHECK_EQ(0, WebRtcOpus_EnableDtx(inst_));
} else {

Powered by Google App Engine
This is Rietveld 408576698