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
This commit is contained in:
stefan@webrtc.org
2015-03-04 12:24:26 +00:00
parent 61c22aca5f
commit 792f1a14e2
20 changed files with 831 additions and 779 deletions

View File

@ -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 @@ namespace webrtc {
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 @@ class BitrateControllerImpl : public BitrateController {
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 @@ class BitrateControllerImpl : public BitrateController {
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_);