Pass Environment into RtcpReceiver
to avoid relying on the global field trials.
Bug: webrtc:362762208
Change-Id: I94e96f0a3f16cfd64f7deb4deb4aaa924ac1bba8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/361865
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42982}
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index 0b9caef..8297e2e 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -295,7 +295,6 @@
"../../api/rtc_event_log",
"../../api/task_queue",
"../../api/task_queue:pending_task_safety_flag",
- "../../api/transport:field_trial_based_config",
"../../api/transport:network_control",
"../../api/transport/rtp:dependency_descriptor",
"../../api/transport/rtp:rtp_source",
@@ -728,7 +727,6 @@
"../../test:mock_transport",
"../../test:rtp_test_utils",
"../../test:run_loop",
- "../../test:scoped_key_value_config",
"../../test:test_support",
"../../test/time_controller:time_controller",
"../video_coding:codec_globals_headers",
diff --git a/modules/rtp_rtcp/source/rtcp_receiver.cc b/modules/rtp_rtcp/source/rtcp_receiver.cc
index 3822247..6116470 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver.cc
+++ b/modules/rtp_rtcp/source/rtcp_receiver.cc
@@ -26,8 +26,9 @@
#include "absl/algorithm/container.h"
#include "absl/base/attributes.h"
#include "api/array_view.h"
+#include "api/environment/environment.h"
+#include "api/field_trials_view.h"
#include "api/sequence_checker.h"
-#include "api/transport/field_trial_based_config.h"
#include "api/transport/network_types.h"
#include "api/units/data_rate.h"
#include "api/units/time_delta.h"
@@ -157,11 +158,12 @@
std::unique_ptr<rtcp::LossNotification> loss_notification;
};
-RTCPReceiver::RTCPReceiver(const RtpRtcpInterface::Configuration& config,
+RTCPReceiver::RTCPReceiver(const Environment& env,
+ const RtpRtcpInterface::Configuration& config,
ModuleRtpRtcpImpl2* owner)
- : clock_(config.clock),
+ : env_(env),
receiver_only_(config.receiver_only),
- enable_congestion_controller_feedback_(FieldTrialBasedConfig().IsEnabled(
+ enable_congestion_controller_feedback_(env_.field_trials().IsEnabled(
"WebRTC-RFC8888CongestionControlFeedback")),
rtp_rtcp_(owner),
registered_ssrcs_(false, config),
@@ -182,15 +184,16 @@
report_block_data_observer_(config.report_block_data_observer),
packet_type_counter_observer_(config.rtcp_packet_type_counter_observer),
num_skipped_packets_(0),
- last_skipped_packets_warning_(clock_->CurrentTime()) {
+ last_skipped_packets_warning_(env_.clock().CurrentTime()) {
RTC_DCHECK(owner);
}
-RTCPReceiver::RTCPReceiver(const RtpRtcpInterface::Configuration& config,
+RTCPReceiver::RTCPReceiver(const Environment& env,
+ const RtpRtcpInterface::Configuration& config,
ModuleRtpRtcp* owner)
- : clock_(config.clock),
+ : env_(env),
receiver_only_(config.receiver_only),
- enable_congestion_controller_feedback_(FieldTrialBasedConfig().IsEnabled(
+ enable_congestion_controller_feedback_(env_.field_trials().IsEnabled(
"WebRTC-RFC8888CongestionControlFeedback")),
rtp_rtcp_(owner),
registered_ssrcs_(true, config),
@@ -211,7 +214,7 @@
report_block_data_observer_(config.report_block_data_observer),
packet_type_counter_observer_(config.rtcp_packet_type_counter_observer),
num_skipped_packets_(0),
- last_skipped_packets_warning_(clock_->CurrentTime()) {
+ last_skipped_packets_warning_(env_.clock().CurrentTime()) {
RTC_DCHECK(owner);
// Dear reader - if you're here because of this log statement and are
// wondering what this is about, chances are that you are using an instance
@@ -337,7 +340,7 @@
}
// Check for expired timers and if so, log and reset.
- Timestamp now = clock_->CurrentTime();
+ Timestamp now = env_.clock().CurrentTime();
if (RtcpRrTimeoutLocked(now)) {
RTC_LOG_F(LS_WARNING) << "Timeout: No RTCP RR received.";
} else if (RtcpRrSequenceNumberTimeoutLocked(now)) {
@@ -371,7 +374,7 @@
std::vector<rtcp::ReceiveTimeInfo> last_xr_rtis;
last_xr_rtis.reserve(last_xr_rtis_size);
- const uint32_t now_ntp = CompactNtp(clock_->CurrentNtpTime());
+ const uint32_t now_ntp = CompactNtp(env_.clock().CurrentNtpTime());
for (size_t i = 0; i < last_xr_rtis_size; ++i) {
RrtrInformation& rrtr = received_rrtrs_.front();
@@ -497,7 +500,7 @@
}
if (num_skipped_packets_ > 0) {
- const Timestamp now = clock_->CurrentTime();
+ const Timestamp now = env_.clock().CurrentTime();
if (now - last_skipped_packets_warning_ >= kMaxWarningLogInterval) {
last_skipped_packets_warning_ = now;
RTC_LOG(LS_WARNING)
@@ -550,7 +553,7 @@
remote_sender_.last_remote_timestamp = sender_report.ntp();
remote_sender_.last_remote_rtp_timestamp = sender_report.rtp_timestamp();
- remote_sender_.last_arrival_timestamp = clock_->CurrentNtpTime();
+ remote_sender_.last_arrival_timestamp = env_.clock().CurrentNtpTime();
remote_sender_.packets_sent = sender_report.sender_packet_count();
remote_sender_.bytes_sent = sender_report.sender_octet_count();
remote_sender_.reports_count++;
@@ -605,7 +608,7 @@
if (!registered_ssrcs_.contains(report_block.source_ssrc()))
return;
- Timestamp now = clock_->CurrentTime();
+ Timestamp now = env_.clock().CurrentTime();
last_received_rb_ = now;
ReportBlockData* report_block_data =
@@ -616,7 +619,7 @@
// the last RR was sent from the remote side.
last_increased_sequence_number_ = last_received_rb_;
}
- NtpTime now_ntp = clock_->ConvertTimestampToNtpTime(now);
+ NtpTime now_ntp = env_.clock().ConvertTimestampToNtpTime(now);
// Number of seconds since 1900 January 1 00:00 GMT (see
// https://tools.ietf.org/html/rfc868).
report_block_data->SetReportBlock(
@@ -653,14 +656,14 @@
// Create or find receive information.
TmmbrInformation* tmmbr_info = &tmmbr_infos_[remote_ssrc];
// Update that this remote is alive.
- tmmbr_info->last_time_received = clock_->CurrentTime();
+ tmmbr_info->last_time_received = env_.clock().CurrentTime();
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 = clock_->CurrentTime();
+ tmmbr_it->second.last_time_received = env_.clock().CurrentTime();
}
RTCPReceiver::TmmbrInformation* RTCPReceiver::GetTmmbrInformation(
@@ -677,18 +680,18 @@
// the worker thread and thus no locking is needed.
bool RTCPReceiver::RtcpRrTimeout() {
MutexLock lock(&rtcp_receiver_lock_);
- return RtcpRrTimeoutLocked(clock_->CurrentTime());
+ return RtcpRrTimeoutLocked(env_.clock().CurrentTime());
}
bool RTCPReceiver::RtcpRrSequenceNumberTimeout() {
MutexLock lock(&rtcp_receiver_lock_);
- return RtcpRrSequenceNumberTimeoutLocked(clock_->CurrentTime());
+ return RtcpRrSequenceNumberTimeoutLocked(env_.clock().CurrentTime());
}
bool RTCPReceiver::UpdateTmmbrTimers() {
MutexLock lock(&rtcp_receiver_lock_);
- Timestamp timeout = clock_->CurrentTime() - kTmmbrTimeoutInterval;
+ Timestamp timeout = env_.clock().CurrentTime() - kTmmbrTimeoutInterval;
if (oldest_tmmbr_info_ >= timeout)
return false;
@@ -846,7 +849,8 @@
void RTCPReceiver::HandleXrReceiveReferenceTime(uint32_t sender_ssrc,
const rtcp::Rrtr& rrtr) {
uint32_t received_remote_mid_ntp_time = CompactNtp(rrtr.ntp());
- uint32_t local_receive_mid_ntp_time = CompactNtp(clock_->CurrentNtpTime());
+ uint32_t local_receive_mid_ntp_time =
+ CompactNtp(env_.clock().CurrentNtpTime());
auto it = received_rrtrs_ssrc_it_.find(sender_ssrc);
if (it != received_rrtrs_ssrc_it_.end()) {
@@ -886,7 +890,7 @@
}
uint32_t delay_ntp = rti.delay_since_last_rr;
- uint32_t now_ntp = CompactNtp(clock_->CurrentNtpTime());
+ uint32_t now_ntp = CompactNtp(env_.clock().CurrentNtpTime());
uint32_t rtt_ntp = now_ntp - delay_ntp - send_time_ntp;
TimeDelta rtt = CompactNtpRttToTimeDelta(rtt_ntp);
@@ -1029,7 +1033,7 @@
if (fir.requests().empty())
return true;
- const Timestamp now = clock_->CurrentTime();
+ const Timestamp now = env_.clock().CurrentTime();
for (const rtcp::Fir::Request& fir_request : fir.requests()) {
// Is it our sender that is requested to generate a new keyframe.
if (local_media_ssrc() != fir_request.ssrc)
@@ -1100,7 +1104,7 @@
uint64_t bitrate_bps = TMMBRHelp::CalcMinBitrateBps(bounding);
if (bitrate_bps < std::numeric_limits<int64_t>::max()) {
network_link_rtcp_observer_->OnReceiverEstimatedMaxBitrate(
- clock_->CurrentTime(), DataRate::BitsPerSec(bitrate_bps));
+ env_.clock().CurrentTime(), DataRate::BitsPerSec(bitrate_bps));
}
}
@@ -1162,7 +1166,7 @@
}
if (network_link_rtcp_observer_) {
- Timestamp now = clock_->CurrentTime();
+ Timestamp now = env_.clock().CurrentTime();
if (packet_information.packet_type_flags & kRtcpRemb) {
network_link_rtcp_observer_->OnReceiverEstimatedMaxBitrate(
now, DataRate::BitsPerSec(
@@ -1218,7 +1222,7 @@
MutexLock lock(&rtcp_receiver_lock_);
std::vector<rtcp::TmmbItem> candidates;
- Timestamp now = clock_->CurrentTime();
+ Timestamp now = env_.clock().CurrentTime();
for (auto& kv : tmmbr_infos_) {
for (auto it = kv.second.tmmbr.begin(); it != kv.second.tmmbr.end();) {
diff --git a/modules/rtp_rtcp/source/rtcp_receiver.h b/modules/rtp_rtcp/source/rtcp_receiver.h
index 05b5c54..766a808 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver.h
+++ b/modules/rtp_rtcp/source/rtcp_receiver.h
@@ -20,6 +20,7 @@
#include "absl/container/inlined_vector.h"
#include "api/array_view.h"
+#include "api/environment/environment.h"
#include "api/sequence_checker.h"
#include "api/units/time_delta.h"
#include "api/units/timestamp.h"
@@ -36,7 +37,6 @@
#include "rtc_base/synchronization/mutex.h"
#include "rtc_base/system/no_unique_address.h"
#include "rtc_base/thread_annotations.h"
-#include "system_wrappers/include/clock.h"
namespace webrtc {
@@ -95,10 +95,12 @@
int round_trip_time_measurements_ = 0;
};
- RTCPReceiver(const RtpRtcpInterface::Configuration& config,
+ RTCPReceiver(const Environment& env,
+ const RtpRtcpInterface::Configuration& config,
ModuleRtpRtcp* owner);
- RTCPReceiver(const RtpRtcpInterface::Configuration& config,
+ RTCPReceiver(const Environment& env,
+ const RtpRtcpInterface::Configuration& config,
ModuleRtpRtcpImpl2* owner);
~RTCPReceiver();
@@ -356,7 +358,7 @@
bool RtcpRrSequenceNumberTimeoutLocked(Timestamp now)
RTC_EXCLUSIVE_LOCKS_REQUIRED(rtcp_receiver_lock_);
- Clock* const clock_;
+ const Environment env_;
const bool receiver_only_;
const bool enable_congestion_controller_feedback_;
ModuleRtpRtcp* const rtp_rtcp_;
diff --git a/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc b/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
index 7b8a15f..31e5d34 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
+++ b/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
@@ -10,24 +10,35 @@
#include "modules/rtp_rtcp/source/rtcp_receiver.h"
+#include <cstddef>
+#include <cstdint>
#include <memory>
+#include <optional>
#include <set>
+#include <string>
#include <utility>
+#include <vector>
+#include "absl/strings/string_view.h"
#include "api/array_view.h"
+#include "api/environment/environment_factory.h"
+#include "api/units/data_rate.h"
#include "api/units/time_delta.h"
#include "api/units/timestamp.h"
#include "api/video/video_bitrate_allocation.h"
#include "api/video/video_bitrate_allocator.h"
+#include "api/video/video_codec_constants.h"
#include "modules/rtp_rtcp/include/report_block_data.h"
+#include "modules/rtp_rtcp/include/rtcp_statistics.h"
+#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "modules/rtp_rtcp/mocks/mock_network_link_rtcp_observer.h"
#include "modules/rtp_rtcp/source/byte_io.h"
#include "modules/rtp_rtcp/source/ntp_time_util.h"
-#include "modules/rtp_rtcp/source/rtcp_packet.h"
#include "modules/rtp_rtcp/source/rtcp_packet/app.h"
#include "modules/rtp_rtcp/source/rtcp_packet/bye.h"
#include "modules/rtp_rtcp/source/rtcp_packet/compound_packet.h"
#include "modules/rtp_rtcp/source/rtcp_packet/congestion_control_feedback.h"
+#include "modules/rtp_rtcp/source/rtcp_packet/dlrr.h"
#include "modules/rtp_rtcp/source/rtcp_packet/extended_reports.h"
#include "modules/rtp_rtcp/source/rtcp_packet/fir.h"
#include "modules/rtp_rtcp/source/rtcp_packet/nack.h"
@@ -35,17 +46,21 @@
#include "modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h"
#include "modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
#include "modules/rtp_rtcp/source/rtcp_packet/remb.h"
+#include "modules/rtp_rtcp/source/rtcp_packet/rtpfb.h"
#include "modules/rtp_rtcp/source/rtcp_packet/sdes.h"
#include "modules/rtp_rtcp/source/rtcp_packet/sender_report.h"
#include "modules/rtp_rtcp/source/rtcp_packet/tmmbr.h"
#include "modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
+#include "modules/rtp_rtcp/source/rtp_rtcp_interface.h"
#include "rtc_base/arraysize.h"
-#include "rtc_base/fake_clock.h"
+#include "rtc_base/buffer.h"
#include "rtc_base/random.h"
+#include "rtc_base/time_utils.h"
+#include "system_wrappers/include/clock.h"
#include "system_wrappers/include/ntp_time.h"
+#include "test/explicit_key_value_config.h"
#include "test/gmock.h"
#include "test/gtest.h"
-#include "test/scoped_key_value_config.h"
namespace webrtc {
namespace {
@@ -66,7 +81,7 @@
using ::testing::StrEq;
using ::testing::StrictMock;
using ::testing::UnorderedElementsAre;
-using ::webrtc::test::ScopedKeyValueConfig;
+using ::webrtc::test::ExplicitKeyValueConfig;
class MockRtcpPacketTypeCounterObserver : public RtcpPacketTypeCounterObserver {
public:
@@ -143,9 +158,8 @@
} // namespace
struct ReceiverMocks {
- ReceiverMocks() : clock(1335900000) {}
-
- SimulatedClock clock;
+ SimulatedClock clock{1335900000};
+ std::string field_trials;
// Callbacks to packet_type_counter_observer are frequent but most of the time
// are not interesting.
NiceMock<MockRtcpPacketTypeCounterObserver> packet_type_counter_observer;
@@ -154,28 +168,30 @@
StrictMock<MockVideoBitrateAllocationObserver> bitrate_allocation_observer;
StrictMock<MockModuleRtpRtcp> rtp_rtcp_impl;
NiceMock<MockNetworkLinkRtcpObserver> network_link_rtcp_observer;
+
+ RtpRtcpInterface::Configuration config = {
+ .receiver_only = false,
+ .intra_frame_callback = &intra_frame_observer,
+ .rtcp_loss_notification_observer = &rtcp_loss_notification_observer,
+ .network_link_rtcp_observer = &network_link_rtcp_observer,
+ .bitrate_allocation_observer = &bitrate_allocation_observer,
+ .rtcp_packet_type_counter_observer = &packet_type_counter_observer,
+ .rtcp_report_interval_ms = kRtcpIntervalMs,
+ .local_media_ssrc = kReceiverMainSsrc,
+ .rtx_send_ssrc = kReceiverExtraSsrc};
};
-RtpRtcpInterface::Configuration DefaultConfiguration(ReceiverMocks* mocks) {
- RtpRtcpInterface::Configuration config;
- config.clock = &mocks->clock;
- config.receiver_only = false;
- config.rtcp_packet_type_counter_observer =
- &mocks->packet_type_counter_observer;
- config.network_link_rtcp_observer = &mocks->network_link_rtcp_observer;
- config.intra_frame_callback = &mocks->intra_frame_observer;
- config.rtcp_loss_notification_observer =
- &mocks->rtcp_loss_notification_observer;
- config.bitrate_allocation_observer = &mocks->bitrate_allocation_observer;
- config.rtcp_report_interval_ms = kRtcpIntervalMs;
- config.local_media_ssrc = kReceiverMainSsrc;
- config.rtx_send_ssrc = kReceiverExtraSsrc;
- return config;
+RTCPReceiver Create(ReceiverMocks& mocks) {
+ return RTCPReceiver(
+ CreateEnvironment(
+ &mocks.clock,
+ std::make_unique<test::ExplicitKeyValueConfig>(mocks.field_trials)),
+ mocks.config, &mocks.rtp_rtcp_impl);
}
TEST(RtcpReceiverTest, BrokenPacketIsIgnored) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
const uint8_t bad_packet[] = {0, 0, 0, 0};
EXPECT_CALL(mocks.packet_type_counter_observer, RtcpPacketTypesCounterUpdated)
@@ -185,7 +201,7 @@
TEST(RtcpReceiverTest, InvalidFeedbackPacketIsIgnored) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
// Too short feedback packet.
const uint8_t bad_packet[] = {0x81, rtcp::Rtpfb::kPacketType, 0, 0};
@@ -197,7 +213,7 @@
TEST(RtcpReceiverTest, InjectSrPacket) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
EXPECT_FALSE(receiver.GetSenderReportStats());
@@ -213,7 +229,7 @@
TEST(RtcpReceiverTest, InjectSrPacketFromUnknownSender) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::SenderReport sr;
@@ -230,7 +246,7 @@
TEST(RtcpReceiverTest, InjectSrPacketCalculatesRTT) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const TimeDelta kRtt = TimeDelta::Millis(123);
@@ -259,7 +275,7 @@
TEST(RtcpReceiverTest, InjectSrPacketCalculatesNegativeRTTAsOneMs) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const TimeDelta kRtt = TimeDelta::Millis(-13);
@@ -289,7 +305,7 @@
TEST(RtcpReceiverTest, TwoReportBlocksWithLastOneWithoutLastSrCalculatesRtt) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const TimeDelta kRtt = TimeDelta::Millis(125);
@@ -317,7 +333,7 @@
TEST(RtcpReceiverTest, InjectRrPacket) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::ReceiverReport rr;
@@ -331,7 +347,7 @@
TEST(RtcpReceiverTest, InjectRrPacketWithReportBlockNotToUsIgnored) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::ReportBlock rb;
@@ -350,7 +366,7 @@
TEST(RtcpReceiverTest, InjectRrPacketWithOneReportBlock) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
Timestamp now = mocks.clock.CurrentTime();
@@ -371,7 +387,7 @@
TEST(RtcpReceiverTest, InjectSrPacketWithOneReportBlock) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
Timestamp now = mocks.clock.CurrentTime();
@@ -395,7 +411,7 @@
const uint32_t kCumLost[] = {13, 555};
const uint8_t kFracLost[] = {20, 11};
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
Timestamp now = mocks.clock.CurrentTime();
@@ -473,7 +489,7 @@
const int32_t kCumLost[] = {13, 555};
const uint8_t kFracLost[] = {20, 11};
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::ReportBlock rb1;
@@ -525,7 +541,7 @@
TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnReportBlocks) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::ReportBlock rb1;
@@ -559,9 +575,8 @@
const uint32_t kSentCompactNtp = 0x1234;
const uint32_t kDelayCompactNtp = 0x222;
ReceiverMocks mocks;
- RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
- config.network_link_rtcp_observer = &mocks.network_link_rtcp_observer;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.network_link_rtcp_observer = &mocks.network_link_rtcp_observer;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
// No report block received.
@@ -591,7 +606,7 @@
// App packets are ignored.
TEST(RtcpReceiverTest, InjectApp) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::App app;
@@ -606,9 +621,8 @@
TEST(RtcpReceiverTest, InjectSdesWithOneChunk) {
ReceiverMocks mocks;
MockCnameCallbackImpl callback;
- RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
- config.rtcp_cname_callback = &callback;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.rtcp_cname_callback = &callback;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const char kCname[] = "alice@host";
@@ -621,7 +635,7 @@
TEST(RtcpReceiverTest, InjectByePacketRemovesReportBlocks) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::ReportBlock rb1;
@@ -655,7 +669,7 @@
TEST(RtcpReceiverTest, InjectByePacketRemovesReferenceTimeInfo) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::ExtendedReports xr;
@@ -674,7 +688,7 @@
TEST(RtcpReceiverTest, InjectPliPacket) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::Pli pli;
@@ -691,7 +705,7 @@
TEST(RtcpReceiverTest, PliPacketNotToUsIgnored) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::Pli pli;
@@ -707,7 +721,7 @@
TEST(RtcpReceiverTest, InjectFirPacket) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::Fir fir;
@@ -724,7 +738,7 @@
TEST(RtcpReceiverTest, FirPacketNotToUsIgnored) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::Fir fir;
@@ -736,7 +750,7 @@
TEST(RtcpReceiverTest, ExtendedReportsPacketWithZeroReportBlocksIgnored) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::ExtendedReports xr;
@@ -747,7 +761,7 @@
TEST(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const NtpTime kNtp(0x10203, 0x40506);
@@ -772,10 +786,9 @@
TEST(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
// Allow calculate rtt using dlrr/rrtr, simulating media receiver side.
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::ExtendedReports xr;
@@ -794,9 +807,8 @@
TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const uint32_t kLastRR = 0x12345;
@@ -822,9 +834,8 @@
TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const uint32_t kLastRR = 0x12345;
@@ -851,9 +862,8 @@
TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::Rrtr rrtr;
@@ -872,9 +882,8 @@
TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::Rrtr rrtr;
@@ -904,9 +913,8 @@
TEST(RtcpReceiverTest, TestExtendedReportsRrRttInitiallyFalse) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
EXPECT_FALSE(receiver.GetAndResetXrRrRtt());
@@ -919,9 +927,8 @@
TEST(RtcpReceiverTest, RttCalculatedAfterExtendedReportsDlrr) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
Random rand(0x0123456789abcdef);
@@ -951,9 +958,8 @@
// the config struct.
TEST(RtcpReceiverTest, SetterEnablesReceiverRtt) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = false;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = false;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
receiver.SetNonSenderRttMeasurement(true);
@@ -984,9 +990,8 @@
// the config struct.
TEST(RtcpReceiverTest, DoesntCalculateRttOnReceivedDlrr) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
receiver.SetNonSenderRttMeasurement(false);
@@ -1015,9 +1020,8 @@
TEST(RtcpReceiverTest, XrDlrrCalculatesNegativeRttAsOneMillisecond) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
Random rand(0x0123456789abcdef);
@@ -1046,9 +1050,8 @@
// Test receiver RTT stats with multiple measurements.
TEST(RtcpReceiverTest, ReceiverRttWithMultipleMeasurements) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
Random rand(0x0123456789abcdef);
@@ -1101,9 +1104,8 @@
// https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteoutboundrtpstreamstats-roundtriptime.
TEST(RtcpReceiverTest, ReceiverRttResetOnSrWithoutXr) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
Random rand(0x0123456789abcdef);
@@ -1145,9 +1147,8 @@
// https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteoutboundrtpstreamstats-roundtriptime.
TEST(RtcpReceiverTest, ReceiverRttResetOnDlrrWithZeroTimestamp) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = true;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = true;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
Random rand(0x0123456789abcdef);
@@ -1184,9 +1185,8 @@
// Check that the receiver RTT works correctly when the remote SSRC changes.
TEST(RtcpReceiverTest, ReceiverRttWithMultipleRemoteSsrcs) {
ReceiverMocks mocks;
- auto config = DefaultConfiguration(&mocks);
- config.non_sender_rtt_measurement = false;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.non_sender_rtt_measurement = false;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
receiver.SetNonSenderRttMeasurement(true);
@@ -1238,7 +1238,7 @@
TEST(RtcpReceiverTest, ConsumeReceivedXrReferenceTimeInfoInitiallyEmpty) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
EXPECT_THAT(receiver.ConsumeReceivedXrReferenceTimeInfo(), IsEmpty());
@@ -1246,7 +1246,7 @@
TEST(RtcpReceiverTest, ConsumeReceivedXrReferenceTimeInfo) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const NtpTime kNtp(0x10203, 0x40506);
@@ -1273,7 +1273,7 @@
TEST(RtcpReceiverTest,
ReceivedRrtrFromSameSsrcUpdatesReceivedReferenceTimeInfo) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const NtpTime kNtp1(0x10203, 0x40506);
@@ -1303,7 +1303,7 @@
TEST(RtcpReceiverTest, StoresLastReceivedRrtrPerSsrc) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const size_t kNumBufferedReports = 1;
@@ -1335,7 +1335,7 @@
TEST(RtcpReceiverTest, ReceiveReportTimeout) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const uint16_t kSequenceNumber = 1234;
@@ -1407,7 +1407,7 @@
TEST(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
EXPECT_THAT(receiver.TmmbrReceived(), IsEmpty());
@@ -1415,7 +1415,7 @@
TEST(RtcpReceiverTest, TmmbrPacketAccepted) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const DataRate kBitrate = DataRate::BitsPerSec(30'000);
@@ -1443,7 +1443,7 @@
TEST(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const uint32_t kBitrateBps = 30000;
@@ -1467,7 +1467,7 @@
TEST(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
auto tmmbr = std::make_unique<rtcp::Tmmbr>();
@@ -1489,7 +1489,7 @@
TEST(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
// Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2.
@@ -1531,9 +1531,8 @@
VerifyBlockAndTimestampObtainedFromReportBlockDataObserver) {
ReceiverMocks mocks;
MockReportBlockDataObserverImpl observer;
- RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
- config.report_block_data_observer = &observer;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.report_block_data_observer = &observer;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const uint8_t kFractionLoss = 3;
@@ -1574,9 +1573,8 @@
TEST(RtcpReceiverTest, VerifyRttObtainedFromReportBlockDataObserver) {
ReceiverMocks mocks;
MockReportBlockDataObserverImpl observer;
- RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
- config.report_block_data_observer = &observer;
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.config.report_block_data_observer = &observer;
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
// To avoid issues with rounding due to different way to represent time units,
@@ -1620,7 +1618,7 @@
TEST(RtcpReceiverTest, GetReportBlockDataAfterOneReportBlock) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const uint16_t kSequenceNumber = 1234;
@@ -1644,7 +1642,7 @@
TEST(RtcpReceiverTest, GetReportBlockDataAfterTwoReportBlocksOfSameSsrc) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const uint16_t kSequenceNumber1 = 1234;
@@ -1682,7 +1680,7 @@
TEST(RtcpReceiverTest, GetReportBlockDataAfterTwoReportBlocksOfDifferentSsrcs) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const uint16_t kSequenceNumber1 = 1234;
@@ -1722,12 +1720,11 @@
TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnTransportFeedback) {
ReceiverMocks mocks;
- RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::TransportFeedback packet;
- packet.SetMediaSsrc(config.local_media_ssrc);
+ packet.SetMediaSsrc(mocks.config.local_media_ssrc);
packet.SetSenderSsrc(kSenderSsrc);
packet.SetBase(123, Timestamp::Millis(1));
packet.AddReceivedPacket(123, Timestamp::Millis(1));
@@ -1744,11 +1741,9 @@
}
TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnCongestionControlFeedback) {
- ScopedKeyValueConfig trials(
- "WebRTC-RFC8888CongestionControlFeedback/Enabled/");
ReceiverMocks mocks;
- RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.field_trials = "WebRTC-RFC8888CongestionControlFeedback/Enabled/";
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::CongestionControlFeedback packet({{
@@ -1767,11 +1762,9 @@
}
TEST(RtcpReceiverTest, HandlesInvalidCongestionControlFeedback) {
- ScopedKeyValueConfig trials(
- "WebRTC-RFC8888CongestionControlFeedback/Enabled/");
ReceiverMocks mocks;
- RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ mocks.field_trials = "WebRTC-RFC8888CongestionControlFeedback/Enabled/";
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::CongestionControlFeedback packet({{
@@ -1794,12 +1787,11 @@
TEST(RtcpReceiverTest,
NotifiesNetworkLinkObserverOnTransportFeedbackOnRtxSsrc) {
ReceiverMocks mocks;
- RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
- RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::TransportFeedback packet;
- packet.SetMediaSsrc(*config.rtx_send_ssrc);
+ packet.SetMediaSsrc(*mocks.config.rtx_send_ssrc);
packet.SetSenderSsrc(kSenderSsrc);
packet.SetBase(1, Timestamp::Millis(1));
packet.AddReceivedPacket(1, Timestamp::Millis(1));
@@ -1811,7 +1803,7 @@
TEST(RtcpReceiverTest,
DoesNotNotifyNetworkLinkObserverOnTransportFeedbackForUnregistedSsrc) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::TransportFeedback packet;
@@ -1826,7 +1818,7 @@
TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnRemb) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::Remb remb;
@@ -1841,7 +1833,7 @@
TEST(RtcpReceiverTest, HandlesInvalidTransportFeedback) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
// Send a compound packet with a TransportFeedback followed by something else.
@@ -1875,7 +1867,7 @@
TEST(RtcpReceiverTest, Nack) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const uint16_t kNackList1[] = {1, 2, 3, 5};
@@ -1930,7 +1922,7 @@
TEST(RtcpReceiverTest, NackNotForUsIgnored) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
const uint16_t kNackList1[] = {1, 2, 3, 5};
@@ -1949,7 +1941,7 @@
TEST(RtcpReceiverTest, ForceSenderReport) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
rtcp::RapidResyncRequest rr;
@@ -1962,7 +1954,7 @@
TEST(RtcpReceiverTest, ReceivesTargetBitrate) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
VideoBitrateAllocation expected_allocation;
@@ -1996,7 +1988,7 @@
TEST(RtcpReceiverTest, HandlesIncorrectTargetBitrate) {
ReceiverMocks mocks;
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
VideoBitrateAllocation expected_allocation;
@@ -2019,7 +2011,7 @@
TEST(RtcpReceiverTest, ChangeLocalMediaSsrc) {
ReceiverMocks mocks;
// Construct a receiver with `kReceiverMainSsrc` (default) local media ssrc.
- RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
+ RTCPReceiver receiver = Create(mocks);
receiver.SetRemoteSSRC(kSenderSsrc);
constexpr uint32_t kSecondarySsrc = kReceiverMainSsrc + 1;
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index a2d963a..600230b 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -90,7 +90,7 @@
: env_(env),
rtcp_sender_(
RTCPSender::Configuration::FromRtpRtcpConfiguration(configuration)),
- rtcp_receiver_(configuration, this),
+ rtcp_receiver_(env_, configuration, this),
last_bitrate_process_time_(env_.clock().TimeInMilliseconds()),
last_rtt_process_time_(env_.clock().TimeInMilliseconds()),
packet_overhead_(28), // IPV4 UDP.
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl2.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl2.cc
index 43ae7d5..cc61ad4 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl2.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl2.cc
@@ -116,7 +116,7 @@
[this](TimeDelta duration) {
ScheduleRtcpSendEvaluation(duration);
})),
- rtcp_receiver_(configuration, this),
+ rtcp_receiver_(env_, configuration, this),
packet_overhead_(28), // IPV4 UDP.
nack_last_time_sent_full_ms_(0),
nack_last_seq_number_sent_(0),
diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn
index 34b765b..09faca4 100644
--- a/test/fuzzers/BUILD.gn
+++ b/test/fuzzers/BUILD.gn
@@ -224,11 +224,14 @@
webrtc_fuzzer_test("rtcp_receiver_fuzzer") {
sources = [ "rtcp_receiver_fuzzer.cc" ]
deps = [
+ "../../api:array_view",
+ "../../api/environment",
+ "../../api/environment:environment_factory",
"../../modules/rtp_rtcp",
"../../modules/rtp_rtcp:rtp_rtcp_format",
"../../rtc_base:checks",
"../../system_wrappers",
- "../../system_wrappers:field_trial",
+ "../../test:explicit_key_value_config",
]
seed_corpus = "corpora/rtcp-corpus"
}
diff --git a/test/fuzzers/rtcp_receiver_fuzzer.cc b/test/fuzzers/rtcp_receiver_fuzzer.cc
index 5dedf58..f498752 100644
--- a/test/fuzzers/rtcp_receiver_fuzzer.cc
+++ b/test/fuzzers/rtcp_receiver_fuzzer.cc
@@ -7,11 +7,19 @@
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
+
+#include <cstddef>
+#include <cstdint>
+#include <vector>
+
+#include "api/array_view.h"
+#include "api/environment/environment_factory.h"
+#include "modules/rtp_rtcp/include/report_block_data.h"
#include "modules/rtp_rtcp/source/rtcp_packet/tmmb_item.h"
#include "modules/rtp_rtcp/source/rtcp_receiver.h"
#include "modules/rtp_rtcp/source/rtp_rtcp_interface.h"
#include "system_wrappers/include/clock.h"
-#include "system_wrappers/include/field_trial.h"
+#include "test/explicit_key_value_config.h"
namespace webrtc {
namespace {
@@ -37,17 +45,17 @@
if (size > kMaxInputLenBytes) {
return;
}
- field_trial::InitFieldTrialsFromString(
+ test::ExplicitKeyValueConfig field_trials(
"WebRTC-RFC8888CongestionControlFeedback/Enabled/");
NullModuleRtpRtcp rtp_rtcp_module;
SimulatedClock clock(1234);
RtpRtcpInterface::Configuration config;
- config.clock = &clock;
config.rtcp_report_interval_ms = kRtcpIntervalMs;
config.local_media_ssrc = 1;
- RTCPReceiver receiver(config, &rtp_rtcp_module);
+ RTCPReceiver receiver(CreateEnvironment(&clock, &field_trials), config,
+ &rtp_rtcp_module);
receiver.IncomingPacket(rtc::MakeArrayView(data, size));
}