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

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

Issue 1338203003: Wire up send-side bandwidth estimation. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 3 months 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_receiver.cc
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc b/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc
index 732772c9f7a32cf1dcc3944469771b79b5ef56e9..2c050b02d6ab506f0db1bf860bef294a875082ac 100644
--- a/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc
@@ -36,6 +36,7 @@ RTCPReceiver::RTCPReceiver(
RtcpPacketTypeCounterObserver* packet_type_counter_observer,
RtcpBandwidthObserver* rtcp_bandwidth_observer,
RtcpIntraFrameObserver* rtcp_intra_frame_observer,
+ TransportFeedbackObserver* transport_feedback_observer,
ModuleRtpRtcpImpl* owner)
: TMMBRHelp(),
_clock(clock),
@@ -47,6 +48,7 @@ RTCPReceiver::RTCPReceiver(
CriticalSectionWrapper::CreateCriticalSection()),
_cbRtcpBandwidthObserver(rtcp_bandwidth_observer),
_cbRtcpIntraFrameObserver(rtcp_intra_frame_observer),
+ _cbTransportFeedbackObserver(transport_feedback_observer),
_criticalSectionRTCPReceiver(
CriticalSectionWrapper::CreateCriticalSection()),
main_ssrc_(0),
@@ -350,6 +352,9 @@ RTCPReceiver::IncomingRTCPPacket(RTCPPacketInformation& rtcpPacketInformation,
// generic application messages
HandleAPPItem(*rtcpParser, rtcpPacketInformation);
break;
+ case RTCPPacketTypes::kTransportFeedback:
+ HandleTransportFeedback(rtcpParser, &rtcpPacketInformation);
+ break;
default:
rtcpParser->Iterate();
break;
@@ -1253,6 +1258,17 @@ void RTCPReceiver::HandleAPPItem(RTCPUtility::RTCPParserV2& rtcpParser,
rtcpParser.Iterate();
}
+void RTCPReceiver::HandleTransportFeedback(
+ RTCPUtility::RTCPParserV2* rtcp_parser,
+ RTCPHelp::RTCPPacketInformation* rtcp_packet_information) {
+ rtcp::RtcpPacket* packet = rtcp_parser->ReleaseRtcpPacket();
+ DCHECK(packet != nullptr);
+ rtcp_packet_information->rtcpPacketTypeFlags |= kRtcpTransportFeedback;
stefan-webrtc 2015/09/17 10:33:19 I find it a bit strange that we use this flag when
sprang_webrtc 2015/09/17 15:08:28 Yeah. I'm just following suit. Definitely the whol
stefan-webrtc 2015/09/18 10:57:23 I think we have to outline how this is going to lo
sprang_webrtc 2015/09/21 10:44:10 Why would we want to end up somewhere suboptimal?
stefan-webrtc 2015/09/21 11:13:16 I mostly meant that we probably should have an ide
+ rtcp_packet_information->transport_feedback_.reset(
+ static_cast<rtcp::TransportFeedback*>(packet));
+
+ rtcp_parser->Iterate();
+}
int32_t RTCPReceiver::UpdateTMMBR() {
int32_t numBoundingSet = 0;
uint32_t bitrate = 0;
@@ -1322,11 +1338,11 @@ void RTCPReceiver::TriggerCallbacksFromRTCPPacket(
local_ssrc = main_ssrc_;
}
if (!receiver_only_ &&
- rtcpPacketInformation.rtcpPacketTypeFlags & kRtcpSrReq) {
+ (rtcpPacketInformation.rtcpPacketTypeFlags & kRtcpSrReq)) {
_rtpRtcp.OnRequestSendReport();
}
if (!receiver_only_ &&
- rtcpPacketInformation.rtcpPacketTypeFlags & kRtcpNack) {
+ (rtcpPacketInformation.rtcpPacketTypeFlags & kRtcpNack)) {
if (rtcpPacketInformation.nackSequenceNumbers.size() > 0) {
LOG(LS_VERBOSE) << "Incoming NACK length: "
<< rtcpPacketInformation.nackSequenceNumbers.size();
@@ -1377,6 +1393,17 @@ void RTCPReceiver::TriggerCallbacksFromRTCPPacket(
now);
}
}
+ if (_cbTransportFeedbackObserver &&
+ (rtcpPacketInformation.rtcpPacketTypeFlags & kRtcpTransportFeedback)) {
+ uint32_t media_source_ssrc =
+ rtcpPacketInformation.transport_feedback_->GetMediaSourceSsrc();
+ if (media_source_ssrc == main_ssrc_ ||
+ registered_ssrcs_.find(media_source_ssrc) !=
+ registered_ssrcs_.end()) {
+ _cbTransportFeedbackObserver->OnTransportFeedback(
+ *rtcpPacketInformation.transport_feedback_.get());
+ }
+ }
}
if (!receiver_only_) {

Powered by Google App Engine
This is Rietveld 408576698