Break out allocation from BitrateController into a BitrateAllocator.

This also refactors some of the padding and allocation code in ViEEncoder, and
makes ChannelGroup a simple forwarder from BitrateController to
BitrateAllocator.

This CL is part of a bigger picture, see https://review.webrtc.org/35319004/ for
details.

BUG=4323
R=mflodman@webrtc.org, pbos@webrtc.org, sprang@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/44399004

Cr-Commit-Position: refs/heads/master@{#8595}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8595 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/bitrate_controller/bitrate_controller_impl.h b/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
index 7ec8fe8..1646f75 100644
--- a/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
+++ b/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
@@ -18,7 +18,6 @@
 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
 
 #include <list>
-#include <map>
 #include <utility>
 
 #include "webrtc/base/scoped_ptr.h"
@@ -30,61 +29,30 @@
 
 class BitrateControllerImpl : public BitrateController {
  public:
-  BitrateControllerImpl(Clock* clock, bool enforce_min_bitrate);
+  BitrateControllerImpl(Clock* clock, BitrateObserver* observer);
   virtual ~BitrateControllerImpl();
 
-  virtual bool AvailableBandwidth(uint32_t* bandwidth) const OVERRIDE;
+  virtual bool AvailableBandwidth(uint32_t* bandwidth) const override;
 
-  virtual RtcpBandwidthObserver* CreateRtcpBandwidthObserver() OVERRIDE;
+  virtual RtcpBandwidthObserver* CreateRtcpBandwidthObserver() override;
 
-  virtual void SetBitrateObserver(BitrateObserver* observer,
-                                  uint32_t start_bitrate,
-                                  uint32_t min_bitrate,
-                                  uint32_t max_bitrate) OVERRIDE;
+  virtual void SetStartBitrate(int start_bitrate_bps) override;
+  virtual void SetMinMaxBitrate(int min_bitrate_bps,
+                                int max_bitrate_bps) override;
 
-  virtual void RemoveBitrateObserver(BitrateObserver* observer) OVERRIDE;
+  virtual void SetReservedBitrate(uint32_t reserved_bitrate_bps) override;
 
-  virtual void EnforceMinBitrate(bool enforce_min_bitrate) OVERRIDE;
-  virtual void SetReservedBitrate(uint32_t reserved_bitrate_bps) OVERRIDE;
-
-  virtual int64_t TimeUntilNextProcess() OVERRIDE;
-  virtual int32_t Process() OVERRIDE;
+  virtual int64_t TimeUntilNextProcess() override;
+  virtual int32_t Process() override;
 
   // Current bitrate actually being sent.
-  virtual void SetBitrateSent(uint32_t bitrate_sent_bps) OVERRIDE;
+  virtual void SetBitrateSent(uint32_t bitrate_sent_bps) override;
 
-  virtual void SetCodecMode(webrtc::VideoCodecMode mode) OVERRIDE;
+  virtual void SetCodecMode(webrtc::VideoCodecMode mode) override;
 
  private:
   class RtcpBandwidthObserverImpl;
 
-  struct BitrateConfiguration {
-    BitrateConfiguration(uint32_t start_bitrate,
-                         uint32_t min_bitrate,
-                         uint32_t max_bitrate)
-        : start_bitrate_(start_bitrate),
-          min_bitrate_(min_bitrate),
-          max_bitrate_(max_bitrate) {
-    }
-    uint32_t start_bitrate_;
-    uint32_t min_bitrate_;
-    uint32_t max_bitrate_;
-  };
-  struct ObserverConfiguration {
-    ObserverConfiguration(BitrateObserver* observer,
-                          uint32_t bitrate)
-        : observer_(observer),
-          min_bitrate_(bitrate) {
-    }
-    BitrateObserver* observer_;
-    uint32_t min_bitrate_;
-  };
-  typedef std::pair<BitrateObserver*, BitrateConfiguration*>
-      BitrateObserverConfiguration;
-  typedef std::list<BitrateObserverConfiguration> BitrateObserverConfList;
-
-  void UpdateMinMaxBitrate() EXCLUSIVE_LOCKS_REQUIRED(*critsect_);
-
   // Called by BitrateObserver's direct from the RTCP module.
   void OnReceivedEstimatedBitrate(uint32_t bitrate);
 
@@ -93,37 +61,20 @@
                                     int number_of_packets,
                                     int64_t now_ms);
 
-  void MaybeTriggerOnNetworkChanged() EXCLUSIVE_LOCKS_REQUIRED(*critsect_);
+  void MaybeTriggerOnNetworkChanged();
 
   void OnNetworkChanged(uint32_t bitrate,
                         uint8_t fraction_loss,  // 0 - 255.
                         int64_t rtt)
       EXCLUSIVE_LOCKS_REQUIRED(*critsect_);
 
-  void NormalRateAllocation(uint32_t bitrate,
-                            uint8_t fraction_loss,
-                            int64_t rtt,
-                            uint32_t sum_min_bitrates)
-      EXCLUSIVE_LOCKS_REQUIRED(*critsect_);
-
-  void LowRateAllocation(uint32_t bitrate,
-                         uint8_t fraction_loss,
-                         int64_t rtt,
-                         uint32_t sum_min_bitrates)
-      EXCLUSIVE_LOCKS_REQUIRED(*critsect_);
-
-  typedef std::multimap<uint32_t, ObserverConfiguration*> ObserverSortingMap;
-
-  BitrateObserverConfList::iterator FindObserverConfigurationPair(
-      const BitrateObserver* observer) EXCLUSIVE_LOCKS_REQUIRED(*critsect_);
-
   // Used by process thread.
   Clock* clock_;
+  BitrateObserver* observer_;
   int64_t last_bitrate_update_ms_;
 
   CriticalSectionWrapper* critsect_;
   SendSideBandwidthEstimation bandwidth_estimation_ GUARDED_BY(*critsect_);
-  BitrateObserverConfList bitrate_observers_ GUARDED_BY(*critsect_);
   bool enforce_min_bitrate_ GUARDED_BY(*critsect_);
   uint32_t reserved_bitrate_bps_ GUARDED_BY(*critsect_);
 
@@ -131,7 +82,6 @@
   uint8_t last_fraction_loss_ GUARDED_BY(*critsect_);
   int64_t last_rtt_ms_ GUARDED_BY(*critsect_);
   bool last_enforce_min_bitrate_ GUARDED_BY(*critsect_);
-  bool bitrate_observers_modified_ GUARDED_BY(*critsect_);
   uint32_t last_reserved_bitrate_bps_ GUARDED_BY(*critsect_);
   rtc::scoped_ptr<RembSuppressor> remb_suppressor_ GUARDED_BY(*critsect_);