Index: webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.cc |
index 5775dd4ffc6831dff365baccb54a9f478d21c105..4c02c1ab1ad789cb2920e985194ebc78bf4b3336 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.cc |
@@ -55,6 +55,7 @@ bool ExtendedReports::Parse(const CommonHeader& packet) { |
rrtr_block_.reset(); |
dlrr_block_.ClearItems(); |
voip_metric_block_.reset(); |
+ target_bitrate_ = rtc::Optional<TargetBitrate>(); |
const uint8_t* current_block = packet.payload() + kXrBaseLength; |
const uint8_t* const packet_end = |
@@ -80,6 +81,9 @@ bool ExtendedReports::Parse(const CommonHeader& packet) { |
case VoipMetric::kBlockType: |
ParseVoipMetricBlock(current_block, block_length); |
break; |
+ case TargetBitrate::kBlockType: |
+ ParseTargetBitrateBlock(current_block, block_length); |
+ break; |
default: |
// Unknown block, ignore. |
LOG(LS_WARNING) << "Unknown extended report block type " << block_type; |
@@ -107,6 +111,13 @@ void ExtendedReports::SetVoipMetric(const VoipMetric& voip_metric) { |
voip_metric_block_.emplace(voip_metric); |
} |
+void ExtendedReports::SetTargetBitrate(const TargetBitrate& bitrate) { |
+ if (target_bitrate_) |
+ LOG(LS_WARNING) << "TargetBitrate already set, overwriting."; |
+ |
+ target_bitrate_ = rtc::Optional<TargetBitrate>(bitrate); |
+} |
+ |
bool ExtendedReports::Create(uint8_t* packet, |
size_t* index, |
size_t max_length, |
@@ -132,10 +143,20 @@ bool ExtendedReports::Create(uint8_t* packet, |
voip_metric_block_->Create(packet + *index); |
*index += VoipMetric::kLength; |
} |
+ if (target_bitrate_) { |
+ target_bitrate_->Create(packet + *index); |
+ *index += target_bitrate_->BlockLength(); |
+ } |
RTC_CHECK_EQ(*index, index_end); |
return true; |
} |
+size_t ExtendedReports::TargetBitrateLength() const { |
+ if (target_bitrate_) |
+ return target_bitrate_->BlockLength(); |
+ return 0; |
+} |
+ |
void ExtendedReports::ParseRrtrBlock(const uint8_t* block, |
uint16_t block_length) { |
if (block_length != Rrtr::kBlockLength) { |
@@ -175,5 +196,12 @@ void ExtendedReports::ParseVoipMetricBlock(const uint8_t* block, |
voip_metric_block_.emplace(); |
voip_metric_block_->Parse(block); |
} |
+ |
+void ExtendedReports::ParseTargetBitrateBlock(const uint8_t* block, |
+ uint16_t block_length) { |
+ target_bitrate_ = rtc::Optional<TargetBitrate>(TargetBitrate()); |
+ if (!target_bitrate_->Parse(block, block_length)) |
+ target_bitrate_ = rtc::Optional<TargetBitrate>(); |
+} |
} // namespace rtcp |
} // namespace webrtc |