 Chromium Code Reviews
 Chromium Code Reviews Issue 2644303002:
  Delete class SSRCDatabase, and its global ssrc registry.  (Closed)
    
  
    Issue 2644303002:
  Delete class SSRCDatabase, and its global ssrc registry.  (Closed) 
  | Index: webrtc/modules/rtp_rtcp/source/rtp_sender.cc | 
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc | 
| index 9ceebd99e02257027ebf137c7dfd59b8054e89ad..3e4592dcbb0b9ccc19b1a6cc9f7692fa61b05ee3 100644 | 
| --- a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc | 
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc | 
| @@ -111,10 +111,8 @@ RTPSender::RTPSender( | 
| send_packet_observer_(send_packet_observer), | 
| bitrate_callback_(bitrate_callback), | 
| // RTP variables | 
| - ssrc_db_(SSRCDatabase::GetSSRCDatabase()), | 
| remote_ssrc_(0), | 
| sequence_number_forced_(false), | 
| - ssrc_forced_(false), | 
| last_rtp_timestamp_(0), | 
| capture_time_ms_(0), | 
| last_timestamp_time_ms_(0), | 
| @@ -128,11 +126,6 @@ RTPSender::RTPSender( | 
| send_side_bwe_with_overhead_( | 
| webrtc::field_trial::FindFullName( | 
| "WebRTC-SendSideBwe-WithOverhead") == "Enabled") { | 
| - ssrc_ = ssrc_db_->CreateSSRC(); | 
| - RTC_DCHECK(ssrc_ != 0); | 
| - ssrc_rtx_ = ssrc_db_->CreateSSRC(); | 
| - RTC_DCHECK(ssrc_rtx_ != 0); | 
| - | 
| // This random initialization is not intended to be cryptographic strong. | 
| timestamp_offset_ = random_.Rand<uint32_t>(); | 
| // Random start, 16 bits. Can't be 0. | 
| @@ -157,12 +150,6 @@ RTPSender::~RTPSender() { | 
| // variables but we grab them in all other methods. (what's the design?) | 
| // Start documenting what thread we're on in what method so that it's easier | 
| // to understand performance attributes and possibly remove locks. | 
| - if (remote_ssrc_ != 0) { | 
| - ssrc_db_->ReturnSSRC(remote_ssrc_); | 
| - } | 
| - ssrc_db_->ReturnSSRC(ssrc_); | 
| - | 
| - SSRCDatabase::ReturnSSRCDatabase(); | 
| while (!payload_type_map_.empty()) { | 
| std::map<int8_t, RtpUtility::Payload*>::iterator it = | 
| payload_type_map_.begin(); | 
| @@ -334,12 +321,13 @@ int RTPSender::RtxStatus() const { | 
| void RTPSender::SetRtxSsrc(uint32_t ssrc) { | 
| rtc::CritScope lock(&send_critsect_); | 
| - ssrc_rtx_ = ssrc; | 
| + ssrc_rtx_.emplace(ssrc); | 
| } | 
| uint32_t RTPSender::RtxSsrc() const { | 
| rtc::CritScope lock(&send_critsect_); | 
| - return ssrc_rtx_; | 
| + RTC_DCHECK(ssrc_rtx_); | 
| + return *ssrc_rtx_; | 
| } | 
| void RTPSender::SetRtxPayloadType(int payload_type, | 
| @@ -401,7 +389,12 @@ bool RTPSender::SendOutgoingData(FrameType frame_type, | 
| { | 
| // Drop this packet if we're not sending media packets. | 
| rtc::CritScope lock(&send_critsect_); | 
| - ssrc = ssrc_; | 
| + if (!ssrc_) { | 
| + LOG(LS_ERROR) << "SSRC unset"; | 
| 
stefan-webrtc
2017/02/15 08:26:37
End with .
Same for the logs below.
Should we al
 
nisse-webrtc
2017/02/15 08:42:03
Done for all log messages in this file.
 | 
| + return false; | 
| + } | 
| + | 
| + ssrc = *ssrc_; | 
| sequence_number = sequence_number_; | 
| rtp_timestamp = timestamp_offset_ + capture_timestamp; | 
| if (transport_frame_id_out) | 
| @@ -521,7 +514,13 @@ size_t RTPSender::SendPadData(size_t bytes, int probe_cluster_id) { | 
| if (!audio_configured_ && !last_packet_marker_bit_) { | 
| break; | 
| } | 
| - ssrc = ssrc_; | 
| + if (!ssrc_) { | 
| + LOG(LS_ERROR) << "SSRC unset"; | 
| + return 0; | 
| + } | 
| + | 
| + ssrc = *ssrc_; | 
| + | 
| sequence_number = sequence_number_; | 
| ++sequence_number_; | 
| payload_type = payload_type_; | 
| @@ -545,7 +544,11 @@ size_t RTPSender::SendPadData(size_t bytes, int probe_cluster_id) { | 
| (now_ms - last_timestamp_time_ms_) * kTimestampTicksPerMs; | 
| capture_time_ms += (now_ms - last_timestamp_time_ms_); | 
| } | 
| - ssrc = ssrc_rtx_; | 
| + if (!ssrc_rtx_) { | 
| + LOG(LS_ERROR) << "RTX SSRC unset"; | 
| + return 0; | 
| + } | 
| + ssrc = *ssrc_rtx_; | 
| sequence_number = sequence_number_rtx_; | 
| ++sequence_number_rtx_; | 
| payload_type = rtx_payload_type_map_.begin()->second; | 
| @@ -919,7 +922,9 @@ void RTPSender::UpdateDelayStatistics(int64_t capture_time_ms, int64_t now_ms) { | 
| int max_delay_ms = 0; | 
| { | 
| rtc::CritScope lock(&send_critsect_); | 
| - ssrc = ssrc_; | 
| + if (!ssrc_) | 
| + return; | 
| + ssrc = *ssrc_; | 
| } | 
| { | 
| rtc::CritScope cs(&statistics_crit_); | 
| @@ -959,7 +964,9 @@ void RTPSender::ProcessBitrate() { | 
| uint32_t ssrc; | 
| { | 
| rtc::CritScope lock(&send_critsect_); | 
| - ssrc = ssrc_; | 
| + if (!ssrc_) | 
| + return; | 
| + ssrc = *ssrc_; | 
| } | 
| rtc::CritScope lock(&statistics_crit_); | 
| @@ -993,7 +1000,8 @@ std::unique_ptr<RtpPacketToSend> RTPSender::AllocatePacket() const { | 
| rtc::CritScope lock(&send_critsect_); | 
| std::unique_ptr<RtpPacketToSend> packet( | 
| new RtpPacketToSend(&rtp_header_extension_map_, max_packet_size_)); | 
| - packet->SetSsrc(ssrc_); | 
| + RTC_DCHECK(ssrc_); | 
| + packet->SetSsrc(*ssrc_); | 
| packet->SetCsrcs(csrcs_); | 
| // Reserve extensions, if registered, RtpSender set in SendToNetwork. | 
| packet->ReserveExtension<AbsoluteSendTime>(); | 
| @@ -1010,7 +1018,7 @@ bool RTPSender::AssignSequenceNumber(RtpPacketToSend* packet) { | 
| rtc::CritScope lock(&send_critsect_); | 
| if (!sending_media_) | 
| return false; | 
| - RTC_DCHECK_EQ(packet->Ssrc(), ssrc_); | 
| + RTC_DCHECK(packet->Ssrc() == ssrc_); | 
| 
stefan-webrtc
2017/02/15 08:26:37
DCHECK_EQ exists, right?
 
nisse-webrtc
2017/02/15 08:42:03
Tried it earlier, but it doesn't support comparing
 | 
| packet->SetSequenceNumber(sequence_number_++); | 
| // Remember marker bit to determine if padding can be inserted with | 
| @@ -1042,23 +1050,6 @@ bool RTPSender::UpdateTransportSequenceNumber(RtpPacketToSend* packet, | 
| return true; | 
| } | 
| -void RTPSender::SetSendingStatus(bool enabled) { | 
| - if (!enabled) { | 
| - rtc::CritScope lock(&send_critsect_); | 
| - if (!ssrc_forced_) { | 
| - // Generate a new SSRC. | 
| - ssrc_db_->ReturnSSRC(ssrc_); | 
| - ssrc_ = ssrc_db_->CreateSSRC(); | 
| - RTC_DCHECK(ssrc_ != 0); | 
| - } | 
| - // Don't initialize seq number if SSRC passed externally. | 
| - if (!sequence_number_forced_ && !ssrc_forced_) { | 
| - // Generate a new sequence number. | 
| - sequence_number_ = random_.Rand(1, kMaxInitRtpSeqNumber); | 
| - } | 
| - } | 
| -} | 
| - | 
| void RTPSender::SetSendingMediaStatus(bool enabled) { | 
| rtc::CritScope lock(&send_critsect_); | 
| sending_media_ = enabled; | 
| @@ -1079,29 +1070,14 @@ uint32_t RTPSender::TimestampOffset() const { | 
| return timestamp_offset_; | 
| } | 
| -uint32_t RTPSender::GenerateNewSSRC() { | 
| - // If configured via API, return 0. | 
| - rtc::CritScope lock(&send_critsect_); | 
| - | 
| - if (ssrc_forced_) { | 
| - return 0; | 
| - } | 
| - ssrc_ = ssrc_db_->CreateSSRC(); | 
| - RTC_DCHECK(ssrc_ != 0); | 
| - return ssrc_; | 
| -} | 
| - | 
| void RTPSender::SetSSRC(uint32_t ssrc) { | 
| // This is configured via the API. | 
| rtc::CritScope lock(&send_critsect_); | 
| - if (ssrc_ == ssrc && ssrc_forced_) { | 
| + if (ssrc_ == ssrc) { | 
| return; // Since it's same ssrc, don't reset anything. | 
| } | 
| - ssrc_forced_ = true; | 
| - ssrc_db_->ReturnSSRC(ssrc_); | 
| - ssrc_db_->RegisterSSRC(ssrc); | 
| - ssrc_ = ssrc; | 
| + ssrc_.emplace(ssrc); | 
| if (!sequence_number_forced_) { | 
| sequence_number_ = random_.Rand(1, kMaxInitRtpSeqNumber); | 
| } | 
| @@ -1109,7 +1085,7 @@ void RTPSender::SetSSRC(uint32_t ssrc) { | 
| uint32_t RTPSender::SSRC() const { | 
| rtc::CritScope lock(&send_critsect_); | 
| - return ssrc_; | 
| + return *ssrc_; | 
| 
stefan-webrtc
2017/02/15 08:26:37
DCHECK that ssrc_ is set here first.
 
nisse-webrtc
2017/02/15 08:42:03
Added here, and a couple of other places dereferen
 | 
| } | 
| rtc::Optional<uint32_t> RTPSender::FlexfecSsrc() const { | 
| @@ -1189,6 +1165,8 @@ std::unique_ptr<RtpPacketToSend> RTPSender::BuildRtxPacket( | 
| if (!sending_media_) | 
| return nullptr; | 
| + RTC_DCHECK(ssrc_rtx_); | 
| + | 
| // Replace payload type. | 
| auto kv = rtx_payload_type_map_.find(packet.PayloadType()); | 
| if (kv == rtx_payload_type_map_.end()) | 
| @@ -1199,7 +1177,7 @@ std::unique_ptr<RtpPacketToSend> RTPSender::BuildRtxPacket( | 
| rtx_packet->SetSequenceNumber(sequence_number_rtx_++); | 
| // Replace SSRC. | 
| - rtx_packet->SetSsrc(ssrc_rtx_); | 
| + rtx_packet->SetSsrc(*ssrc_rtx_); | 
| } | 
| uint8_t* rtx_payload = |