Allowing 40ms audio frame length.

Currently 20ms, 60ms and 120ms frame length are supported. The motivation is to better adapt audio bit rate to network conditions with more frame length choices.

This is continuation of https://webrtc-review.googlesource.com/c/src/+/146206, since crodbro is out of office, I created this commit for continuing the code review.

Bug: webrtc:10820
Change-Id: I0e35e91b524f63686bfdf767b7a95c51aeb24716
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/146780
Reviewed-by: Minyue Li <minyue@webrtc.org>
Reviewed-by: Alex Narest <alexnarest@webrtc.org>
Reviewed-by: Bjorn Mellem <mellem@webrtc.org>
Commit-Queue: Ying Wang <yinwa@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28882}
diff --git a/modules/audio_coding/audio_network_adaptor/controller_manager.cc b/modules/audio_coding/audio_network_adaptor/controller_manager.cc
index 4c0e61c..f22df54 100644
--- a/modules/audio_coding/audio_network_adaptor/controller_manager.cc
+++ b/modules/audio_coding/audio_network_adaptor/controller_manager.cc
@@ -118,21 +118,53 @@
     int min_encoder_bitrate_bps) {
   RTC_CHECK(config.has_fl_increasing_packet_loss_fraction());
   RTC_CHECK(config.has_fl_decreasing_packet_loss_fraction());
-  RTC_CHECK(config.has_fl_20ms_to_60ms_bandwidth_bps());
-  RTC_CHECK(config.has_fl_60ms_to_20ms_bandwidth_bps());
 
   std::map<FrameLengthController::Config::FrameLengthChange, int>
-      fl_changing_bandwidths_bps = {
-          {FrameLengthController::Config::FrameLengthChange(20, 60),
-           config.fl_20ms_to_60ms_bandwidth_bps()},
-          {FrameLengthController::Config::FrameLengthChange(60, 20),
-           config.fl_60ms_to_20ms_bandwidth_bps()}};
+      fl_changing_bandwidths_bps;
 
-  if (config.has_fl_60ms_to_120ms_bandwidth_bps() &&
-      config.has_fl_120ms_to_60ms_bandwidth_bps()) {
+  if (config.has_fl_20ms_to_60ms_bandwidth_bps()) {
+    fl_changing_bandwidths_bps.insert(
+        std::make_pair(FrameLengthController::Config::FrameLengthChange(20, 60),
+                       config.fl_20ms_to_60ms_bandwidth_bps()));
+  }
+
+  if (config.has_fl_60ms_to_20ms_bandwidth_bps()) {
+    fl_changing_bandwidths_bps.insert(
+        std::make_pair(FrameLengthController::Config::FrameLengthChange(60, 20),
+                       config.fl_60ms_to_20ms_bandwidth_bps()));
+  }
+
+  if (config.has_fl_20ms_to_40ms_bandwidth_bps()) {
+    fl_changing_bandwidths_bps.insert(
+        std::make_pair(FrameLengthController::Config::FrameLengthChange(20, 40),
+                       config.fl_20ms_to_40ms_bandwidth_bps()));
+  }
+
+  if (config.has_fl_40ms_to_20ms_bandwidth_bps()) {
+    fl_changing_bandwidths_bps.insert(
+        std::make_pair(FrameLengthController::Config::FrameLengthChange(40, 20),
+                       config.fl_40ms_to_20ms_bandwidth_bps()));
+  }
+
+  if (config.has_fl_40ms_to_60ms_bandwidth_bps()) {
+    fl_changing_bandwidths_bps.insert(
+        std::make_pair(FrameLengthController::Config::FrameLengthChange(40, 60),
+                       config.fl_40ms_to_60ms_bandwidth_bps()));
+  }
+
+  if (config.has_fl_60ms_to_40ms_bandwidth_bps()) {
+    fl_changing_bandwidths_bps.insert(
+        std::make_pair(FrameLengthController::Config::FrameLengthChange(60, 40),
+                       config.fl_60ms_to_40ms_bandwidth_bps()));
+  }
+
+  if (config.has_fl_60ms_to_120ms_bandwidth_bps()) {
     fl_changing_bandwidths_bps.insert(std::make_pair(
         FrameLengthController::Config::FrameLengthChange(60, 120),
         config.fl_60ms_to_120ms_bandwidth_bps()));
+  }
+
+  if (config.has_fl_120ms_to_60ms_bandwidth_bps()) {
     fl_changing_bandwidths_bps.insert(std::make_pair(
         FrameLengthController::Config::FrameLengthChange(120, 60),
         config.fl_120ms_to_60ms_bandwidth_bps()));