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

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

Issue 1942193002: AudioEncoderOpus: Default to 32 kbit/s for mono, 64 kbit/s for stereo (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 7 months 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
« no previous file with comments | « webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 a2497c7862aa748da741d6d127984344f965b60c..edafbbdf39d9f64449395209bde4941a2df8d66f 100644
--- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
+++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
@@ -29,7 +29,7 @@ AudioEncoderOpus::Config CreateConfig(const CodecInst& codec_inst) {
AudioEncoderOpus::Config config;
config.frame_size_ms = rtc::CheckedDivExact(codec_inst.pacsize, 48);
config.num_channels = codec_inst.channels;
- config.bitrate_bps = codec_inst.rate;
+ config.bitrate_bps = rtc::Optional<int>(codec_inst.rate);
config.payload_type = codec_inst.pltype;
config.application = config.num_channels == 1 ? AudioEncoderOpus::kVoip
: AudioEncoderOpus::kAudio;
@@ -78,18 +78,32 @@ double OptimizePacketLossRate(double new_loss_rate, double old_loss_rate) {
} // namespace
+AudioEncoderOpus::Config::Config() = default;
+AudioEncoderOpus::Config::Config(const Config&) = default;
+AudioEncoderOpus::Config::~Config() = default;
+auto AudioEncoderOpus::Config::operator=(const Config&) -> Config& = default;
hlundin-webrtc 2016/05/18 00:34:47 I don't understand this syntax. Please, educate me
kwiberg-webrtc 2016/05/18 02:54:28 It's a trailing return type (see http://en.cpprefe
+
bool AudioEncoderOpus::Config::IsOk() const {
if (frame_size_ms <= 0 || frame_size_ms % 10 != 0)
return false;
if (num_channels != 1 && num_channels != 2)
return false;
- if (bitrate_bps < kMinBitrateBps || bitrate_bps > kMaxBitrateBps)
+ if (bitrate_bps &&
+ (*bitrate_bps < kMinBitrateBps || *bitrate_bps > kMaxBitrateBps))
return false;
if (complexity < 0 || complexity > 10)
return false;
return true;
}
+int AudioEncoderOpus::Config::GetBitrateBps() const {
+ RTC_DCHECK(IsOk());
+ if (bitrate_bps)
+ return *bitrate_bps; // Explicitly set value.
+ else
+ return num_channels == 1 ? 32000 : 64000; // Default value.
+}
+
AudioEncoderOpus::AudioEncoderOpus(const Config& config)
: packet_loss_rate_(0.0), inst_(nullptr) {
RTC_CHECK(RecreateEncoderInstance(config));
@@ -119,7 +133,7 @@ size_t AudioEncoderOpus::Max10MsFramesInAPacket() const {
}
int AudioEncoderOpus::GetTargetBitrate() const {
- return config_.bitrate_bps;
+ return config_.GetBitrateBps();
}
void AudioEncoderOpus::Reset() {
@@ -168,10 +182,10 @@ void AudioEncoderOpus::SetProjectedPacketLossRate(double fraction) {
}
void AudioEncoderOpus::SetTargetBitrate(int bits_per_second) {
- config_.bitrate_bps =
- std::max(std::min(bits_per_second, kMaxBitrateBps), kMinBitrateBps);
+ config_.bitrate_bps = rtc::Optional<int>(
+ std::max(std::min(bits_per_second, kMaxBitrateBps), kMinBitrateBps));
RTC_DCHECK(config_.IsOk());
- RTC_CHECK_EQ(0, WebRtcOpus_SetBitRate(inst_, config_.bitrate_bps));
+ RTC_CHECK_EQ(0, WebRtcOpus_SetBitRate(inst_, config_.GetBitrateBps()));
}
AudioEncoder::EncodedInfo AudioEncoderOpus::EncodeImpl(
@@ -228,7 +242,7 @@ size_t AudioEncoderOpus::SufficientOutputBufferSize() const {
// Calculate the number of bytes we expect the encoder to produce,
// then multiply by two to give a wide margin for error.
const size_t bytes_per_millisecond =
- static_cast<size_t>(config_.bitrate_bps / (1000 * 8) + 1);
+ static_cast<size_t>(config_.GetBitrateBps() / (1000 * 8) + 1);
const size_t approx_encoded_bytes =
Num10msFramesPerPacket() * 10 * bytes_per_millisecond;
return 2 * approx_encoded_bytes;
@@ -246,7 +260,7 @@ bool AudioEncoderOpus::RecreateEncoderInstance(const Config& config) {
input_buffer_.reserve(Num10msFramesPerPacket() * SamplesPer10msFrame());
RTC_CHECK_EQ(0, WebRtcOpus_EncoderCreate(&inst_, config.num_channels,
config.application));
- RTC_CHECK_EQ(0, WebRtcOpus_SetBitRate(inst_, config.bitrate_bps));
+ RTC_CHECK_EQ(0, WebRtcOpus_SetBitRate(inst_, config.GetBitrateBps()));
if (config.fec_enabled) {
RTC_CHECK_EQ(0, WebRtcOpus_EnableFec(inst_));
} else {
« no previous file with comments | « webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698