/* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "modules/audio_coding/audio_network_adaptor/dtx_controller.h" #include #include "test/gtest.h" namespace webrtc { namespace { constexpr int kDtxEnablingBandwidthBps = 55000; constexpr int kDtxDisablingBandwidthBps = 65000; constexpr int kMediumBandwidthBps = (kDtxEnablingBandwidthBps + kDtxDisablingBandwidthBps) / 2; std::unique_ptr CreateController(int initial_dtx_enabled) { std::unique_ptr controller(new DtxController( DtxController::Config(initial_dtx_enabled, kDtxEnablingBandwidthBps, kDtxDisablingBandwidthBps))); return controller; } void CheckDecision(DtxController* controller, const absl::optional& uplink_bandwidth_bps, bool expected_dtx_enabled) { if (uplink_bandwidth_bps) { Controller::NetworkMetrics network_metrics; network_metrics.uplink_bandwidth_bps = uplink_bandwidth_bps; controller->UpdateNetworkMetrics(network_metrics); } AudioEncoderRuntimeConfig config; controller->MakeDecision(&config); EXPECT_EQ(expected_dtx_enabled, config.enable_dtx); } } // namespace TEST(DtxControllerTest, OutputInitValueWhenUplinkBandwidthUnknown) { constexpr bool kInitialDtxEnabled = true; auto controller = CreateController(kInitialDtxEnabled); CheckDecision(controller.get(), absl::nullopt, kInitialDtxEnabled); } TEST(DtxControllerTest, TurnOnDtxForLowUplinkBandwidth) { auto controller = CreateController(false); CheckDecision(controller.get(), kDtxEnablingBandwidthBps, true); } TEST(DtxControllerTest, TurnOffDtxForHighUplinkBandwidth) { auto controller = CreateController(true); CheckDecision(controller.get(), kDtxDisablingBandwidthBps, false); } TEST(DtxControllerTest, MaintainDtxOffForMediumUplinkBandwidth) { auto controller = CreateController(false); CheckDecision(controller.get(), kMediumBandwidthBps, false); } TEST(DtxControllerTest, MaintainDtxOnForMediumUplinkBandwidth) { auto controller = CreateController(true); CheckDecision(controller.get(), kMediumBandwidthBps, true); } TEST(DtxControllerTest, CheckBehaviorOnChangingUplinkBandwidth) { auto controller = CreateController(false); CheckDecision(controller.get(), kMediumBandwidthBps, false); CheckDecision(controller.get(), kDtxEnablingBandwidthBps, true); CheckDecision(controller.get(), kMediumBandwidthBps, true); CheckDecision(controller.get(), kDtxDisablingBandwidthBps, false); } } // namespace webrtc