Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(444)

Unified Diff: webrtc/modules/rtp_rtcp/source/rtcp_sender.cc

Issue 2531383002: Wire up BitrateAllocation to be sent as RTCP TargetBitrate (Closed)
Patch Set: Flaky test, racy shutdown Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
index e6cf6695226fcd803558ddf5b4f2b80aae8f2c7a..6b95ac1c23520dbe41b6f8d44a34a2b61441b526 100644
--- a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
@@ -201,6 +201,7 @@ RTCPSender::RTCPSender(
builders_[kRtcpXrReceiverReferenceTime] =
&RTCPSender::BuildReceiverReferenceTime;
builders_[kRtcpXrDlrrReportBlock] = &RTCPSender::BuildDlrr;
+ builders_[kRtcpTargetBitrate] = &RTCPSender::BuildTargetBitrate;
}
RTCPSender::~RTCPSender() {}
@@ -853,6 +854,8 @@ void RTCPSender::PrepareReport(const FeedbackState& feedback_state) {
SetFlag(kRtcpXrReceiverReferenceTime, true);
if (feedback_state.has_last_xr_rr)
SetFlag(kRtcpXrDlrrReportBlock, true);
+ if (video_bitrate_allocation_)
+ SetFlag(kRtcpTargetBitrate, true);
// generate next time to send an RTCP report
uint32_t minIntervalMs = RTCP_INTERVAL_AUDIO_MS;
@@ -1012,6 +1015,33 @@ bool RTCPSender::AllVolatileFlagsConsumed() const {
return true;
}
+std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildTargetBitrate(
danilchap 2016/11/29 10:39:31 move this methods to other Builders, after BuildDl
sprang_webrtc 2016/11/29 12:24:01 Done.
+ const RtcpContext& ctx) {
+ RTC_DCHECK(video_bitrate_allocation_);
+
danilchap 2016/11/29 10:39:31 It became more important now to merge different XR
sprang_webrtc 2016/11/29 12:24:01 Agree. I actually had a todo about that here but r
+ std::unique_ptr<rtcp::ExtendedReports> xr(new rtcp::ExtendedReports());
+ xr->SetSenderSsrc(ssrc_);
+ rtcp::TargetBitrate target_bitrate;
+
+ for (int sl = 0; sl < kMaxSpatialLayers; ++sl) {
+ for (int tl = 0; tl < kMaxTemporalStreams; ++tl) {
+ uint32_t layer_bitrate_bps =
+ video_bitrate_allocation_->GetBitrate(sl, tl);
+ if (layer_bitrate_bps > 0)
+ target_bitrate.AddTargetBitrate(sl, tl, layer_bitrate_bps / 1000);
+ }
+ }
+
+ xr->SetTargetBitrate(target_bitrate);
+ video_bitrate_allocation_ = rtc::Optional<BitrateAllocation>();
danilchap 2016/11/29 10:39:31 may be video_bitrate_allocation_.reset();
sprang_webrtc 2016/11/29 12:24:01 Done. Nice, haven't seen that you added this and e
danilchap 2016/11/29 13:13:14 nope, nothing except cl https://codereview.webrtc.
+ return std::unique_ptr<rtcp::RtcpPacket>(xr.release());
danilchap 2016/11/29 10:39:31 return std::move(xr); should work alternatively ma
sprang_webrtc 2016/11/29 12:24:01 Done.
+}
+
+void RTCPSender::SetVideoBitrateAllocation(const BitrateAllocation& bitrate) {
+ rtc::CritScope lock(&critical_section_rtcp_sender_);
+ video_bitrate_allocation_ = rtc::Optional<BitrateAllocation>(bitrate);
danilchap 2016/11/29 10:39:31 video_bitrate_allocation_.emplace(bitrate); will w
sprang_webrtc 2016/11/29 12:24:01 Done.
+}
+
bool RTCPSender::SendFeedbackPacket(const rtcp::TransportFeedback& packet) {
class Sender : public rtcp::RtcpPacket::PacketReadyCallback {
public:

Powered by Google App Engine
This is Rietveld 408576698