Index: webrtc/common_types.cc |
diff --git a/webrtc/common_types.cc b/webrtc/common_types.cc |
index 8f117e11530b027fd80aea33354804ec8676e326..d543552bfc59557c0fe3e520b72f0b1e0db2f7e2 100644 |
--- a/webrtc/common_types.cc |
+++ b/webrtc/common_types.cc |
@@ -10,6 +10,8 @@ |
#include "webrtc/common_types.h" |
+#include "webrtc/base/checks.h" |
+ |
#include <string.h> |
namespace webrtc { |
@@ -42,4 +44,38 @@ RTPHeader::RTPHeader() |
payload_type_frequency(0), |
extension() {} |
+BitrateAllocation::BitrateAllocation() : sum_(0), bitrates_{} {} |
+ |
+bool BitrateAllocation::SetBitrate(size_t spatial_index, |
+ size_t temporal_index, |
+ uint32_t bitrate_bps) { |
+ RTC_DCHECK_LT(spatial_index, static_cast<size_t>(kMaxSpatialLayers)); |
+ RTC_DCHECK_LT(temporal_index, static_cast<size_t>(kMaxTemporalStreams)); |
+ if (bitrate_bps > kMaxBitrateBps || |
+ sum_ - bitrates_[spatial_index][temporal_index] + bitrate_bps > |
+ kMaxBitrateBps) { |
+ return false; |
+ } |
+ sum_ -= bitrates_[spatial_index][temporal_index]; |
+ bitrates_[spatial_index][temporal_index] = bitrate_bps; |
+ sum_ += bitrate_bps; |
+ return true; |
+} |
+ |
+uint32_t BitrateAllocation::GetBitrate(size_t spatial_index, |
+ size_t temporal_index) const { |
+ RTC_DCHECK_LT(spatial_index, static_cast<size_t>(kMaxSpatialLayers)); |
+ RTC_DCHECK_LT(temporal_index, static_cast<size_t>(kMaxTemporalStreams)); |
+ return bitrates_[spatial_index][temporal_index]; |
+} |
+ |
+// Get the sum of all the temporal layer for a specific spatial layer. |
+uint32_t BitrateAllocation::GetSpatialLayerSum(size_t spatial_index) const { |
+ RTC_DCHECK_LT(spatial_index, static_cast<size_t>(kMaxSpatialLayers)); |
+ uint32_t sum = 0; |
+ for (int i = 0; i < kMaxTemporalStreams; ++i) |
+ sum += bitrates_[spatial_index][i]; |
+ return sum; |
+} |
+ |
} // namespace webrtc |