| Index: webrtc/call/bitrate_allocator.h
|
| diff --git a/webrtc/call/bitrate_allocator.h b/webrtc/call/bitrate_allocator.h
|
| index 9d97720629b14998cdf7cbea3669da1e72bc03ea..ea3810ed371c6f8fdb832013248baa9e56668756 100644
|
| --- a/webrtc/call/bitrate_allocator.h
|
| +++ b/webrtc/call/bitrate_allocator.h
|
| @@ -14,10 +14,13 @@
|
| #include <stdint.h>
|
|
|
| #include <map>
|
| +#include <set>
|
| +#include <string>
|
| #include <utility>
|
| #include <vector>
|
| -#include <string>
|
|
|
| +#include "webrtc/rtc_base/bitrateallocationstrategy.h"
|
| +#include "webrtc/rtc_base/scoped_ref_ptr.h"
|
| #include "webrtc/rtc_base/sequenced_task_checker.h"
|
|
|
| namespace webrtc {
|
| @@ -94,40 +97,42 @@ class BitrateAllocator {
|
| // the list of added observers, a best guess is returned.
|
| int GetStartBitrate(BitrateAllocatorObserver* observer);
|
|
|
| + // Sets external allocation strategy. If strategy is not set default WEBRTC
|
| + // allocation mechanism will be used. The strategy may be changed during call.
|
| + // Setting NULL value will restore default WEBRTC allocation strategy.
|
| + void SetBitrateAllocationStrategy(
|
| + rtc::scoped_refptr<rtc::BitrateAllocationStrategy>
|
| + bitrate_allocation_strategy);
|
| +
|
| private:
|
| // Note: All bitrates for member variables and methods are in bps.
|
| - struct ObserverConfig {
|
| + struct ObserverConfig : rtc::BitrateAllocationStrategy::TrackConfig {
|
| ObserverConfig(BitrateAllocatorObserver* observer,
|
| uint32_t min_bitrate_bps,
|
| uint32_t max_bitrate_bps,
|
| uint32_t pad_up_bitrate_bps,
|
| bool enforce_min_bitrate,
|
| std::string track_id)
|
| - : observer(observer),
|
| - min_bitrate_bps(min_bitrate_bps),
|
| - max_bitrate_bps(max_bitrate_bps),
|
| + : TrackConfig(min_bitrate_bps,
|
| + max_bitrate_bps,
|
| + enforce_min_bitrate,
|
| + track_id),
|
| + observer(observer),
|
| pad_up_bitrate_bps(pad_up_bitrate_bps),
|
| - enforce_min_bitrate(enforce_min_bitrate),
|
| allocated_bitrate_bps(-1),
|
| - media_ratio(1.0),
|
| - track_id(track_id) {}
|
| + media_ratio(1.0) {}
|
|
|
| BitrateAllocatorObserver* observer;
|
| - uint32_t min_bitrate_bps;
|
| - uint32_t max_bitrate_bps;
|
| uint32_t pad_up_bitrate_bps;
|
| - bool enforce_min_bitrate;
|
| int64_t allocated_bitrate_bps;
|
| double media_ratio; // Part of the total bitrate used for media [0.0, 1.0].
|
| - std::string track_id;
|
| };
|
|
|
| // Calculates the minimum requested send bitrate and max padding bitrate and
|
| // calls LimitObserver::OnAllocationLimitsChanged.
|
| void UpdateAllocationLimits();
|
|
|
| - typedef std::vector<ObserverConfig> ObserverConfigs;
|
| - ObserverConfigs::iterator FindObserverConfig(
|
| + rtc::BitrateAllocationStrategy::TrackConfigs::iterator FindObserverConfig(
|
| const BitrateAllocatorObserver* observer);
|
|
|
| typedef std::multimap<uint32_t, const ObserverConfig*> ObserverSortingMap;
|
| @@ -160,7 +165,8 @@ class BitrateAllocator {
|
| rtc::SequencedTaskChecker sequenced_checker_;
|
| LimitObserver* const limit_observer_ GUARDED_BY(&sequenced_checker_);
|
| // Stored in a list to keep track of the insertion order.
|
| - ObserverConfigs bitrate_observer_configs_ GUARDED_BY(&sequenced_checker_);
|
| + rtc::BitrateAllocationStrategy::TrackConfigs bitrate_observer_configs_
|
| + GUARDED_BY(&sequenced_checker_);
|
| uint32_t last_bitrate_bps_ GUARDED_BY(&sequenced_checker_);
|
| uint32_t last_non_zero_bitrate_bps_ GUARDED_BY(&sequenced_checker_);
|
| uint8_t last_fraction_loss_ GUARDED_BY(&sequenced_checker_);
|
| @@ -172,6 +178,8 @@ class BitrateAllocator {
|
| int64_t last_bwe_log_time_ GUARDED_BY(&sequenced_checker_);
|
| uint32_t total_requested_padding_bitrate_ GUARDED_BY(&sequenced_checker_);
|
| uint32_t total_requested_min_bitrate_ GUARDED_BY(&sequenced_checker_);
|
| + rtc::scoped_refptr<rtc::BitrateAllocationStrategy>
|
| + bitrate_allocation_strategy_ GUARDED_BY(&sequenced_checker_);
|
| };
|
| } // namespace webrtc
|
| #endif // WEBRTC_CALL_BITRATE_ALLOCATOR_H_
|
|
|