Delete audio specific struct ReportBlock in favor of ReportBlockData
ReportBlockData class is better documented and has wider usage. Bug: webrtc:13757 Change-Id: Ie5f2275f2f0236267172e6dd1ce5c2dfb2193ba0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/304101 Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39980}
This commit is contained in:
parent
91d5fc2ed6
commit
a9b9d4e3d0
@ -454,15 +454,14 @@ webrtc::AudioSendStream::Stats AudioSendStream::GetStats(
|
||||
stats.codec_payload_type = spec.payload_type;
|
||||
|
||||
// Get data from the last remote RTCP report.
|
||||
for (const auto& block : channel_send_->GetRemoteRTCPReportBlocks()) {
|
||||
for (const ReportBlockData& block :
|
||||
channel_send_->GetRemoteRTCPReportBlocks()) {
|
||||
// Lookup report for send ssrc only.
|
||||
if (block.source_SSRC == stats.local_ssrc) {
|
||||
stats.packets_lost = block.cumulative_num_packets_lost;
|
||||
stats.fraction_lost = Q8ToFloat(block.fraction_lost);
|
||||
// Convert timestamps to milliseconds.
|
||||
if (spec.format.clockrate_hz / 1000 > 0) {
|
||||
stats.jitter_ms =
|
||||
block.interarrival_jitter / (spec.format.clockrate_hz / 1000);
|
||||
if (block.source_ssrc() == stats.local_ssrc) {
|
||||
stats.packets_lost = block.cumulative_lost();
|
||||
stats.fraction_lost = block.fraction_lost();
|
||||
if (spec.format.clockrate_hz > 0) {
|
||||
stats.jitter_ms = block.jitter(spec.format.clockrate_hz).ms();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -66,7 +66,9 @@ const double kEchoReturnLossEnhancement = 101;
|
||||
const double kResidualEchoLikelihood = -1.0f;
|
||||
const double kResidualEchoLikelihoodMax = 23.0f;
|
||||
const CallSendStatistics kCallStats = {112, 12, 13456, 17890};
|
||||
const ReportBlock kReportBlock = {456, 780, 123, 567, 890, 132, 143, 13354};
|
||||
constexpr int kFractionLost = 123;
|
||||
constexpr int kCumulativeLost = 567;
|
||||
constexpr uint32_t kInterarrivalJitter = 132;
|
||||
const int kTelephoneEventPayloadType = 123;
|
||||
const int kTelephoneEventPayloadFrequency = 65432;
|
||||
const int kTelephoneEventCode = 45;
|
||||
@ -279,12 +281,16 @@ struct ConfigHelper {
|
||||
using ::testing::SetArgPointee;
|
||||
using ::testing::SetArgReferee;
|
||||
|
||||
std::vector<ReportBlock> report_blocks;
|
||||
webrtc::ReportBlock block = kReportBlock;
|
||||
std::vector<ReportBlockData> report_blocks;
|
||||
ReportBlockData block;
|
||||
block.set_source_ssrc(780);
|
||||
block.set_fraction_lost_raw(kFractionLost);
|
||||
block.set_cumulative_lost(kCumulativeLost);
|
||||
block.set_jitter(kInterarrivalJitter);
|
||||
report_blocks.push_back(block); // Has wrong SSRC.
|
||||
block.source_SSRC = kSsrc;
|
||||
block.set_source_ssrc(kSsrc);
|
||||
report_blocks.push_back(block); // Correct block.
|
||||
block.fraction_lost = 0;
|
||||
block.set_fraction_lost_raw(0);
|
||||
report_blocks.push_back(block); // Duplicate SSRC, bad fraction_lost.
|
||||
|
||||
EXPECT_TRUE(channel_send_);
|
||||
@ -435,12 +441,12 @@ TEST(AudioSendStreamTest, GetStats) {
|
||||
EXPECT_EQ(kCallStats.header_and_padding_bytes_sent,
|
||||
stats.header_and_padding_bytes_sent);
|
||||
EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent);
|
||||
EXPECT_EQ(kReportBlock.cumulative_num_packets_lost, stats.packets_lost);
|
||||
EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost);
|
||||
EXPECT_EQ(stats.packets_lost, kCumulativeLost);
|
||||
EXPECT_FLOAT_EQ(stats.fraction_lost, Q8ToFloat(kFractionLost));
|
||||
EXPECT_EQ(kIsacFormat.name, stats.codec_name);
|
||||
EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter /
|
||||
(kIsacFormat.clockrate_hz / 1000)),
|
||||
stats.jitter_ms);
|
||||
EXPECT_EQ(stats.jitter_ms,
|
||||
static_cast<int32_t>(kInterarrivalJitter /
|
||||
(kIsacFormat.clockrate_hz / 1000)));
|
||||
EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms);
|
||||
EXPECT_EQ(0, stats.audio_level);
|
||||
EXPECT_EQ(0, stats.total_input_energy);
|
||||
|
||||
@ -119,7 +119,7 @@ class ChannelSend : public ChannelSendInterface,
|
||||
RtcpBandwidthObserver* bandwidth_observer) override;
|
||||
void ResetSenderCongestionControlObjects() override;
|
||||
void SetRTCP_CNAME(absl::string_view c_name) override;
|
||||
std::vector<ReportBlock> GetRemoteRTCPReportBlocks() const override;
|
||||
std::vector<ReportBlockData> GetRemoteRTCPReportBlocks() const override;
|
||||
CallSendStatistics GetRTCPStatistics() const override;
|
||||
|
||||
// ProcessAndEncodeAudio() posts a task on the shared encoder task queue,
|
||||
@ -735,28 +735,12 @@ void ChannelSend::SetRTCP_CNAME(absl::string_view c_name) {
|
||||
RTC_DCHECK_EQ(0, ret) << "SetRTCP_CNAME() failed to set RTCP CNAME";
|
||||
}
|
||||
|
||||
std::vector<ReportBlock> ChannelSend::GetRemoteRTCPReportBlocks() const {
|
||||
std::vector<ReportBlockData> ChannelSend::GetRemoteRTCPReportBlocks() const {
|
||||
RTC_DCHECK_RUN_ON(&worker_thread_checker_);
|
||||
// Get the report blocks from the latest received RTCP Sender or Receiver
|
||||
// Report. Each element in the vector contains the sender's SSRC and a
|
||||
// report block according to RFC 3550.
|
||||
std::vector<ReportBlock> report_blocks;
|
||||
for (const ReportBlockData& data : rtp_rtcp_->GetLatestReportBlockData()) {
|
||||
ReportBlock report_block;
|
||||
report_block.sender_SSRC = data.report_block().sender_ssrc;
|
||||
report_block.source_SSRC = data.report_block().source_ssrc;
|
||||
report_block.fraction_lost = data.report_block().fraction_lost;
|
||||
report_block.cumulative_num_packets_lost = data.report_block().packets_lost;
|
||||
report_block.extended_highest_sequence_number =
|
||||
data.report_block().extended_highest_sequence_number;
|
||||
report_block.interarrival_jitter = data.report_block().jitter;
|
||||
report_block.last_SR_timestamp =
|
||||
data.report_block().last_sender_report_timestamp;
|
||||
report_block.delay_since_last_SR =
|
||||
data.report_block().delay_since_last_sender_report;
|
||||
report_blocks.push_back(report_block);
|
||||
}
|
||||
return report_blocks;
|
||||
return rtp_rtcp_->GetLatestReportBlockData();
|
||||
}
|
||||
|
||||
CallSendStatistics ChannelSend::GetRTCPStatistics() const {
|
||||
|
||||
@ -51,18 +51,6 @@ struct CallSendStatistics {
|
||||
uint32_t nacks_received;
|
||||
};
|
||||
|
||||
// See section 6.4.2 in http://www.ietf.org/rfc/rfc3550.txt for details.
|
||||
struct ReportBlock {
|
||||
uint32_t sender_SSRC; // SSRC of sender
|
||||
uint32_t source_SSRC;
|
||||
uint8_t fraction_lost;
|
||||
int32_t cumulative_num_packets_lost;
|
||||
uint32_t extended_highest_sequence_number;
|
||||
uint32_t interarrival_jitter;
|
||||
uint32_t last_SR_timestamp;
|
||||
uint32_t delay_since_last_SR;
|
||||
};
|
||||
|
||||
namespace voe {
|
||||
|
||||
class ChannelSendInterface {
|
||||
@ -86,7 +74,7 @@ class ChannelSendInterface {
|
||||
RtpTransportControllerSendInterface* transport,
|
||||
RtcpBandwidthObserver* bandwidth_observer) = 0;
|
||||
virtual void ResetSenderCongestionControlObjects() = 0;
|
||||
virtual std::vector<ReportBlock> GetRemoteRTCPReportBlocks() const = 0;
|
||||
virtual std::vector<ReportBlockData> GetRemoteRTCPReportBlocks() const = 0;
|
||||
virtual ANAStats GetANAStatistics() const = 0;
|
||||
virtual void RegisterCngPayloadType(int payload_type,
|
||||
int payload_frequency) = 0;
|
||||
|
||||
@ -135,7 +135,7 @@ class MockChannelSend : public voe::ChannelSendInterface {
|
||||
(override));
|
||||
MOCK_METHOD(void, ResetSenderCongestionControlObjects, (), (override));
|
||||
MOCK_METHOD(CallSendStatistics, GetRTCPStatistics, (), (const, override));
|
||||
MOCK_METHOD(std::vector<ReportBlock>,
|
||||
MOCK_METHOD(std::vector<ReportBlockData>,
|
||||
GetRemoteRTCPReportBlocks,
|
||||
(),
|
||||
(const, override));
|
||||
|
||||
@ -96,6 +96,13 @@ 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 SetReportBlock(uint32_t sender_ssrc,
|
||||
const rtcp::ReportBlock& report_block,
|
||||
Timestamp report_block_timestamp_utc);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user