From 2eb9dfbedca710bbc76e89654c4d1e4c2348a2f2 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Fri, 5 May 2023 16:15:05 +0200 Subject: [PATCH] Remove dependency from ReportBlockData on legacy RTCPReportBlock Bug: None Change-Id: I33a2e7aedf0d7825bc046f576a6594ed893e5554 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/304287 Commit-Queue: Danil Chapovalov Reviewed-by: Emil Lundmark Cr-Commit-Position: refs/heads/main@{#40008} --- modules/rtp_rtcp/include/report_block_data.cc | 17 +++----- modules/rtp_rtcp/include/report_block_data.h | 34 +++++++-------- modules/rtp_rtcp/include/rtp_rtcp_defines.h | 43 ++++--------------- modules/rtp_rtcp/source/rtcp_receiver.cc | 9 +++- 4 files changed, 38 insertions(+), 65 deletions(-) diff --git a/modules/rtp_rtcp/include/report_block_data.cc b/modules/rtp_rtcp/include/report_block_data.cc index 42a8e75968..2998cc6cee 100644 --- a/modules/rtp_rtcp/include/report_block_data.cc +++ b/modules/rtp_rtcp/include/report_block_data.cc @@ -24,17 +24,12 @@ TimeDelta ReportBlockData::jitter(int rtp_clock_rate_hz) const { void ReportBlockData::SetReportBlock(uint32_t sender_ssrc, const rtcp::ReportBlock& report_block, Timestamp report_block_timestamp_utc) { - report_block_.sender_ssrc = sender_ssrc; - report_block_.source_ssrc = report_block.source_ssrc(); - report_block_.fraction_lost = report_block.fraction_lost(); - report_block_.packets_lost = report_block.cumulative_lost(); - report_block_.extended_highest_sequence_number = - report_block.extended_high_seq_num(); - report_block_.jitter = report_block.jitter(); - report_block_.delay_since_last_sender_report = - report_block.delay_since_last_sr(); - report_block_.last_sender_report_timestamp = report_block.last_sr(); - + sender_ssrc_ = sender_ssrc; + source_ssrc_ = report_block.source_ssrc(); + fraction_lost_raw_ = report_block.fraction_lost(); + cumulative_lost_ = report_block.cumulative_lost(); + extended_highest_sequence_number_ = report_block.extended_high_seq_num(); + jitter_ = report_block.jitter(); report_block_timestamp_utc_ = report_block_timestamp_utc; } diff --git a/modules/rtp_rtcp/include/report_block_data.h b/modules/rtp_rtcp/include/report_block_data.h index 2efdb9d845..3e539ab531 100644 --- a/modules/rtp_rtcp/include/report_block_data.h +++ b/modules/rtp_rtcp/include/report_block_data.h @@ -13,7 +13,6 @@ #include "api/units/time_delta.h" #include "api/units/timestamp.h" -#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/source/rtcp_packet/report_block.h" namespace webrtc { @@ -30,11 +29,11 @@ class ReportBlockData { // The SSRC identifier for the originator of this report block, // i.e. remote receiver of the RTP stream. - uint32_t sender_ssrc() const { return report_block_.sender_ssrc; } + uint32_t sender_ssrc() const { return sender_ssrc_; } // The SSRC identifier of the source to which the information in this // reception report block pertains, i.e. local sender of the RTP stream. - uint32_t source_ssrc() const { return report_block_.source_ssrc; } + uint32_t source_ssrc() const { return source_ssrc_; } // The fraction of RTP data packets from 'source_ssrc()' lost since the // previous report block was sent. @@ -43,7 +42,7 @@ class ReportBlockData { // Fraction loss as was written in the raw packet: range is [0, 255] where 0 // represents no loss, and 255 represents 99.6% loss (255/256 * 100%). - uint8_t fraction_lost_raw() const { return report_block_.fraction_lost; } + uint8_t fraction_lost_raw() const { return fraction_lost_raw_; } // The total number of RTP data packets from 'source_ssrc()' that have been // lost since the beginning of reception. This number is defined to be the @@ -51,13 +50,13 @@ class ReportBlockData { // where the number of packets received includes any which are late or // duplicates. Thus, packets that arrive late are not counted as lost, and the // loss may be negative if there are duplicates. - int cumulative_lost() const { return report_block_.packets_lost; } + int cumulative_lost() const { return cumulative_lost_; } // The low 16 bits contain the highest sequence number received in an RTP data // packet from 'source_ssrc()', and the most significant 16 bits extend that // sequence number with the corresponding count of sequence number cycles. uint32_t extended_highest_sequence_number() const { - return report_block_.extended_highest_sequence_number; + return extended_highest_sequence_number_; } // An estimate of the statistical variance of the RTP data packet interarrival @@ -65,15 +64,11 @@ class ReportBlockData { // to be the mean deviation (smoothed absolute value) of the difference D in // packet spacing at the receiver compared to the sender for a pair of // packets. - uint32_t jitter() const { return report_block_.jitter; } + uint32_t jitter() const { return jitter_; } // Jitter converted to common time units. TimeDelta jitter(int rtp_clock_rate_hz) const; - // TODO(danilchap): Deprecate in favor of using ReportBlockData accessors - // directly. - const RTCPReportBlock& report_block() const { return report_block_; } - [[deprecated]] int64_t report_block_timestamp_utc_us() const { return report_block_timestamp_utc_.us(); } @@ -96,12 +91,10 @@ class ReportBlockData { size_t num_rtts() const { return num_rtts_; } bool has_rtt() const { return num_rtts_ != 0; } - void set_source_ssrc(uint32_t ssrc) { report_block_.source_ssrc = ssrc; } - void set_fraction_lost_raw(uint8_t lost) { - report_block_.fraction_lost = lost; - } - void set_cumulative_lost(int lost) { report_block_.packets_lost = lost; } - void set_jitter(uint32_t jitter) { report_block_.jitter = jitter; } + void set_source_ssrc(uint32_t ssrc) { source_ssrc_ = ssrc; } + void set_fraction_lost_raw(uint8_t lost) { fraction_lost_raw_ = lost; } + void set_cumulative_lost(int lost) { cumulative_lost_ = lost; } + void set_jitter(uint32_t jitter) { jitter_ = jitter; } void SetReportBlock(uint32_t sender_ssrc, const rtcp::ReportBlock& report_block, @@ -109,7 +102,12 @@ class ReportBlockData { void AddRoundTripTimeSample(TimeDelta rtt); private: - RTCPReportBlock report_block_; + uint32_t sender_ssrc_ = 0; + uint32_t source_ssrc_ = 0; + uint8_t fraction_lost_raw_ = 0; + int32_t cumulative_lost_ = 0; + uint32_t extended_highest_sequence_number_ = 0; + uint32_t jitter_ = 0; Timestamp report_block_timestamp_utc_ = Timestamp::Zero(); TimeDelta last_rtt_ = TimeDelta::Zero(); TimeDelta min_rtt_ = TimeDelta::Zero(); diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h index a8e5edccc0..f047a45a6a 100644 --- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h +++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h @@ -123,42 +123,15 @@ enum RtxMode { const size_t kRtxHeaderSize = 2; struct RTCPReportBlock { - RTCPReportBlock() - : sender_ssrc(0), - source_ssrc(0), - fraction_lost(0), - packets_lost(0), - extended_highest_sequence_number(0), - jitter(0), - last_sender_report_timestamp(0), - delay_since_last_sender_report(0) {} - - RTCPReportBlock(uint32_t sender_ssrc, - uint32_t source_ssrc, - uint8_t fraction_lost, - int32_t packets_lost, - uint32_t extended_highest_sequence_number, - uint32_t jitter, - uint32_t last_sender_report_timestamp, - uint32_t delay_since_last_sender_report) - : sender_ssrc(sender_ssrc), - source_ssrc(source_ssrc), - fraction_lost(fraction_lost), - packets_lost(packets_lost), - extended_highest_sequence_number(extended_highest_sequence_number), - jitter(jitter), - last_sender_report_timestamp(last_sender_report_timestamp), - delay_since_last_sender_report(delay_since_last_sender_report) {} - // Fields as described by RFC 3550 6.4.2. - uint32_t sender_ssrc; // SSRC of sender of this report. - uint32_t source_ssrc; // SSRC of the RTP packet sender. - uint8_t fraction_lost; - int32_t packets_lost; // 24 bits valid. - uint32_t extended_highest_sequence_number; - uint32_t jitter; - uint32_t last_sender_report_timestamp; - uint32_t delay_since_last_sender_report; + uint32_t sender_ssrc = 0; // SSRC of sender of this report. + uint32_t source_ssrc = 0; // SSRC of the RTP packet sender. + uint8_t fraction_lost = 0; + int32_t packets_lost = 0; // 24 bits valid. + uint32_t extended_highest_sequence_number = 0; + uint32_t jitter = 0; + uint32_t last_sender_report_timestamp = 0; + uint32_t delay_since_last_sender_report = 0; }; typedef std::list ReportBlockList; diff --git a/modules/rtp_rtcp/source/rtcp_receiver.cc b/modules/rtp_rtcp/source/rtcp_receiver.cc index 9a0effca12..5c4b2a8341 100644 --- a/modules/rtp_rtcp/source/rtcp_receiver.cc +++ b/modules/rtp_rtcp/source/rtcp_receiver.cc @@ -647,7 +647,14 @@ void RTCPReceiver::HandleReportBlock(const ReportBlock& report_block, } packet_information->report_blocks.push_back( - report_block_data->report_block()); + {.sender_ssrc = remote_ssrc, + .source_ssrc = report_block.source_ssrc(), + .fraction_lost = report_block.fraction_lost(), + .packets_lost = report_block.cumulative_lost(), + .extended_highest_sequence_number = report_block.extended_high_seq_num(), + .jitter = report_block.jitter(), + .last_sender_report_timestamp = report_block.last_sr(), + .delay_since_last_sender_report = report_block.delay_since_last_sr()}); packet_information->report_block_datas.push_back(*report_block_data); }