1 /* 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "modules/audio_coding/audio_network_adaptor/dtx_controller.h" 12 13 #include "rtc_base/checks.h" 14 15 namespace webrtc { 16 Config(bool initial_dtx_enabled,int dtx_enabling_bandwidth_bps,int dtx_disabling_bandwidth_bps)17DtxController::Config::Config(bool initial_dtx_enabled, 18 int dtx_enabling_bandwidth_bps, 19 int dtx_disabling_bandwidth_bps) 20 : initial_dtx_enabled(initial_dtx_enabled), 21 dtx_enabling_bandwidth_bps(dtx_enabling_bandwidth_bps), 22 dtx_disabling_bandwidth_bps(dtx_disabling_bandwidth_bps) {} 23 DtxController(const Config & config)24DtxController::DtxController(const Config& config) 25 : config_(config), dtx_enabled_(config_.initial_dtx_enabled) {} 26 27 DtxController::~DtxController() = default; 28 UpdateNetworkMetrics(const NetworkMetrics & network_metrics)29void DtxController::UpdateNetworkMetrics( 30 const NetworkMetrics& network_metrics) { 31 if (network_metrics.uplink_bandwidth_bps) 32 uplink_bandwidth_bps_ = network_metrics.uplink_bandwidth_bps; 33 } 34 MakeDecision(AudioEncoderRuntimeConfig * config)35void DtxController::MakeDecision(AudioEncoderRuntimeConfig* config) { 36 // Decision on `enable_dtx` should not have been made. 37 RTC_DCHECK(!config->enable_dtx); 38 39 if (uplink_bandwidth_bps_) { 40 if (dtx_enabled_ && 41 *uplink_bandwidth_bps_ >= config_.dtx_disabling_bandwidth_bps) { 42 dtx_enabled_ = false; 43 } else if (!dtx_enabled_ && 44 *uplink_bandwidth_bps_ <= config_.dtx_enabling_bandwidth_bps) { 45 dtx_enabled_ = true; 46 } 47 } 48 config->enable_dtx = dtx_enabled_; 49 } 50 51 } // namespace webrtc 52