Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 190 } | 190 } |
| 191 return RecreateEncoderInstance(conf); | 191 return RecreateEncoderInstance(conf); |
| 192 } | 192 } |
| 193 | 193 |
| 194 void AudioEncoderOpus::SetMaxPlaybackRate(int frequency_hz) { | 194 void AudioEncoderOpus::SetMaxPlaybackRate(int frequency_hz) { |
| 195 auto conf = config_; | 195 auto conf = config_; |
| 196 conf.max_playback_rate_hz = frequency_hz; | 196 conf.max_playback_rate_hz = frequency_hz; |
| 197 RTC_CHECK(RecreateEncoderInstance(conf)); | 197 RTC_CHECK(RecreateEncoderInstance(conf)); |
| 198 } | 198 } |
| 199 | 199 |
| 200 void AudioEncoderOpus::SetProjectedPacketLossRate(double fraction) { | |
| 201 double opt_loss_rate = OptimizePacketLossRate(fraction, packet_loss_rate_); | |
| 202 if (packet_loss_rate_ != opt_loss_rate) { | |
| 203 packet_loss_rate_ = opt_loss_rate; | |
| 204 RTC_CHECK_EQ( | |
| 205 0, WebRtcOpus_SetPacketLossRate( | |
| 206 inst_, static_cast<int32_t>(packet_loss_rate_ * 100 + .5))); | |
| 207 } | |
| 208 } | |
| 209 | |
| 210 void AudioEncoderOpus::SetTargetBitrate(int bits_per_second) { | |
| 211 config_.bitrate_bps = rtc::Optional<int>( | |
| 212 std::max(std::min(bits_per_second, kMaxBitrateBps), kMinBitrateBps)); | |
| 213 RTC_DCHECK(config_.IsOk()); | |
| 214 RTC_CHECK_EQ(0, WebRtcOpus_SetBitRate(inst_, config_.GetBitrateBps())); | |
| 215 } | |
| 216 | |
| 217 bool AudioEncoderOpus::EnableAudioNetworkAdaptor( | 200 bool AudioEncoderOpus::EnableAudioNetworkAdaptor( |
| 218 const std::string& config_string, | 201 const std::string& config_string, |
| 219 const Clock* clock) { | 202 const Clock* clock) { |
| 220 audio_network_adaptor_ = audio_network_adaptor_creator_(config_string, clock); | 203 audio_network_adaptor_ = audio_network_adaptor_creator_(config_string, clock); |
| 221 return audio_network_adaptor_.get() != nullptr; | 204 return audio_network_adaptor_.get() != nullptr; |
| 222 } | 205 } |
| 223 | 206 |
| 224 void AudioEncoderOpus::DisableAudioNetworkAdaptor() { | 207 void AudioEncoderOpus::DisableAudioNetworkAdaptor() { |
| 225 audio_network_adaptor_.reset(nullptr); | 208 audio_network_adaptor_.reset(nullptr); |
| 226 } | 209 } |
| 227 | 210 |
| 228 void AudioEncoderOpus::OnReceivedUplinkBandwidth(int uplink_bandwidth_bps) { | 211 void AudioEncoderOpus::OnReceivedUplinkBandwidth(int uplink_bandwidth_bps) { |
| 229 if (!audio_network_adaptor_) | 212 if (!audio_network_adaptor_) |
| 230 return; | 213 return; |
| 231 audio_network_adaptor_->SetUplinkBandwidth(uplink_bandwidth_bps); | 214 audio_network_adaptor_->SetUplinkBandwidth(uplink_bandwidth_bps); |
| 232 ApplyAudioNetworkAdaptor(); | 215 ApplyAudioNetworkAdaptor(); |
| 233 } | 216 } |
| 234 | 217 |
| 235 void AudioEncoderOpus::OnReceivedUplinkPacketLossFraction( | 218 void AudioEncoderOpus::OnReceivedUplinkPacketLossFraction( |
| 236 float uplink_packet_loss_fraction) { | 219 float uplink_packet_loss_fraction) { |
| 237 if (!audio_network_adaptor_) { | 220 if (!audio_network_adaptor_) |
| 238 return AudioEncoder::OnReceivedTargetAudioBitrate( | 221 SetProjectedPacketLossRate(uplink_packet_loss_fraction); |
|
kwiberg-webrtc
2016/10/20 21:46:23
Shouldn't there be an early retirn here? Or an els
minyue-webrtc
2016/11/08 13:37:24
Yes, it should early return :)
This is self-solve
| |
| 239 uplink_packet_loss_fraction); | |
| 240 } | |
| 241 audio_network_adaptor_->SetUplinkPacketLossFraction( | 222 audio_network_adaptor_->SetUplinkPacketLossFraction( |
| 242 uplink_packet_loss_fraction); | 223 uplink_packet_loss_fraction); |
| 243 ApplyAudioNetworkAdaptor(); | 224 ApplyAudioNetworkAdaptor(); |
| 244 } | 225 } |
| 245 | 226 |
| 246 void AudioEncoderOpus::OnReceivedTargetAudioBitrate( | 227 void AudioEncoderOpus::OnReceivedTargetAudioBitrate( |
| 247 int target_audio_bitrate_bps) { | 228 int target_audio_bitrate_bps) { |
| 248 if (!audio_network_adaptor_) | 229 if (!audio_network_adaptor_) |
| 249 return AudioEncoder::OnReceivedTargetAudioBitrate(target_audio_bitrate_bps); | 230 return SetTargetBitrate(target_audio_bitrate_bps); |
| 250 audio_network_adaptor_->SetTargetAudioBitrate(target_audio_bitrate_bps); | 231 audio_network_adaptor_->SetTargetAudioBitrate(target_audio_bitrate_bps); |
| 251 ApplyAudioNetworkAdaptor(); | 232 ApplyAudioNetworkAdaptor(); |
| 252 } | 233 } |
| 253 | 234 |
| 254 void AudioEncoderOpus::OnReceivedRtt(int rtt_ms) { | 235 void AudioEncoderOpus::OnReceivedRtt(int rtt_ms) { |
| 255 if (!audio_network_adaptor_) | 236 if (!audio_network_adaptor_) |
| 256 return; | 237 return; |
| 257 audio_network_adaptor_->SetRtt(rtt_ms); | 238 audio_network_adaptor_->SetRtt(rtt_ms); |
| 258 ApplyAudioNetworkAdaptor(); | 239 ApplyAudioNetworkAdaptor(); |
| 259 } | 240 } |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 374 RTC_DCHECK_GT(num_channels_to_encode, 0u); | 355 RTC_DCHECK_GT(num_channels_to_encode, 0u); |
| 375 RTC_DCHECK_LE(num_channels_to_encode, config_.num_channels); | 356 RTC_DCHECK_LE(num_channels_to_encode, config_.num_channels); |
| 376 | 357 |
| 377 if (num_channels_to_encode_ == num_channels_to_encode) | 358 if (num_channels_to_encode_ == num_channels_to_encode) |
| 378 return; | 359 return; |
| 379 | 360 |
| 380 RTC_CHECK_EQ(0, WebRtcOpus_SetForceChannels(inst_, num_channels_to_encode)); | 361 RTC_CHECK_EQ(0, WebRtcOpus_SetForceChannels(inst_, num_channels_to_encode)); |
| 381 num_channels_to_encode_ = num_channels_to_encode; | 362 num_channels_to_encode_ = num_channels_to_encode; |
| 382 } | 363 } |
| 383 | 364 |
| 365 void AudioEncoderOpus::SetTargetBitrate(int bits_per_second) { | |
| 366 config_.bitrate_bps = rtc::Optional<int>( | |
| 367 std::max(std::min(bits_per_second, kMaxBitrateBps), kMinBitrateBps)); | |
| 368 RTC_DCHECK(config_.IsOk()); | |
| 369 RTC_CHECK_EQ(0, WebRtcOpus_SetBitRate(inst_, config_.GetBitrateBps())); | |
| 370 } | |
| 371 | |
| 372 void AudioEncoderOpus::SetProjectedPacketLossRate(double fraction) { | |
| 373 double opt_loss_rate = OptimizePacketLossRate(fraction, packet_loss_rate_); | |
| 374 if (packet_loss_rate_ != opt_loss_rate) { | |
| 375 packet_loss_rate_ = opt_loss_rate; | |
| 376 RTC_CHECK_EQ( | |
| 377 0, WebRtcOpus_SetPacketLossRate( | |
| 378 inst_, static_cast<int32_t>(packet_loss_rate_ * 100 + .5))); | |
| 379 } | |
| 380 } | |
| 381 | |
| 384 void AudioEncoderOpus::ApplyAudioNetworkAdaptor() { | 382 void AudioEncoderOpus::ApplyAudioNetworkAdaptor() { |
| 385 auto config = audio_network_adaptor_->GetEncoderRuntimeConfig(); | 383 auto config = audio_network_adaptor_->GetEncoderRuntimeConfig(); |
| 386 // |audio_network_adaptor_| is supposed to be configured to output all | 384 // |audio_network_adaptor_| is supposed to be configured to output all |
| 387 // following parameters. | 385 // following parameters. |
| 388 RTC_DCHECK(config.bitrate_bps); | 386 RTC_DCHECK(config.bitrate_bps); |
| 389 RTC_DCHECK(config.frame_length_ms); | 387 RTC_DCHECK(config.frame_length_ms); |
| 390 RTC_DCHECK(config.uplink_packet_loss_fraction); | 388 RTC_DCHECK(config.uplink_packet_loss_fraction); |
| 391 RTC_DCHECK(config.enable_fec); | 389 RTC_DCHECK(config.enable_fec); |
| 392 RTC_DCHECK(config.enable_dtx); | 390 RTC_DCHECK(config.enable_dtx); |
| 393 RTC_DCHECK(config.num_channels); | 391 RTC_DCHECK(config.num_channels); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 409 AudioNetworkAdaptorImpl::Config config; | 407 AudioNetworkAdaptorImpl::Config config; |
| 410 config.clock = clock; | 408 config.clock = clock; |
| 411 return std::unique_ptr<AudioNetworkAdaptor>(new AudioNetworkAdaptorImpl( | 409 return std::unique_ptr<AudioNetworkAdaptor>(new AudioNetworkAdaptorImpl( |
| 412 config, ControllerManagerImpl::Create( | 410 config, ControllerManagerImpl::Create( |
| 413 config_string, NumChannels(), kSupportedFrameLengths, | 411 config_string, NumChannels(), kSupportedFrameLengths, |
| 414 num_channels_to_encode_, next_frame_length_ms_, | 412 num_channels_to_encode_, next_frame_length_ms_, |
| 415 GetTargetBitrate(), config_.fec_enabled, GetDtx(), clock))); | 413 GetTargetBitrate(), config_.fec_enabled, GetDtx(), clock))); |
| 416 } | 414 } |
| 417 | 415 |
| 418 } // namespace webrtc | 416 } // namespace webrtc |
| OLD | NEW |