| Index: webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc
|
| diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc b/webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc
|
| index 997382f750312910d250737cf0662aec3aade256..a013c857b53d1388d13cc6515cc761b50a953c24 100644
|
| --- a/webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc
|
| +++ b/webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc
|
| @@ -22,32 +22,19 @@ constexpr float kFlIncreasingPacketLossFraction = 0.04f;
|
| constexpr float kFlDecreasingPacketLossFraction = 0.05f;
|
| constexpr int kFl20msTo60msBandwidthBps = 22000;
|
| constexpr int kFl60msTo20msBandwidthBps = 88000;
|
| -constexpr int kMinReceiverFrameLengthMs = 10;
|
| -constexpr int kMaxReceiverFrameLengthMs = 120;
|
| constexpr int kMediumBandwidthBps =
|
| (kFl60msTo20msBandwidthBps + kFl20msTo60msBandwidthBps) / 2;
|
| constexpr float kMediumPacketLossFraction =
|
| (kFlDecreasingPacketLossFraction + kFlIncreasingPacketLossFraction) / 2;
|
|
|
| -void SetReceiverFrameLengthRange(FrameLengthController* controller,
|
| - int min_frame_length_ms,
|
| - int max_frame_length_ms) {
|
| - Controller::Constraints constraints;
|
| - using FrameLengthRange = Controller::Constraints::FrameLengthRange;
|
| - constraints.receiver_frame_length_range = rtc::Optional<FrameLengthRange>(
|
| - FrameLengthRange(min_frame_length_ms, max_frame_length_ms));
|
| - controller->SetConstraints(constraints);
|
| -}
|
| -
|
| std::unique_ptr<FrameLengthController> CreateController(
|
| + const std::vector<int>& encoder_frame_lengths_ms,
|
| int initial_frame_length_ms) {
|
| std::unique_ptr<FrameLengthController> controller(
|
| new FrameLengthController(FrameLengthController::Config(
|
| - {20, 60}, initial_frame_length_ms, kFlIncreasingPacketLossFraction,
|
| - kFlDecreasingPacketLossFraction, kFl20msTo60msBandwidthBps,
|
| - kFl60msTo20msBandwidthBps)));
|
| - SetReceiverFrameLengthRange(controller.get(), kMinReceiverFrameLengthMs,
|
| - kMaxReceiverFrameLengthMs);
|
| + encoder_frame_lengths_ms, initial_frame_length_ms,
|
| + kFlIncreasingPacketLossFraction, kFlDecreasingPacketLossFraction,
|
| + kFl20msTo60msBandwidthBps, kFl60msTo20msBandwidthBps)));
|
| return controller;
|
| }
|
|
|
| @@ -68,44 +55,28 @@ void CheckDecision(FrameLengthController* controller,
|
|
|
| } // namespace
|
|
|
| -TEST(FrameLengthControllerTest,
|
| - OutputInitValueWhenReceiverFrameLengthRangeUnset) {
|
| - constexpr int kInitialFrameLenghtMs = 60;
|
| - std::unique_ptr<FrameLengthController> controller(
|
| - new FrameLengthController(FrameLengthController::Config(
|
| - {20, 60}, kInitialFrameLenghtMs, kFlIncreasingPacketLossFraction,
|
| - kFlDecreasingPacketLossFraction, kFl20msTo60msBandwidthBps,
|
| - kFl60msTo20msBandwidthBps)));
|
| - // Use a high uplink bandwidth that would cause frame length to decrease if
|
| - // receiver frame length is set.
|
| - CheckDecision(controller.get(), rtc::Optional<int>(kFl60msTo20msBandwidthBps),
|
| - rtc::Optional<float>(), rtc::Optional<bool>(),
|
| - kInitialFrameLenghtMs);
|
| -}
|
| -
|
| TEST(FrameLengthControllerTest, DecreaseTo20MsOnHighUplinkBandwidth) {
|
| - auto controller = CreateController(60);
|
| + auto controller = CreateController({20, 60}, 60);
|
| CheckDecision(controller.get(), rtc::Optional<int>(kFl60msTo20msBandwidthBps),
|
| rtc::Optional<float>(), rtc::Optional<bool>(), 20);
|
| }
|
|
|
| TEST(FrameLengthControllerTest, DecreaseTo20MsOnHighUplinkPacketLossFraction) {
|
| - auto controller = CreateController(60);
|
| + auto controller = CreateController({20, 60}, 60);
|
| CheckDecision(controller.get(), rtc::Optional<int>(),
|
| rtc::Optional<float>(kFlDecreasingPacketLossFraction),
|
| rtc::Optional<bool>(), 20);
|
| }
|
|
|
| TEST(FrameLengthControllerTest, DecreaseTo20MsWhenFecIsOn) {
|
| - auto controller = CreateController(60);
|
| + auto controller = CreateController({20, 60}, 60);
|
| CheckDecision(controller.get(), rtc::Optional<int>(), rtc::Optional<float>(),
|
| rtc::Optional<bool>(true), 20);
|
| }
|
|
|
| TEST(FrameLengthControllerTest,
|
| Maintain60MsIf20MsNotInReceiverFrameLengthRange) {
|
| - auto controller = CreateController(60);
|
| - SetReceiverFrameLengthRange(controller.get(), 21, 60);
|
| + auto controller = CreateController({60}, 60);
|
| // Set FEC on that would cause frame length to decrease if receiver frame
|
| // length range included 20ms.
|
| CheckDecision(controller.get(), rtc::Optional<int>(), rtc::Optional<float>(),
|
| @@ -117,7 +88,7 @@ TEST(FrameLengthControllerTest, Maintain60MsOnMultipleConditions) {
|
| // 1. |uplink_bandwidth_bps| is at medium level,
|
| // 2. |uplink_packet_loss_fraction| is at medium,
|
| // 3. FEC is not decided ON.
|
| - auto controller = CreateController(60);
|
| + auto controller = CreateController({20, 60}, 60);
|
| CheckDecision(controller.get(), rtc::Optional<int>(kMediumBandwidthBps),
|
| rtc::Optional<float>(kMediumPacketLossFraction),
|
| rtc::Optional<bool>(), 60);
|
| @@ -129,7 +100,7 @@ TEST(FrameLengthControllerTest, IncreaseTo60MsOnMultipleConditions) {
|
| // 2. |uplink_packet_loss_fraction| is known to be smaller than a threshold
|
| // AND
|
| // 3. FEC is not decided or OFF.
|
| - auto controller = CreateController(20);
|
| + auto controller = CreateController({20, 60}, 20);
|
| CheckDecision(controller.get(), rtc::Optional<int>(kFl20msTo60msBandwidthBps),
|
| rtc::Optional<float>(kFlIncreasingPacketLossFraction),
|
| rtc::Optional<bool>(), 60);
|
| @@ -137,8 +108,7 @@ TEST(FrameLengthControllerTest, IncreaseTo60MsOnMultipleConditions) {
|
|
|
| TEST(FrameLengthControllerTest,
|
| Maintain20MsIf60MsNotInReceiverFrameLengthRange) {
|
| - auto controller = CreateController(20);
|
| - SetReceiverFrameLengthRange(controller.get(), 10, 59);
|
| + auto controller = CreateController({20}, 20);
|
| // Use a low uplink bandwidth and a low uplink packet loss fraction that would
|
| // cause frame length to increase if receiver frame length included 60ms.
|
| CheckDecision(controller.get(), rtc::Optional<int>(kFl20msTo60msBandwidthBps),
|
| @@ -147,14 +117,14 @@ TEST(FrameLengthControllerTest,
|
| }
|
|
|
| TEST(FrameLengthControllerTest, Maintain20MsOnMediumUplinkBandwidth) {
|
| - auto controller = CreateController(20);
|
| + auto controller = CreateController({20, 60}, 20);
|
| CheckDecision(controller.get(), rtc::Optional<int>(kMediumBandwidthBps),
|
| rtc::Optional<float>(kFlIncreasingPacketLossFraction),
|
| rtc::Optional<bool>(), 20);
|
| }
|
|
|
| TEST(FrameLengthControllerTest, Maintain20MsOnMediumUplinkPacketLossFraction) {
|
| - auto controller = CreateController(20);
|
| + auto controller = CreateController({20, 60}, 20);
|
| // Use a low uplink bandwidth that would cause frame length to increase if
|
| // uplink packet loss fraction was low.
|
| CheckDecision(controller.get(), rtc::Optional<int>(kFl20msTo60msBandwidthBps),
|
| @@ -163,7 +133,7 @@ TEST(FrameLengthControllerTest, Maintain20MsOnMediumUplinkPacketLossFraction) {
|
| }
|
|
|
| TEST(FrameLengthControllerTest, Maintain20MsWhenFecIsOn) {
|
| - auto controller = CreateController(20);
|
| + auto controller = CreateController({20, 60}, 20);
|
| // Use a low uplink bandwidth and a low uplink packet loss fraction that would
|
| // cause frame length to increase if FEC was not ON.
|
| CheckDecision(controller.get(), rtc::Optional<int>(kFl20msTo60msBandwidthBps),
|
| @@ -171,16 +141,6 @@ TEST(FrameLengthControllerTest, Maintain20MsWhenFecIsOn) {
|
| rtc::Optional<bool>(true), 20);
|
| }
|
|
|
| -TEST(FrameLengthControllerTest,
|
| - MaintainFrameLengthOnSetReceiverFrameLengthRange) {
|
| - auto controller = CreateController(60);
|
| - CheckDecision(controller.get(), rtc::Optional<int>(), rtc::Optional<float>(),
|
| - rtc::Optional<bool>(true), 20);
|
| - SetReceiverFrameLengthRange(controller.get(), 10, 60);
|
| - CheckDecision(controller.get(), rtc::Optional<int>(), rtc::Optional<float>(),
|
| - rtc::Optional<bool>(), 20);
|
| -}
|
| -
|
| namespace {
|
| constexpr int kFl60msTo120msBandwidthBps = 18000;
|
| constexpr int kFl120msTo60msBandwidthBps = 72000;
|
| @@ -191,9 +151,10 @@ class FrameLengthControllerForTest {
|
| // This class is to test multiple frame lengths. FrameLengthController is
|
| // implemented to support this, but is not enabled for the default constructor
|
| // for the time being. We use this class to test it.
|
| - explicit FrameLengthControllerForTest(int initial_frame_length_ms)
|
| + FrameLengthControllerForTest(const std::vector<int>& encoder_frame_lengths_ms,
|
| + int initial_frame_length_ms)
|
| : frame_length_controller_(
|
| - FrameLengthController::Config({20, 60, 120},
|
| + FrameLengthController::Config(encoder_frame_lengths_ms,
|
| initial_frame_length_ms,
|
| kFlIncreasingPacketLossFraction,
|
| kFlDecreasingPacketLossFraction,
|
| @@ -205,7 +166,6 @@ class FrameLengthControllerForTest {
|
| frame_length_controller_.frame_length_change_criteria_.insert(
|
| std::make_pair(FrameLengthController::FrameLengthChange(120, 60),
|
| kFl120msTo60msBandwidthBps));
|
| - frame_length_controller_.SetReceiverFrameLengthRange(20, 120);
|
| }
|
| FrameLengthController* get() { return &frame_length_controller_; }
|
|
|
| @@ -214,7 +174,7 @@ class FrameLengthControllerForTest {
|
| };
|
|
|
| TEST(FrameLengthControllerTest, From120MsTo20MsOnHighUplinkBandwidth) {
|
| - FrameLengthControllerForTest controller(120);
|
| + FrameLengthControllerForTest controller({20, 60, 120}, 120);
|
| // It takes two steps for frame length to go from 120ms to 20ms.
|
| CheckDecision(controller.get(), rtc::Optional<int>(kFl60msTo20msBandwidthBps),
|
| rtc::Optional<float>(), rtc::Optional<bool>(), 60);
|
| @@ -223,7 +183,7 @@ TEST(FrameLengthControllerTest, From120MsTo20MsOnHighUplinkBandwidth) {
|
| }
|
|
|
| TEST(FrameLengthControllerTest, From120MsTo20MsOnHighUplinkPacketLossFraction) {
|
| - FrameLengthControllerForTest controller(120);
|
| + FrameLengthControllerForTest controller({20, 60, 120}, 120);
|
| // It takes two steps for frame length to go from 120ms to 20ms.
|
| CheckDecision(controller.get(), rtc::Optional<int>(),
|
| rtc::Optional<float>(kFlDecreasingPacketLossFraction),
|
| @@ -234,7 +194,7 @@ TEST(FrameLengthControllerTest, From120MsTo20MsOnHighUplinkPacketLossFraction) {
|
| }
|
|
|
| TEST(FrameLengthControllerTest, From120MsTo20MsWhenFecIsOn) {
|
| - FrameLengthControllerForTest controller(120);
|
| + FrameLengthControllerForTest controller({20, 60, 120}, 120);
|
| // It takes two steps for frame length to go from 120ms to 20ms.
|
| CheckDecision(controller.get(), rtc::Optional<int>(), rtc::Optional<float>(),
|
| rtc::Optional<bool>(true), 60);
|
| @@ -248,7 +208,7 @@ TEST(FrameLengthControllerTest, From20MsTo120MsOnMultipleConditions) {
|
| // 2. |uplink_packet_loss_fraction| is known to be smaller than a threshold
|
| // AND
|
| // 3. FEC is not decided or OFF.
|
| - FrameLengthControllerForTest controller(20);
|
| + FrameLengthControllerForTest controller({20, 60, 120}, 20);
|
| // It takes two steps for frame length to go from 20ms to 120ms.
|
| CheckDecision(controller.get(),
|
| rtc::Optional<int>(kFl60msTo120msBandwidthBps),
|
| @@ -261,8 +221,7 @@ TEST(FrameLengthControllerTest, From20MsTo120MsOnMultipleConditions) {
|
| }
|
|
|
| TEST(FrameLengthControllerTest, Stall60MsIf120MsNotInReceiverFrameLengthRange) {
|
| - FrameLengthControllerForTest controller(20);
|
| - SetReceiverFrameLengthRange(controller.get(), 20, 119);
|
| + FrameLengthControllerForTest controller({20, 60}, 20);
|
| CheckDecision(controller.get(),
|
| rtc::Optional<int>(kFl60msTo120msBandwidthBps),
|
| rtc::Optional<float>(kFlIncreasingPacketLossFraction),
|
| @@ -274,7 +233,7 @@ TEST(FrameLengthControllerTest, Stall60MsIf120MsNotInReceiverFrameLengthRange) {
|
| }
|
|
|
| TEST(FrameLengthControllerTest, CheckBehaviorOnChangingNetworkMetrics) {
|
| - FrameLengthControllerForTest controller(20);
|
| + FrameLengthControllerForTest controller({20, 60, 120}, 20);
|
| CheckDecision(controller.get(), rtc::Optional<int>(kMediumBandwidthBps),
|
| rtc::Optional<float>(kFlIncreasingPacketLossFraction),
|
| rtc::Optional<bool>(), 20);
|
|
|