Chromium Code Reviews| 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_) { |