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

Side by Side Diff: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc

Issue 2782563003: Replace Clock with timeutils in AudioEncoder. (Closed)
Patch Set: Fix for failing unittest. Created 3 years, 8 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 unified diff | Download patch
OLDNEW
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 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 const int max_frame_length_ms = 277 const int max_frame_length_ms =
278 GetFormatParameter<int>(format, "maxptime").value_or(kMaxANAFrameLength); 278 GetFormatParameter<int>(format, "maxptime").value_or(kMaxANAFrameLength);
279 279
280 FindSupportedFrameLengths(min_frame_length_ms, max_frame_length_ms, 280 FindSupportedFrameLengths(min_frame_length_ms, max_frame_length_ms,
281 &config.supported_frame_lengths_ms); 281 &config.supported_frame_lengths_ms);
282 return config; 282 return config;
283 } 283 }
284 284
285 class AudioEncoderOpus::PacketLossFractionSmoother { 285 class AudioEncoderOpus::PacketLossFractionSmoother {
286 public: 286 public:
287 explicit PacketLossFractionSmoother(const Clock* clock) 287 explicit PacketLossFractionSmoother()
288 : clock_(clock), 288 : last_sample_time_ms_(rtc::TimeMillis()),
289 last_sample_time_ms_(clock_->TimeInMilliseconds()),
290 smoother_(kAlphaForPacketLossFractionSmoother) {} 289 smoother_(kAlphaForPacketLossFractionSmoother) {}
291 290
292 // Gets the smoothed packet loss fraction. 291 // Gets the smoothed packet loss fraction.
293 float GetAverage() const { 292 float GetAverage() const {
294 float value = smoother_.filtered(); 293 float value = smoother_.filtered();
295 return (value == rtc::ExpFilter::kValueUndefined) ? 0.0f : value; 294 return (value == rtc::ExpFilter::kValueUndefined) ? 0.0f : value;
296 } 295 }
297 296
298 // Add new observation to the packet loss fraction smoother. 297 // Add new observation to the packet loss fraction smoother.
299 void AddSample(float packet_loss_fraction) { 298 void AddSample(float packet_loss_fraction) {
300 int64_t now_ms = clock_->TimeInMilliseconds(); 299 int64_t now_ms = rtc::TimeMillis();
301 smoother_.Apply(static_cast<float>(now_ms - last_sample_time_ms_), 300 smoother_.Apply(static_cast<float>(now_ms - last_sample_time_ms_),
302 packet_loss_fraction); 301 packet_loss_fraction);
303 last_sample_time_ms_ = now_ms; 302 last_sample_time_ms_ = now_ms;
304 } 303 }
305 304
306 private: 305 private:
307 const Clock* const clock_;
308 int64_t last_sample_time_ms_; 306 int64_t last_sample_time_ms_;
309 307
310 // An exponential filter is used to smooth the packet loss fraction. 308 // An exponential filter is used to smooth the packet loss fraction.
311 rtc::ExpFilter smoother_; 309 rtc::ExpFilter smoother_;
312 }; 310 };
313 311
314 AudioEncoderOpus::Config::Config() { 312 AudioEncoderOpus::Config::Config() {
315 #if WEBRTC_OPUS_VARIABLE_COMPLEXITY 313 #if WEBRTC_OPUS_VARIABLE_COMPLEXITY
316 low_rate_complexity = 9; 314 low_rate_complexity = 9;
317 #endif 315 #endif
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 } 357 }
360 358
361 AudioEncoderOpus::AudioEncoderOpus( 359 AudioEncoderOpus::AudioEncoderOpus(
362 const Config& config, 360 const Config& config,
363 AudioNetworkAdaptorCreator&& audio_network_adaptor_creator, 361 AudioNetworkAdaptorCreator&& audio_network_adaptor_creator,
364 std::unique_ptr<SmoothingFilter> bitrate_smoother) 362 std::unique_ptr<SmoothingFilter> bitrate_smoother)
365 : send_side_bwe_with_overhead_(webrtc::field_trial::IsEnabled( 363 : send_side_bwe_with_overhead_(webrtc::field_trial::IsEnabled(
366 "WebRTC-SendSideBwe-WithOverhead")), 364 "WebRTC-SendSideBwe-WithOverhead")),
367 packet_loss_rate_(0.0), 365 packet_loss_rate_(0.0),
368 inst_(nullptr), 366 inst_(nullptr),
369 packet_loss_fraction_smoother_(new PacketLossFractionSmoother( 367 packet_loss_fraction_smoother_(new PacketLossFractionSmoother()),
370 config.clock)),
371 audio_network_adaptor_creator_( 368 audio_network_adaptor_creator_(
372 audio_network_adaptor_creator 369 audio_network_adaptor_creator
373 ? std::move(audio_network_adaptor_creator) 370 ? std::move(audio_network_adaptor_creator)
374 : [this](const ProtoString& config_string, 371 : [this](const ProtoString& config_string,
375 RtcEventLog* event_log, 372 RtcEventLog* event_log) {
376 const Clock* clock) {
377 return DefaultAudioNetworkAdaptorCreator(config_string, 373 return DefaultAudioNetworkAdaptorCreator(config_string,
378 event_log, clock); 374 event_log);
379 }), 375 }),
380 bitrate_smoother_(bitrate_smoother 376 bitrate_smoother_(bitrate_smoother
381 ? std::move(bitrate_smoother) : std::unique_ptr<SmoothingFilter>( 377 ? std::move(bitrate_smoother) : std::unique_ptr<SmoothingFilter>(
382 // We choose 5sec as initial time constant due to empirical data. 378 // We choose 5sec as initial time constant due to empirical data.
383 new SmoothingFilterImpl(5000, config.clock))) { 379 new SmoothingFilterImpl(5000))) {
384 RTC_CHECK(RecreateEncoderInstance(config)); 380 RTC_CHECK(RecreateEncoderInstance(config));
385 } 381 }
386 382
387 AudioEncoderOpus::AudioEncoderOpus(const CodecInst& codec_inst) 383 AudioEncoderOpus::AudioEncoderOpus(const CodecInst& codec_inst)
388 : AudioEncoderOpus(CreateConfig(codec_inst), nullptr) {} 384 : AudioEncoderOpus(CreateConfig(codec_inst), nullptr) {}
389 385
390 AudioEncoderOpus::AudioEncoderOpus(int payload_type, 386 AudioEncoderOpus::AudioEncoderOpus(int payload_type,
391 const SdpAudioFormat& format) 387 const SdpAudioFormat& format)
392 : AudioEncoderOpus(CreateConfig(payload_type, format), nullptr) {} 388 : AudioEncoderOpus(CreateConfig(payload_type, format), nullptr) {}
393 389
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 } 453 }
458 454
459 void AudioEncoderOpus::SetMaxPlaybackRate(int frequency_hz) { 455 void AudioEncoderOpus::SetMaxPlaybackRate(int frequency_hz) {
460 auto conf = config_; 456 auto conf = config_;
461 conf.max_playback_rate_hz = frequency_hz; 457 conf.max_playback_rate_hz = frequency_hz;
462 RTC_CHECK(RecreateEncoderInstance(conf)); 458 RTC_CHECK(RecreateEncoderInstance(conf));
463 } 459 }
464 460
465 bool AudioEncoderOpus::EnableAudioNetworkAdaptor( 461 bool AudioEncoderOpus::EnableAudioNetworkAdaptor(
466 const std::string& config_string, 462 const std::string& config_string,
467 RtcEventLog* event_log, 463 RtcEventLog* event_log) {
468 const Clock* clock) {
469 audio_network_adaptor_ = 464 audio_network_adaptor_ =
470 audio_network_adaptor_creator_(config_string, event_log, clock); 465 audio_network_adaptor_creator_(config_string, event_log);
471 return audio_network_adaptor_.get() != nullptr; 466 return audio_network_adaptor_.get() != nullptr;
472 } 467 }
473 468
474 void AudioEncoderOpus::DisableAudioNetworkAdaptor() { 469 void AudioEncoderOpus::DisableAudioNetworkAdaptor() {
475 audio_network_adaptor_.reset(nullptr); 470 audio_network_adaptor_.reset(nullptr);
476 } 471 }
477 472
478 void AudioEncoderOpus::OnReceivedUplinkPacketLossFraction( 473 void AudioEncoderOpus::OnReceivedUplinkPacketLossFraction(
479 float uplink_packet_loss_fraction) { 474 float uplink_packet_loss_fraction) {
480 if (!audio_network_adaptor_) { 475 if (!audio_network_adaptor_) {
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 SetProjectedPacketLossRate(*config.uplink_packet_loss_fraction); 711 SetProjectedPacketLossRate(*config.uplink_packet_loss_fraction);
717 if (config.enable_dtx) 712 if (config.enable_dtx)
718 SetDtx(*config.enable_dtx); 713 SetDtx(*config.enable_dtx);
719 if (config.num_channels) 714 if (config.num_channels)
720 SetNumChannelsToEncode(*config.num_channels); 715 SetNumChannelsToEncode(*config.num_channels);
721 } 716 }
722 717
723 std::unique_ptr<AudioNetworkAdaptor> 718 std::unique_ptr<AudioNetworkAdaptor>
724 AudioEncoderOpus::DefaultAudioNetworkAdaptorCreator( 719 AudioEncoderOpus::DefaultAudioNetworkAdaptorCreator(
725 const ProtoString& config_string, 720 const ProtoString& config_string,
726 RtcEventLog* event_log, 721 RtcEventLog* event_log) const {
727 const Clock* clock) const {
728 AudioNetworkAdaptorImpl::Config config; 722 AudioNetworkAdaptorImpl::Config config;
729 config.clock = clock;
730 config.event_log = event_log; 723 config.event_log = event_log;
731 return std::unique_ptr<AudioNetworkAdaptor>(new AudioNetworkAdaptorImpl( 724 return std::unique_ptr<AudioNetworkAdaptor>(new AudioNetworkAdaptorImpl(
732 config, 725 config,
733 ControllerManagerImpl::Create( 726 ControllerManagerImpl::Create(
734 config_string, NumChannels(), supported_frame_lengths_ms(), 727 config_string, NumChannels(), supported_frame_lengths_ms(),
735 kOpusMinBitrateBps, num_channels_to_encode_, next_frame_length_ms_, 728 kOpusMinBitrateBps, num_channels_to_encode_, next_frame_length_ms_,
736 GetTargetBitrate(), config_.fec_enabled, GetDtx(), clock))); 729 GetTargetBitrate(), config_.fec_enabled, GetDtx())));
737 } 730 }
738 731
739 void AudioEncoderOpus::MaybeUpdateUplinkBandwidth() { 732 void AudioEncoderOpus::MaybeUpdateUplinkBandwidth() {
740 if (audio_network_adaptor_) { 733 if (audio_network_adaptor_) {
741 int64_t now_ms = rtc::TimeMillis(); 734 int64_t now_ms = rtc::TimeMillis();
742 if (!bitrate_smoother_last_update_time_ || 735 if (!bitrate_smoother_last_update_time_ ||
743 now_ms - *bitrate_smoother_last_update_time_ >= 736 now_ms - *bitrate_smoother_last_update_time_ >=
744 config_.uplink_bandwidth_update_interval_ms) { 737 config_.uplink_bandwidth_update_interval_ms) {
745 rtc::Optional<float> smoothed_bitrate = bitrate_smoother_->GetAverage(); 738 rtc::Optional<float> smoothed_bitrate = bitrate_smoother_->GetAverage();
746 if (smoothed_bitrate) 739 if (smoothed_bitrate)
747 audio_network_adaptor_->SetUplinkBandwidth(*smoothed_bitrate); 740 audio_network_adaptor_->SetUplinkBandwidth(*smoothed_bitrate);
748 bitrate_smoother_last_update_time_ = rtc::Optional<int64_t>(now_ms); 741 bitrate_smoother_last_update_time_ = rtc::Optional<int64_t>(now_ms);
749 } 742 }
750 } 743 }
751 } 744 }
752 745
753 } // namespace webrtc 746 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698