| 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 1105493b64f2688090335addaf11e668e4174445..80d015803ac2d8ffe0e820c88ee9a30bb6fbbf85 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc
|
| @@ -412,7 +412,7 @@ void RTCPReceiver::HandleSenderReport(const CommonHeader& rtcp_block,
|
|
|
| packet_information->remote_ssrc = remote_ssrc;
|
|
|
| - CreateTmmbrInformation(remote_ssrc);
|
| + UpdateTmmbrRemoteIsAlive(remote_ssrc);
|
|
|
| TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "SR",
|
| "remote_ssrc", remote_ssrc, "ssrc", main_ssrc_);
|
| @@ -454,7 +454,7 @@ void RTCPReceiver::HandleReceiverReport(const CommonHeader& rtcp_block,
|
|
|
| packet_information->remote_ssrc = remote_ssrc;
|
|
|
| - CreateTmmbrInformation(remote_ssrc);
|
| + UpdateTmmbrRemoteIsAlive(remote_ssrc);
|
|
|
| TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RR",
|
| "remote_ssrc", remote_ssrc, "ssrc", main_ssrc_);
|
| @@ -535,11 +535,19 @@ void RTCPReceiver::HandleReportBlock(const ReportBlock& report_block,
|
| packet_information->report_blocks.push_back(report_block_info->report_block);
|
| }
|
|
|
| -void RTCPReceiver::CreateTmmbrInformation(uint32_t remote_ssrc) {
|
| +RTCPReceiver::TmmbrInformation* RTCPReceiver::FindOrCreateTmmbrInfo(
|
| + uint32_t remote_ssrc) {
|
| // Create or find receive information.
|
| TmmbrInformation* tmmbr_info = &tmmbr_infos_[remote_ssrc];
|
| // Update that this remote is alive.
|
| tmmbr_info->last_time_received_ms = clock_->TimeInMilliseconds();
|
| + return tmmbr_info;
|
| +}
|
| +
|
| +void RTCPReceiver::UpdateTmmbrRemoteIsAlive(uint32_t remote_ssrc) {
|
| + auto tmmbr_it = tmmbr_infos_.find(remote_ssrc);
|
| + if (tmmbr_it != tmmbr_infos_.end())
|
| + tmmbr_it->second.last_time_received_ms = clock_->TimeInMilliseconds();
|
| }
|
|
|
| RTCPReceiver::TmmbrInformation* RTCPReceiver::GetTmmbrInformation(
|
| @@ -783,10 +791,6 @@ void RTCPReceiver::HandleTmmbr(const CommonHeader& rtcp_block,
|
| }
|
|
|
| uint32_t sender_ssrc = tmmbr.sender_ssrc();
|
| - TmmbrInformation* receive_info = GetTmmbrInformation(sender_ssrc);
|
| - if (!receive_info) // This remote SSRC must be saved before.
|
| - return;
|
| -
|
| if (tmmbr.media_ssrc()) {
|
| // media_ssrc() SHOULD be 0 if same as SenderSSRC.
|
| // In relay mode this is a valid number.
|
| @@ -794,15 +798,18 @@ void RTCPReceiver::HandleTmmbr(const CommonHeader& rtcp_block,
|
| }
|
|
|
| for (const rtcp::TmmbItem& request : tmmbr.requests()) {
|
| - if (main_ssrc_ == request.ssrc() && request.bitrate_bps()) {
|
| - auto* entry = &receive_info->tmmbr[sender_ssrc];
|
| - entry->tmmbr_item = rtcp::TmmbItem(sender_ssrc,
|
| - request.bitrate_bps(),
|
| - request.packet_overhead());
|
| - entry->last_updated_ms = clock_->TimeInMilliseconds();
|
| -
|
| - packet_information->packet_type_flags |= kRtcpTmmbr;
|
| - }
|
| + if (main_ssrc_ != request.ssrc() || request.bitrate_bps() == 0)
|
| + continue;
|
| +
|
| + TmmbrInformation* tmmbr_info = FindOrCreateTmmbrInfo(tmmbr.sender_ssrc());
|
| + auto* entry = &tmmbr_info->tmmbr[sender_ssrc];
|
| + entry->tmmbr_item = rtcp::TmmbItem(sender_ssrc,
|
| + request.bitrate_bps(),
|
| + request.packet_overhead());
|
| + entry->last_updated_ms = clock_->TimeInMilliseconds();
|
| +
|
| + packet_information->packet_type_flags |= kRtcpTmmbr;
|
| + break;
|
| }
|
| }
|
|
|
| @@ -814,14 +821,11 @@ void RTCPReceiver::HandleTmmbn(const CommonHeader& rtcp_block,
|
| return;
|
| }
|
|
|
| - TmmbrInformation* receive_info = GetTmmbrInformation(tmmbn.sender_ssrc());
|
| - if (!receive_info) // This remote SSRC must be saved before.
|
| - return;
|
| + TmmbrInformation* tmmbr_info = FindOrCreateTmmbrInfo(tmmbn.sender_ssrc());
|
|
|
| packet_information->packet_type_flags |= kRtcpTmmbn;
|
|
|
| - for (const auto& item : tmmbn.items())
|
| - receive_info->tmmbn.push_back(item);
|
| + tmmbr_info->tmmbn = tmmbn.items();
|
| }
|
|
|
| void RTCPReceiver::HandleSrReq(const CommonHeader& rtcp_block,
|
|
|