diff options
Diffstat (limited to 'webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc')
-rw-r--r-- | webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc index 451f8bfa93..450eed698e 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc @@ -183,8 +183,13 @@ int32_t ModuleRtpRtcpImpl::Process() { set_rtt_ms(rtt_stats_->LastProcessedRtt()); } - if (rtcp_sender_.TimeToSendRTCPReport()) - rtcp_sender_.SendRTCP(GetFeedbackState(), kRtcpReport); + // For sending streams, make sure to not send a SR before media has been sent. + if (rtcp_sender_.TimeToSendRTCPReport()) { + RTCPSender::FeedbackState state = GetFeedbackState(); + // Prevent sending streams to send SR before any media has been sent. + if (!rtcp_sender_.Sending() || state.packets_sent > 0) + rtcp_sender_.SendRTCP(state, kRtcpReport); + } if (UpdateRTCPReceiveInformationTimers()) { // A receiver has timed out @@ -402,6 +407,7 @@ int32_t ModuleRtpRtcpImpl::SendOutgoingData( const RTPFragmentationHeader* fragmentation, const RTPVideoHeader* rtp_video_hdr) { rtcp_sender_.SetLastRtpTime(time_stamp, capture_time_ms); + // Make sure an RTCP report isn't queued behind a key frame. if (rtcp_sender_.TimeToSendRTCPReport(kVideoFrameKey == frame_type)) { rtcp_sender_.SendRTCP(GetFeedbackState(), kRtcpReport); } @@ -794,9 +800,8 @@ int32_t ModuleRtpRtcpImpl::SetSendREDPayloadType( } // Get payload type for Redundant Audio Data RFC 2198. -int32_t ModuleRtpRtcpImpl::SendREDPayloadType( - int8_t& payload_type) const { - return rtp_sender_.RED(&payload_type); +int32_t ModuleRtpRtcpImpl::SendREDPayloadType(int8_t* payload_type) const { + return rtp_sender_.RED(payload_type); } void ModuleRtpRtcpImpl::SetTargetSendBitrate(uint32_t bitrate_bps) { @@ -832,11 +837,10 @@ void ModuleRtpRtcpImpl::SetGenericFECStatus( rtp_sender_.SetGenericFECStatus(enable, payload_type_red, payload_type_fec); } -void ModuleRtpRtcpImpl::GenericFECStatus(bool& enable, - uint8_t& payload_type_red, - uint8_t& payload_type_fec) { - rtp_sender_.GenericFECStatus(&enable, &payload_type_red, - &payload_type_fec); +void ModuleRtpRtcpImpl::GenericFECStatus(bool* enable, + uint8_t* payload_type_red, + uint8_t* payload_type_fec) { + rtp_sender_.GenericFECStatus(enable, payload_type_red, payload_type_fec); } int32_t ModuleRtpRtcpImpl::SetFecParameters( @@ -952,8 +956,8 @@ bool ModuleRtpRtcpImpl::UpdateRTCPReceiveInformationTimers() { } // Called from RTCPsender. -int32_t ModuleRtpRtcpImpl::BoundingSet(bool& tmmbr_owner, - TMMBRSet*& bounding_set) { +int32_t ModuleRtpRtcpImpl::BoundingSet(bool* tmmbr_owner, + TMMBRSet* bounding_set) { return rtcp_receiver_.BoundingSet(tmmbr_owner, bounding_set); } |