Add PacketOptions to SendRtcp
which will allow sending RTCP with ECN flags.
BUG=webrtc:42225697
Change-Id: Ie32a0e4fc0ce34aaa0f960f85258c1365ba706bc
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/387120
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Philipp Hancke <phancke@meta.com>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#44478}
diff --git a/api/call/transport.h b/api/call/transport.h
index b2bc18e..a445ffe 100644
--- a/api/call/transport.h
+++ b/api/call/transport.h
@@ -28,7 +28,8 @@
// as packet_id not being set.
int64_t packet_id = -1;
// Whether this is an audio or video packet, excluding retransmissions.
- bool is_media = true;
+ // Defaults to `false` which is the more common case.
+ bool is_media = false;
bool included_in_feedback = false;
bool included_in_allocation = false;
bool send_as_ect1 = false;
@@ -42,7 +43,19 @@
public:
virtual bool SendRtp(ArrayView<const uint8_t> packet,
const PacketOptions& options) = 0;
- virtual bool SendRtcp(ArrayView<const uint8_t> packet) = 0;
+ // TODO: bugs.webrtc.org/42225697 - Make virtual when downstream is updated.
+ virtual bool SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& /*options*/) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ return SendRtcp(packet);
+#pragma clang diagnostic pop
+ }
+ [[deprecated("Pass PacketOptions")]]
+ // TODO: bugs.webrtc.org/42225697 - Remove when downstream is updated.
+ virtual bool SendRtcp(ArrayView<const uint8_t> packet) {
+ return SendRtcp(packet, /*packet_options=*/{});
+ }
protected:
virtual ~Transport() {}
diff --git a/audio/BUILD.gn b/audio/BUILD.gn
index 702a8d8..0492dd2 100644
--- a/audio/BUILD.gn
+++ b/audio/BUILD.gn
@@ -260,19 +260,31 @@
sources = [ "channel_receive_unittest.cc" ]
deps = [
":audio",
+ "../api:array_view",
+ "../api:make_ref_counted",
"../api:mock_frame_transformer",
+ "../api:scoped_refptr",
+ "../api:transport_api",
"../api/audio:audio_device",
+ "../api/audio:audio_frame_api",
+ "../api/audio_codecs:audio_codecs_api",
"../api/audio_codecs:builtin_audio_decoder_factory",
"../api/crypto:frame_decryptor_interface",
+ "../api/crypto:options",
"../api/environment:environment_factory",
"../api/task_queue:default_task_queue_factory",
+ "../api/units:time_delta",
+ "../api/units:timestamp",
"../logging:mocks",
"../modules/audio_device:mock_audio_device",
"../modules/rtp_rtcp",
"../modules/rtp_rtcp:ntp_time_util",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../rtc_base:logging",
+ "../rtc_base:stringutils",
"../rtc_base:threading",
+ "../rtc_base:timeutils",
+ "../system_wrappers",
"../test:audio_codec_mocks",
"../test:mock_transport",
"../test:test_support",
diff --git a/audio/channel_receive.h b/audio/channel_receive.h
index ee72187..6179c4f 100644
--- a/audio/channel_receive.h
+++ b/audio/channel_receive.h
@@ -27,6 +27,7 @@
#include "api/call/audio_sink.h"
#include "api/call/transport.h"
#include "api/crypto/crypto_options.h"
+#include "api/crypto/frame_decryptor_interface.h"
#include "api/environment/environment.h"
#include "api/frame_transformer_interface.h"
#include "api/neteq/neteq_factory.h"
@@ -42,7 +43,6 @@
namespace webrtc {
class AudioDeviceModule;
-class FrameDecryptorInterface;
class PacketRouter;
class RateLimiter;
class ReceiveStatistics;
diff --git a/audio/channel_receive_unittest.cc b/audio/channel_receive_unittest.cc
index 7cedba6..e228b42 100644
--- a/audio/channel_receive_unittest.cc
+++ b/audio/channel_receive_unittest.cc
@@ -10,25 +10,38 @@
#include "audio/channel_receive.h"
-#include "absl/strings/escaping.h"
-#include "api/audio/audio_device.h"
+#include <cstddef>
+#include <cstdint>
+#include <cstring>
+#include <memory>
+#include <optional>
+#include <vector>
+
+#include "absl/strings/string_view.h"
+#include "api/array_view.h"
+#include "api/audio/audio_frame.h"
+#include "api/audio_codecs/audio_decoder_factory.h"
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
-#include "api/crypto/frame_decryptor_interface.h"
+#include "api/call/transport.h"
+#include "api/crypto/crypto_options.h"
#include "api/environment/environment_factory.h"
+#include "api/make_ref_counted.h"
+#include "api/scoped_refptr.h"
#include "api/test/mock_frame_transformer.h"
+#include "api/units/time_delta.h"
+#include "api/units/timestamp.h"
#include "modules/audio_device/include/mock_audio_device.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/receiver_report.h"
#include "modules/rtp_rtcp/source/rtcp_packet/report_block.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/rtp_packet_received.h"
#include "rtc_base/logging.h"
-#include "rtc_base/thread.h"
+#include "rtc_base/string_encode.h"
+#include "rtc_base/time_utils.h"
+#include "system_wrappers/include/ntp_time.h"
#include "test/gmock.h"
#include "test/gtest.h"
-#include "test/mock_audio_decoder_factory.h"
#include "test/mock_transport.h"
#include "test/time_controller/simulated_time_controller.h"
@@ -171,7 +184,8 @@
bool receiver_report_sent = false;
EXPECT_CALL(transport_, SendRtcp)
- .WillRepeatedly([&](ArrayView<const uint8_t> packet) {
+ .WillRepeatedly([&](ArrayView<const uint8_t> packet,
+ const PacketOptions& options) {
if (packet.size() >= 2 &&
packet[1] == rtcp::ReceiverReport::kPacketType) {
receiver_report_sent = true;
@@ -189,10 +203,11 @@
auto channel = CreateTestChannelReceive();
EXPECT_CALL(transport_, SendRtcp)
- .WillRepeatedly([&](ArrayView<const uint8_t> packet) {
- HandleGeneratedRtcp(*channel, packet);
- return true;
- });
+ .WillRepeatedly(
+ [&](ArrayView<const uint8_t> packet, const PacketOptions& options) {
+ HandleGeneratedRtcp(*channel, packet);
+ return true;
+ });
// Before any packets are sent, CaptureStartTime is invalid.
EXPECT_EQ(ProbeCaptureStartNtpTime(*channel), -1);
diff --git a/audio/voip/test/BUILD.gn b/audio/voip/test/BUILD.gn
index 7f12006..2b80dc6 100644
--- a/audio/voip/test/BUILD.gn
+++ b/audio/voip/test/BUILD.gn
@@ -46,17 +46,25 @@
deps = [
":mock_task_queue",
"..:audio_channel",
+ "../../../api:array_view",
+ "../../../api:make_ref_counted",
+ "../../../api:scoped_refptr",
"../../../api:transport_api",
+ "../../../api/audio:audio_frame_api",
+ "../../../api/audio:audio_mixer_api",
+ "../../../api/audio_codecs:audio_codecs_api",
"../../../api/audio_codecs:builtin_audio_decoder_factory",
"../../../api/audio_codecs:builtin_audio_encoder_factory",
"../../../api/environment",
"../../../api/environment:environment_factory",
"../../../api/task_queue:task_queue",
+ "../../../api/voip:voip_api",
"../../../modules/audio_mixer:audio_mixer_impl",
"../../../modules/audio_mixer:audio_mixer_test_utils",
"../../../modules/rtp_rtcp:rtp_rtcp",
"../../../modules/rtp_rtcp:rtp_rtcp_format",
"../../../rtc_base:logging",
+ "../../../system_wrappers",
"../../../test:mock_transport",
"../../../test:test_support",
"//third_party/abseil-cpp/absl/functional:any_invocable",
diff --git a/audio/voip/test/audio_channel_unittest.cc b/audio/voip/test/audio_channel_unittest.cc
index 9a47e03..ad71c67 100644
--- a/audio/voip/test/audio_channel_unittest.cc
+++ b/audio/voip/test/audio_channel_unittest.cc
@@ -10,19 +10,32 @@
#include "audio/voip/audio_channel.h"
+#include <cstdint>
+#include <cstring>
+#include <memory>
+#include <optional>
+#include <utility>
+
#include "absl/functional/any_invocable.h"
+#include "api/array_view.h"
+#include "api/audio/audio_frame.h"
+#include "api/audio/audio_mixer.h"
+#include "api/audio_codecs/audio_decoder_factory.h"
+#include "api/audio_codecs/audio_encoder_factory.h"
+#include "api/audio_codecs/audio_format.h"
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
-#include "api/call/transport.h"
#include "api/environment/environment.h"
#include "api/environment/environment_factory.h"
-#include "api/task_queue/task_queue_base.h"
-#include "api/task_queue/task_queue_factory.h"
+#include "api/make_ref_counted.h"
+#include "api/scoped_refptr.h"
+#include "api/voip/voip_statistics.h"
#include "audio/voip/test/mock_task_queue.h"
#include "modules/audio_mixer/audio_mixer_impl.h"
#include "modules/audio_mixer/sine_wave_generator.h"
+#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "modules/rtp_rtcp/source/rtp_packet_received.h"
-#include "rtc_base/logging.h"
+#include "system_wrappers/include/clock.h"
#include "test/gmock.h"
#include "test/gtest.h"
#include "test/mock_transport.h"
@@ -229,7 +242,7 @@
audio_channel_->ReceivedRTPPacket(packet);
return true;
};
- auto loop_rtcp = [&](ArrayView<const uint8_t> packet) {
+ auto loop_rtcp = [&](ArrayView<const uint8_t> packet, Unused) {
audio_channel_->ReceivedRTCPPacket(packet);
return true;
};
@@ -316,7 +329,7 @@
auto send_recv_rtcp = [&](scoped_refptr<AudioChannel> rtcp_sender,
scoped_refptr<AudioChannel> rtcp_receiver) {
// Setup routing logic via transport_.
- auto route_rtcp = [&](ArrayView<const uint8_t> packet) {
+ auto route_rtcp = [&](ArrayView<const uint8_t> packet, Unused) {
rtcp_receiver->ReceivedRTCPPacket(packet);
return true;
};
diff --git a/call/fake_network_pipe.cc b/call/fake_network_pipe.cc
index a1150b3..f63bf11 100644
--- a/call/fake_network_pipe.cc
+++ b/call/fake_network_pipe.cc
@@ -323,7 +323,8 @@
return;
}
if (packet->is_rtcp()) {
- transport->SendRtcp(MakeArrayView(packet->data(), packet->data_length()));
+ transport->SendRtcp(MakeArrayView(packet->data(), packet->data_length()),
+ packet->packet_options());
} else {
transport->SendRtp(MakeArrayView(packet->data(), packet->data_length()),
packet->packet_options());
diff --git a/examples/androidvoip/jni/android_voip_client.cc b/examples/androidvoip/jni/android_voip_client.cc
index f15355d..cea3d48 100644
--- a/examples/androidvoip/jni/android_voip_client.cc
+++ b/examples/androidvoip/jni/android_voip_client.cc
@@ -479,7 +479,8 @@
}
}
-bool AndroidVoipClient::SendRtcp(webrtc::ArrayView<const uint8_t> packet) {
+bool AndroidVoipClient::SendRtcp(webrtc::ArrayView<const uint8_t> packet,
+ const webrtc::PacketOptions& options) {
std::vector<uint8_t> packet_copy(packet.begin(), packet.end());
voip_thread_->PostTask([this, packet_copy = std::move(packet_copy)] {
SendRtcpPacket(packet_copy);
diff --git a/examples/androidvoip/jni/android_voip_client.h b/examples/androidvoip/jni/android_voip_client.h
index 29a0fc8..cb8b927 100644
--- a/examples/androidvoip/jni/android_voip_client.h
+++ b/examples/androidvoip/jni/android_voip_client.h
@@ -120,7 +120,8 @@
// Implementation for Transport.
bool SendRtp(webrtc::ArrayView<const uint8_t> packet,
const webrtc::PacketOptions& options) override;
- bool SendRtcp(webrtc::ArrayView<const uint8_t> packet) override;
+ bool SendRtcp(webrtc::ArrayView<const uint8_t> packet,
+ const webrtc::PacketOptions& options) override;
void OnSignalReadRTPPacket(webrtc::AsyncPacketSocket* socket,
const webrtc::ReceivedIpPacket& packet);
diff --git a/media/base/media_channel_impl.cc b/media/base/media_channel_impl.cc
index 40da627..b880077 100644
--- a/media/base/media_channel_impl.cc
+++ b/media/base/media_channel_impl.cc
@@ -19,9 +19,6 @@
#include "api/array_view.h"
#include "api/audio_options.h"
#include "api/call/transport.h"
-#include "api/crypto/frame_decryptor_interface.h"
-#include "api/crypto/frame_encryptor_interface.h"
-#include "api/frame_transformer_interface.h"
#include "api/media_stream_interface.h"
#include "api/rtc_error.h"
#include "api/rtp_sender_interface.h"
@@ -173,15 +170,32 @@
RTC_DCHECK(!network_interface_);
}
+AsyncSocketPacketOptions
+MediaChannelUtil::TransportForMediaChannels::TranslatePacketOptions(
+ const PacketOptions& options) {
+ AsyncSocketPacketOptions rtc_options;
+ rtc_options.packet_id = options.packet_id;
+ if (DscpEnabled()) {
+ rtc_options.dscp = PreferredDscp();
+ }
+ rtc_options.info_signaled_after_sent.included_in_feedback =
+ options.included_in_feedback;
+ rtc_options.info_signaled_after_sent.included_in_allocation =
+ options.included_in_allocation;
+ rtc_options.info_signaled_after_sent.is_media = options.is_media;
+ rtc_options.ecn_1 = options.send_as_ect1;
+ rtc_options.batchable = options.batchable;
+ rtc_options.last_packet_in_batch = options.last_packet_in_batch;
+ return rtc_options;
+}
+
bool MediaChannelUtil::TransportForMediaChannels::SendRtcp(
- ArrayView<const uint8_t> packet) {
- auto send = [this, packet = CopyOnWriteBuffer(
- packet, webrtc::kMaxRtpPacketLen)]() mutable {
- AsyncSocketPacketOptions rtc_options;
- if (DscpEnabled()) {
- rtc_options.dscp = PreferredDscp();
- }
- DoSendPacket(&packet, true, rtc_options);
+ ArrayView<const uint8_t> packet,
+ const PacketOptions& options) {
+ auto send = [this,
+ packet = CopyOnWriteBuffer(packet, webrtc::kMaxRtpPacketLen),
+ options]() mutable {
+ DoSendPacket(&packet, true, TranslatePacketOptions(options));
};
if (network_thread_->IsCurrent()) {
@@ -195,28 +209,10 @@
bool MediaChannelUtil::TransportForMediaChannels::SendRtp(
ArrayView<const uint8_t> packet,
const webrtc::PacketOptions& options) {
- auto send = [this, packet_id = options.packet_id,
- included_in_feedback = options.included_in_feedback,
- included_in_allocation = options.included_in_allocation,
- batchable = options.batchable,
- last_packet_in_batch = options.last_packet_in_batch,
- is_media = options.is_media, ect_1 = options.send_as_ect1,
- packet = CopyOnWriteBuffer(packet,
- webrtc::kMaxRtpPacketLen)]() mutable {
- AsyncSocketPacketOptions rtc_options;
- rtc_options.packet_id = packet_id;
- if (DscpEnabled()) {
- rtc_options.dscp = PreferredDscp();
- }
- rtc_options.info_signaled_after_sent.included_in_feedback =
- included_in_feedback;
- rtc_options.info_signaled_after_sent.included_in_allocation =
- included_in_allocation;
- rtc_options.info_signaled_after_sent.is_media = is_media;
- rtc_options.ecn_1 = ect_1;
- rtc_options.batchable = batchable;
- rtc_options.last_packet_in_batch = last_packet_in_batch;
- DoSendPacket(&packet, false, rtc_options);
+ auto send = [this,
+ packet = CopyOnWriteBuffer(packet, webrtc::kMaxRtpPacketLen),
+ options]() mutable {
+ DoSendPacket(&packet, false, TranslatePacketOptions(options));
};
// TODO(bugs.webrtc.org/11993): ModuleRtpRtcpImpl2 and related classes (e.g.
diff --git a/media/base/media_channel_impl.h b/media/base/media_channel_impl.h
index 3c30e6b..8c222b2 100644
--- a/media/base/media_channel_impl.h
+++ b/media/base/media_channel_impl.h
@@ -91,7 +91,8 @@
// Implementation of webrtc::Transport
bool SendRtp(ArrayView<const uint8_t> packet,
const PacketOptions& options) override;
- bool SendRtcp(ArrayView<const uint8_t> packet) override;
+ bool SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) override;
// Not implementation of webrtc::Transport
void SetInterface(MediaChannelNetworkInterface* iface);
@@ -99,6 +100,8 @@
int SetOption(MediaChannelNetworkInterface::SocketType type,
Socket::Option opt,
int option);
+ AsyncSocketPacketOptions TranslatePacketOptions(
+ const PacketOptions& options);
bool DoSendPacket(CopyOnWriteBuffer* packet,
bool rtcp,
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index 8e1029a..0d2803b 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -5788,7 +5788,8 @@
// Packets should also self-identify their dscp in PacketOptions.
const uint8_t kData[10] = {0};
- EXPECT_TRUE(ChannelImplAsTransport(send_channel.get())->SendRtcp(kData));
+ EXPECT_TRUE(ChannelImplAsTransport(send_channel.get())
+ ->SendRtcp(kData, /*packet_options=*/{}));
EXPECT_EQ(DSCP_CS1, network_interface->options().dscp);
send_channel->SetInterface(nullptr);
diff --git a/media/engine/webrtc_voice_engine_unittest.cc b/media/engine/webrtc_voice_engine_unittest.cc
index 4223f88..c4d1a1d 100644
--- a/media/engine/webrtc_voice_engine_unittest.cc
+++ b/media/engine/webrtc_voice_engine_unittest.cc
@@ -30,6 +30,7 @@
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
#include "api/audio_options.h"
#include "api/call/audio_sink.h"
+#include "api/call/transport.h"
#include "api/crypto/crypto_options.h"
#include "api/environment/environment.h"
#include "api/environment/environment_factory.h"
@@ -3427,7 +3428,9 @@
// Packets should also self-identify their dscp in PacketOptions.
const uint8_t kData[10] = {0};
- EXPECT_TRUE(SendImplFromPointer(channel.get())->transport()->SendRtcp(kData));
+ EXPECT_TRUE(SendImplFromPointer(channel.get())
+ ->transport()
+ ->SendRtcp(kData, /*packet_options=*/{}));
EXPECT_EQ(webrtc::DSCP_CS1, network_interface.options().dscp);
channel->SetInterface(nullptr);
diff --git a/modules/rtp_rtcp/source/nack_rtx_unittest.cc b/modules/rtp_rtcp/source/nack_rtx_unittest.cc
index 28b75a7..ea0a21a 100644
--- a/modules/rtp_rtcp/source/nack_rtx_unittest.cc
+++ b/modules/rtp_rtcp/source/nack_rtx_unittest.cc
@@ -115,7 +115,8 @@
return true;
}
- bool SendRtcp(ArrayView<const uint8_t> data) override {
+ bool SendRtcp(ArrayView<const uint8_t> data,
+ const PacketOptions& /* options */) override {
module_->IncomingRtcpPacket(data);
return true;
}
diff --git a/modules/rtp_rtcp/source/rtcp_sender.cc b/modules/rtp_rtcp/source/rtcp_sender.cc
index c08fd08..e1cbe26 100644
--- a/modules/rtp_rtcp/source/rtcp_sender.cc
+++ b/modules/rtp_rtcp/source/rtcp_sender.cc
@@ -22,6 +22,7 @@
#include "absl/strings/string_view.h"
#include "api/array_view.h"
+#include "api/call/transport.h"
#include "api/environment/environment.h"
#include "api/rtc_event_log/rtc_event_log.h"
#include "api/rtp_headers.h"
@@ -238,7 +239,7 @@
bool buffering_allowed) {
int32_t error_code = -1;
auto callback = [&](ArrayView<const uint8_t> packet) {
- transport_->SendRtcp(packet);
+ transport_->SendRtcp(packet, /*packet_options=*/{});
error_code = 0;
env_.event_log().Log(std::make_unique<RtcEventRtcpPacketOutgoing>(packet));
};
@@ -596,7 +597,7 @@
const uint16_t* nack_list) {
int32_t error_code = -1;
auto callback = [&](ArrayView<const uint8_t> packet) {
- if (transport_->SendRtcp(packet)) {
+ if (transport_->SendRtcp(packet, /*packet_options=*/{})) {
error_code = 0;
env_.event_log().Log(
std::make_unique<RtcEventRtcpPacketOutgoing>(packet));
@@ -894,7 +895,7 @@
}
RTC_DCHECK_LE(max_packet_size, IP_PACKET_SIZE);
auto callback = [&](ArrayView<const uint8_t> packet) {
- if (transport_->SendRtcp(packet)) {
+ if (transport_->SendRtcp(packet, /*packet_options=*/{})) {
env_.event_log().Log(
std::make_unique<RtcEventRtcpPacketOutgoing>(packet));
}
diff --git a/modules/rtp_rtcp/source/rtcp_sender_unittest.cc b/modules/rtp_rtcp/source/rtcp_sender_unittest.cc
index ffba6d7..e93b38e 100644
--- a/modules/rtp_rtcp/source/rtcp_sender_unittest.cc
+++ b/modules/rtp_rtcp/source/rtcp_sender_unittest.cc
@@ -81,7 +81,9 @@
const PacketOptions& /* options */) override {
return false;
}
- bool SendRtcp(ArrayView<const uint8_t> data) override {
+ bool SendRtcp(ArrayView<const uint8_t> data,
+ const PacketOptions& options) override {
+ EXPECT_FALSE(options.is_media);
parser_.Parse(data);
return true;
}
@@ -680,8 +682,8 @@
// of a RTCP compound packet.
TEST_F(RtcpSenderTest, ByeMustBeLast) {
MockTransport mock_transport;
- EXPECT_CALL(mock_transport, SendRtcp(_))
- .WillOnce(Invoke([](ArrayView<const uint8_t> data) {
+ EXPECT_CALL(mock_transport, SendRtcp(_, _))
+ .WillOnce(Invoke([](ArrayView<const uint8_t> data, ::testing::Unused) {
const uint8_t* next_packet = data.data();
const uint8_t* const packet_end = data.data() + data.size();
rtcp::CommonHeader packet;
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc
index 40bfcd3..8fa6580 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc
@@ -131,7 +131,8 @@
++rtp_packets_sent_;
return true;
}
- bool SendRtcp(ArrayView<const uint8_t> data) override {
+ bool SendRtcp(ArrayView<const uint8_t> data,
+ const PacketOptions& /* options */) override {
test::RtcpPacketParser parser;
parser.Parse(data);
last_nack_list_ = parser.nack()->packet_ids();
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc
index 0fae24d..153bc6c 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc
@@ -103,7 +103,8 @@
last_rtp_sequence_number_ = packet.SequenceNumber();
return true;
}
- bool SendRtcp(ArrayView<const uint8_t> data) override {
+ bool SendRtcp(ArrayView<const uint8_t> data,
+ const PacketOptions& /* options */) override {
test::RtcpPacketParser parser;
parser.Parse(data);
last_nack_list_ = parser.nack()->packet_ids();
diff --git a/modules/rtp_rtcp/source/rtp_sender_audio_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_audio_unittest.cc
index 6ce33ae..83e5a1f 100644
--- a/modules/rtp_rtcp/source/rtp_sender_audio_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_sender_audio_unittest.cc
@@ -59,7 +59,10 @@
EXPECT_TRUE(sent_packets_.back().Parse(data));
return true;
}
- bool SendRtcp(ArrayView<const uint8_t> /* data */) override { return false; }
+ bool SendRtcp(ArrayView<const uint8_t> /* data */,
+ const PacketOptions& /* options */) override {
+ return false;
+ }
const RtpPacketReceived& last_sent_packet() { return sent_packets_.back(); }
int packets_sent() { return sent_packets_.size(); }
diff --git a/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc
index 833a93b..e86296f 100644
--- a/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc
@@ -115,7 +115,10 @@
return true;
}
- bool SendRtcp(ArrayView<const uint8_t>) override { RTC_CHECK_NOTREACHED(); }
+ bool SendRtcp(ArrayView<const uint8_t> /* packet */,
+ const PacketOptions& /* options */) override {
+ RTC_CHECK_NOTREACHED();
+ }
std::optional<TransmittedPacket> last_packet() { return last_packet_; }
diff --git a/modules/rtp_rtcp/source/rtp_sender_video_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_video_unittest.cc
index b5045ae..a67ebfd 100644
--- a/modules/rtp_rtcp/source/rtp_sender_video_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_sender_video_unittest.cc
@@ -147,7 +147,10 @@
EXPECT_TRUE(sent_packets_.back().Parse(data));
return true;
}
- bool SendRtcp(ArrayView<const uint8_t> /* data */) override { return false; }
+ bool SendRtcp(ArrayView<const uint8_t> /* data */,
+ const PacketOptions& /* options */) override {
+ return false;
+ }
const RtpPacketReceived& last_sent_packet() { return sent_packets_.back(); }
int packets_sent() { return sent_packets_.size(); }
const std::vector<RtpPacketReceived>& sent_packets() const {
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index bac6167..052ffd9 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -183,12 +183,16 @@
"..//api/video_codecs:video_encoder_factory_template_libvpx_vp9_adapter",
"..//api/video_codecs:video_encoder_factory_template_open_h264_adapter",
"..//test/network:simulated_network",
+ "../api:array_view",
"../api:create_frame_generator",
+ "../api:make_ref_counted",
+ "../api:rtp_headers",
"../api:rtp_parameters",
"../api:transport_api",
"../api/environment",
"../api/environment:environment_factory",
"../api/video:builtin_video_bitrate_allocator_factory",
+ "../api/video:video_bitrate_allocator_factory",
"../api/video_codecs:video_codecs_api",
"../call",
"../call:call_interfaces",
@@ -199,9 +203,11 @@
"../call:video_send_stream_api",
"../media:media_constants",
"../media:rtc_audio_video",
+ "../rtc_base:logging",
"../rtc_base:rtc_json",
"../rtc_base:threading",
"../rtc_base/system:file_wrapper",
+ "../system_wrappers",
"../test:fileutils",
"../test:frame_generator_capturer",
"../test:rtp_test_utils",
diff --git a/rtc_tools/rtp_generator/rtp_generator.cc b/rtc_tools/rtp_generator/rtp_generator.cc
index cb4a14c..51228a4 100644
--- a/rtc_tools/rtp_generator/rtp_generator.cc
+++ b/rtc_tools/rtp_generator/rtp_generator.cc
@@ -11,27 +11,47 @@
#include "rtc_tools/rtp_generator/rtp_generator.h"
#include <algorithm>
+#include <cstddef>
+#include <cstdint>
+#include <cstring>
#include <memory>
+#include <optional>
+#include <string>
#include <utility>
+#include <vector>
+#include "api/array_view.h"
+#include "api/call/transport.h"
#include "api/environment/environment_factory.h"
+#include "api/make_ref_counted.h"
+#include "api/media_types.h"
+#include "api/rtp_headers.h"
+#include "api/rtp_parameters.h"
#include "api/test/create_frame_generator.h"
+#include "api/video/builtin_video_bitrate_allocator_factory.h"
+#include "api/video_codecs/video_codec.h"
#include "api/video_codecs/video_decoder_factory_template.h"
#include "api/video_codecs/video_decoder_factory_template_dav1d_adapter.h"
#include "api/video_codecs/video_decoder_factory_template_libvpx_vp8_adapter.h"
#include "api/video_codecs/video_decoder_factory_template_libvpx_vp9_adapter.h"
#include "api/video_codecs/video_encoder.h"
-#include "api/video_codecs/video_encoder_factory.h"
#include "api/video_codecs/video_encoder_factory_template.h"
#include "api/video_codecs/video_encoder_factory_template_libaom_av1_adapter.h"
#include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h"
#include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
+#include "call/call.h"
+#include "call/call_config.h"
+#include "call/video_send_stream.h"
#include "media/base/media_constants.h"
+#include "rtc_base/logging.h"
#include "rtc_base/strings/json.h"
#include "rtc_base/system/file_wrapper.h"
#include "rtc_base/thread.h"
+#include "system_wrappers/include/clock.h"
+#include "test/frame_generator_capturer.h"
+#include "test/rtp_file_reader.h"
+#include "test/rtp_file_writer.h"
#include "test/testsupport/file_utils.h"
-#include "video/config/encoder_stream_factory.h"
#include "video/config/video_encoder_config.h"
namespace webrtc {
@@ -281,13 +301,14 @@
}
bool RtpGenerator::SendRtp(ArrayView<const uint8_t> packet,
- const webrtc::PacketOptions& options) {
+ const PacketOptions& /* options */) {
test::RtpPacket rtp_packet = DataToRtpPacket(packet.data(), packet.size());
rtp_dump_writer_->WritePacket(&rtp_packet);
return true;
}
-bool RtpGenerator::SendRtcp(ArrayView<const uint8_t> packet) {
+bool RtpGenerator::SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& /* options */) {
test::RtpPacket rtcp_packet = DataToRtpPacket(packet.data(), packet.size());
rtp_dump_writer_->WritePacket(&rtcp_packet);
return true;
diff --git a/rtc_tools/rtp_generator/rtp_generator.h b/rtc_tools/rtp_generator/rtp_generator.h
index bb5f141..cd7ad29 100644
--- a/rtc_tools/rtp_generator/rtp_generator.h
+++ b/rtc_tools/rtp_generator/rtp_generator.h
@@ -11,14 +11,17 @@
#ifndef RTC_TOOLS_RTP_GENERATOR_RTP_GENERATOR_H_
#define RTC_TOOLS_RTP_GENERATOR_RTP_GENERATOR_H_
+#include <cstddef>
+#include <cstdint>
#include <memory>
+#include <optional>
#include <string>
#include <vector>
+#include "api/array_view.h"
#include "api/call/transport.h"
#include "api/environment/environment.h"
-#include "api/media_types.h"
-#include "api/video/builtin_video_bitrate_allocator_factory.h"
+#include "api/video/video_bitrate_allocator_factory.h"
#include "api/video_codecs/video_decoder_factory.h"
#include "api/video_codecs/video_encoder_factory.h"
#include "call/call.h"
@@ -28,7 +31,6 @@
#include "test/frame_generator_capturer.h"
#include "test/rtp_file_reader.h"
#include "test/rtp_file_writer.h"
-#include "video/config/video_encoder_config.h"
namespace webrtc {
@@ -92,9 +94,10 @@
// Captured RTP packets are written to the RTPDump file instead of over the
// network.
bool SendRtp(ArrayView<const uint8_t> packet,
- const webrtc::PacketOptions& options) override;
+ const PacketOptions& options) override;
// RTCP packets are ignored for now.
- bool SendRtcp(ArrayView<const uint8_t> packet) override;
+ bool SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) override;
// Returns the maximum duration
int GetMaxDuration() const;
// Waits until all video streams have finished.
diff --git a/test/BUILD.gn b/test/BUILD.gn
index a17bbcd..292a4c6 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -1031,7 +1031,10 @@
"null_transport.cc",
"null_transport.h",
]
- deps = [ "../api:transport_api" ]
+ deps = [
+ "../api:array_view",
+ "../api:transport_api",
+ ]
}
rtc_library("encoder_settings") {
@@ -1086,6 +1089,7 @@
]
deps = [
":test_support",
+ "../api:array_view",
"../api:transport_api",
]
}
diff --git a/test/direct_transport.cc b/test/direct_transport.cc
index fe68dd7..7d96b81 100644
--- a/test/direct_transport.cc
+++ b/test/direct_transport.cc
@@ -120,7 +120,8 @@
return true;
}
-bool DirectTransport::SendRtcp(ArrayView<const uint8_t> data) {
+bool DirectTransport::SendRtcp(ArrayView<const uint8_t> data,
+ const PacketOptions& /* options */) {
fake_network_->DeliverRtcpPacket(CopyOnWriteBuffer(data));
MutexLock lock(&process_lock_);
if (!next_process_task_.Running())
diff --git a/test/direct_transport.h b/test/direct_transport.h
index 4cf3f26..3b79957 100644
--- a/test/direct_transport.h
+++ b/test/direct_transport.h
@@ -10,14 +10,19 @@
#ifndef TEST_DIRECT_TRANSPORT_H_
#define TEST_DIRECT_TRANSPORT_H_
+#include <cstddef>
+#include <cstdint>
+#include <map>
#include <memory>
+#include "api/array_view.h"
#include "api/call/transport.h"
-#include "api/sequence_checker.h"
+#include "api/media_types.h"
+#include "api/rtp_parameters.h"
#include "api/task_queue/task_queue_base.h"
-#include "api/test/simulated_network.h"
#include "call/call.h"
#include "call/simulated_packet_receiver.h"
+#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
#include "rtc_base/synchronization/mutex.h"
#include "rtc_base/task_utils/repeating_task.h"
#include "rtc_base/thread_annotations.h"
@@ -63,7 +68,8 @@
bool SendRtp(ArrayView<const uint8_t> data,
const PacketOptions& options) override;
- bool SendRtcp(ArrayView<const uint8_t> data) override;
+ bool SendRtcp(ArrayView<const uint8_t> data,
+ const PacketOptions& options) override;
int GetAverageDelayMs();
diff --git a/test/mock_transport.h b/test/mock_transport.h
index 87b60b3..9cd6113 100644
--- a/test/mock_transport.h
+++ b/test/mock_transport.h
@@ -11,6 +11,9 @@
#ifndef TEST_MOCK_TRANSPORT_H_
#define TEST_MOCK_TRANSPORT_H_
+#include <cstdint>
+
+#include "api/array_view.h"
#include "api/call/transport.h"
#include "test/gmock.h"
@@ -25,7 +28,10 @@
SendRtp,
(webrtc::ArrayView<const uint8_t>, const PacketOptions&),
(override));
- MOCK_METHOD(bool, SendRtcp, (webrtc::ArrayView<const uint8_t>), (override));
+ MOCK_METHOD(bool,
+ SendRtcp,
+ (webrtc::ArrayView<const uint8_t>, const PacketOptions&),
+ (override));
};
} // namespace webrtc
diff --git a/test/null_transport.cc b/test/null_transport.cc
index 884f294..ae6e19b 100644
--- a/test/null_transport.cc
+++ b/test/null_transport.cc
@@ -9,6 +9,11 @@
*/
#include "test/null_transport.h"
+#include <cstdint>
+
+#include "api/array_view.h"
+#include "api/call/transport.h"
+
namespace webrtc {
namespace test {
@@ -17,7 +22,8 @@
return true;
}
-bool NullTransport::SendRtcp(ArrayView<const uint8_t> packet) {
+bool NullTransport::SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) {
return true;
}
diff --git a/test/null_transport.h b/test/null_transport.h
index 1649622..a65c6d7 100644
--- a/test/null_transport.h
+++ b/test/null_transport.h
@@ -10,6 +10,9 @@
#ifndef TEST_NULL_TRANSPORT_H_
#define TEST_NULL_TRANSPORT_H_
+#include <cstdint>
+
+#include "api/array_view.h"
#include "api/call/transport.h"
namespace webrtc {
@@ -21,7 +24,8 @@
public:
bool SendRtp(ArrayView<const uint8_t> packet,
const PacketOptions& options) override;
- bool SendRtcp(ArrayView<const uint8_t> packet) override;
+ bool SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) override;
};
} // namespace test
} // namespace webrtc
diff --git a/test/rtp_rtcp_observer.h b/test/rtp_rtcp_observer.h
index d4b8ec4..f392674 100644
--- a/test/rtp_rtcp_observer.h
+++ b/test/rtp_rtcp_observer.h
@@ -10,20 +10,23 @@
#ifndef TEST_RTP_RTCP_OBSERVER_H_
#define TEST_RTP_RTCP_OBSERVER_H_
+#include <cstdint>
#include <map>
#include <memory>
#include <utility>
-#include <vector>
#include "absl/flags/flag.h"
#include "api/array_view.h"
-#include "api/test/simulated_network.h"
+#include "api/call/transport.h"
+#include "api/media_types.h"
+#include "api/rtp_parameters.h"
+#include "api/task_queue/task_queue_base.h"
#include "api/units/time_delta.h"
+#include "call/call.h"
#include "call/simulated_packet_receiver.h"
-#include "call/video_send_stream.h"
#include "modules/rtp_rtcp/source/rtp_util.h"
+#include "rtc_base/checks.h"
#include "rtc_base/event.h"
-#include "system_wrappers/include/field_trial.h"
#include "test/direct_transport.h"
#include "test/gtest.h"
#include "test/test_flags.h"
@@ -116,10 +119,12 @@
case RtpRtcpObserver::SEND_PACKET:
return test::DirectTransport::SendRtp(packet, options);
}
- return true; // Will never happen, makes compiler happy.
+ RTC_DCHECK_NOTREACHED();
+ return true;
}
- bool SendRtcp(ArrayView<const uint8_t> packet) override {
+ bool SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) override {
EXPECT_TRUE(IsRtcpPacket(packet));
RtpRtcpObserver::Action action = RtpRtcpObserver::SEND_PACKET;
if (observer_) {
@@ -134,9 +139,10 @@
// Drop packet silently.
return true;
case RtpRtcpObserver::SEND_PACKET:
- return test::DirectTransport::SendRtcp(packet);
+ return test::DirectTransport::SendRtcp(packet, options);
}
- return true; // Will never happen, makes compiler happy.
+ RTC_DCHECK_NOTREACHED();
+ return true;
}
RtpRtcpObserver* const observer_;
diff --git a/test/scenario/network_node.cc b/test/scenario/network_node.cc
index e64cf62..364f2e6 100644
--- a/test/scenario/network_node.cc
+++ b/test/scenario/network_node.cc
@@ -122,7 +122,8 @@
return true;
}
-bool NetworkNodeTransport::SendRtcp(ArrayView<const uint8_t> packet) {
+bool NetworkNodeTransport::SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) {
CopyOnWriteBuffer buffer(packet);
MutexLock lock(&mutex_);
if (!endpoint_)
diff --git a/test/scenario/network_node.h b/test/scenario/network_node.h
index e2f6f59..e0086fa 100644
--- a/test/scenario/network_node.h
+++ b/test/scenario/network_node.h
@@ -62,7 +62,8 @@
bool SendRtp(ArrayView<const uint8_t> packet,
const PacketOptions& options) override;
- bool SendRtcp(ArrayView<const uint8_t> packet) override;
+ bool SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) override;
void Connect(EmulatedEndpoint* endpoint,
const SocketAddress& receiver_address,
diff --git a/video/BUILD.gn b/video/BUILD.gn
index 3e7af5a..68bc3cf 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -555,6 +555,7 @@
"../api/test/metrics:global_metrics_logger_and_exporter",
"../api/test/metrics:metric",
"../api/units:time_delta",
+ "../api/units:timestamp",
"../api/video:builtin_video_bitrate_allocator_factory",
"../api/video:encoded_image",
"../api/video:video_bitrate_allocation",
@@ -887,6 +888,7 @@
"../api:sequence_checker",
"../api:simulated_network_api",
"../api:time_controller",
+ "../api:transport_api",
"../api:video_track_source_constraints",
"../api/adaptation:resource_adaptation_api",
"../api/crypto:options",
@@ -974,6 +976,7 @@
"../modules/video_coding/svc:scalability_structures",
"../modules/video_coding/svc:scalable_video_controller",
"../modules/video_coding/timing:timing_module",
+ "../rtc_base:buffer",
"../rtc_base:byte_buffer",
"../rtc_base:checks",
"../rtc_base:copy_on_write_buffer",
@@ -999,6 +1002,7 @@
"../rtc_base/experiments:rate_control_settings",
"../rtc_base/synchronization:mutex",
"../system_wrappers",
+ "../system_wrappers:field_trial",
"../system_wrappers:metrics",
"../test:direct_transport",
"../test:encoder_settings",
diff --git a/video/end_to_end_tests/bandwidth_tests.cc b/video/end_to_end_tests/bandwidth_tests.cc
index 82643ef..d327a76 100644
--- a/video/end_to_end_tests/bandwidth_tests.cc
+++ b/video/end_to_end_tests/bandwidth_tests.cc
@@ -8,30 +8,45 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include <cstdint>
#include <memory>
+#include <string>
+#include <vector>
+#include "api/array_view.h"
#include "api/environment/environment.h"
#include "api/environment/environment_factory.h"
+#include "api/rtp_headers.h"
+#include "api/rtp_parameters.h"
#include "api/task_queue/task_queue_base.h"
#include "api/test/simulated_network.h"
+#include "api/transport/bitrate_settings.h"
#include "api/units/time_delta.h"
#include "api/video/builtin_video_bitrate_allocator_factory.h"
#include "api/video/video_bitrate_allocation.h"
-#include "call/fake_network_pipe.h"
+#include "api/video/video_bitrate_allocator_factory.h"
+#include "call/call.h"
+#include "call/video_receive_stream.h"
+#include "call/video_send_stream.h"
+#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "modules/rtp_rtcp/source/rtp_rtcp_impl2.h"
+#include "modules/rtp_rtcp/source/rtp_rtcp_interface.h"
+#include "rtc_base/checks.h"
#include "rtc_base/rate_limiter.h"
#include "rtc_base/synchronization/mutex.h"
#include "rtc_base/task_queue_for_test.h"
+#include "rtc_base/thread_annotations.h"
+#include "system_wrappers/include/field_trial.h"
#include "system_wrappers/include/sleep.h"
#include "test/call_test.h"
#include "test/fake_encoder.h"
#include "test/field_trial.h"
#include "test/gtest.h"
-#include "test/network/simulated_network.h"
#include "test/rtcp_packet_parser.h"
#include "test/rtp_rtcp_observer.h"
#include "test/video_encoder_proxy_factory.h"
#include "test/video_test_constants.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace {
diff --git a/video/end_to_end_tests/network_state_tests.cc b/video/end_to_end_tests/network_state_tests.cc
index 4def709..1f9b336 100644
--- a/video/end_to_end_tests/network_state_tests.cc
+++ b/video/end_to_end_tests/network_state_tests.cc
@@ -8,24 +8,40 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include <cstdint>
#include <memory>
+#include <vector>
+#include "api/array_view.h"
+#include "api/call/transport.h"
+#include "api/environment/environment.h"
#include "api/media_types.h"
-#include "api/task_queue/default_task_queue_factory.h"
+#include "api/rtp_headers.h"
#include "api/task_queue/task_queue_base.h"
#include "api/task_queue/task_queue_factory.h"
#include "api/test/simulated_network.h"
+#include "api/units/time_delta.h"
+#include "api/video/video_frame.h"
+#include "api/video/video_frame_type.h"
+#include "api/video_codecs/video_codec.h"
#include "api/video_codecs/video_encoder.h"
+#include "call/call.h"
#include "call/fake_network_pipe.h"
+#include "call/video_receive_stream.h"
+#include "call/video_send_stream.h"
#include "modules/rtp_rtcp/source/rtp_packet.h"
+#include "rtc_base/event.h"
#include "rtc_base/synchronization/mutex.h"
#include "rtc_base/task_queue_for_test.h"
+#include "rtc_base/thread_annotations.h"
#include "system_wrappers/include/sleep.h"
#include "test/call_test.h"
#include "test/fake_encoder.h"
#include "test/gtest.h"
-#include "test/network/simulated_network.h"
+#include "test/rtp_rtcp_observer.h"
#include "test/video_encoder_proxy_factory.h"
+#include "test/video_test_constants.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace {
@@ -42,7 +58,8 @@
return false;
}
- bool SendRtcp(ArrayView<const uint8_t> packet) override {
+ bool SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& /* options */) override {
ADD_FAILURE() << "Unexpected RTCP sent.";
return false;
}
@@ -68,7 +85,8 @@
return true;
}
- bool SendRtcp(ArrayView<const uint8_t> packet) override {
+ bool SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& /* options */) override {
MutexLock lock(&mutex_);
need_rtcp_ = false;
return true;
diff --git a/video/end_to_end_tests/retransmission_tests.cc b/video/end_to_end_tests/retransmission_tests.cc
index 7c50a7c..836a4a4 100644
--- a/video/end_to_end_tests/retransmission_tests.cc
+++ b/video/end_to_end_tests/retransmission_tests.cc
@@ -8,25 +8,45 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#include <memory>
+#include <cstddef>
+#include <cstdint>
+#include <optional>
+#include <set>
+#include <string>
+#include <vector>
-#include "absl/algorithm/container.h"
+#include "api/array_view.h"
+#include "api/call/transport.h"
+#include "api/environment/environment.h"
+#include "api/rtp_parameters.h"
#include "api/task_queue/task_queue_base.h"
-#include "api/test/simulated_network.h"
#include "api/test/video/function_video_encoder_factory.h"
#include "api/units/time_delta.h"
+#include "api/video/video_codec_type.h"
+#include "api/video/video_frame.h"
+#include "api/video/video_rotation.h"
+#include "api/video/video_sink_interface.h"
+#include "api/video_codecs/sdp_video_format.h"
+#include "call/audio_receive_stream.h"
+#include "call/audio_send_stream.h"
#include "call/fake_network_pipe.h"
+#include "call/video_receive_stream.h"
+#include "call/video_send_stream.h"
+#include "modules/rtp_rtcp/source/rtcp_packet/nack.h"
#include "modules/rtp_rtcp/source/rtp_packet.h"
#include "modules/video_coding/codecs/vp8/include/vp8.h"
+#include "rtc_base/buffer.h"
+#include "rtc_base/checks.h"
#include "rtc_base/event.h"
#include "rtc_base/synchronization/mutex.h"
-#include "rtc_base/task_queue_for_test.h"
+#include "rtc_base/thread_annotations.h"
#include "test/call_test.h"
-#include "test/field_trial.h"
+#include "test/frame_generator_capturer.h"
#include "test/gtest.h"
-#include "test/network/simulated_network.h"
#include "test/rtcp_packet_parser.h"
+#include "test/rtp_rtcp_observer.h"
#include "test/video_test_constants.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace {
@@ -166,7 +186,8 @@
nack.SetPacketIds(nack_list, 1);
Buffer buffer = nack.Build();
- EXPECT_TRUE(receive_transport_->SendRtcp(buffer));
+ EXPECT_TRUE(
+ receive_transport_->SendRtcp(buffer, /*packet_options=*/{}));
}
return SEND_PACKET;
diff --git a/video/end_to_end_tests/rtp_rtcp_tests.cc b/video/end_to_end_tests/rtp_rtcp_tests.cc
index e372a94..712d4a8 100644
--- a/video/end_to_end_tests/rtp_rtcp_tests.cc
+++ b/video/end_to_end_tests/rtp_rtcp_tests.cc
@@ -8,21 +8,47 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include <cstddef>
+#include <cstdint>
+#include <cstdlib>
+#include <list>
+#include <map>
#include <memory>
+#include <optional>
+#include <vector>
+#include "api/array_view.h"
+#include "api/call/transport.h"
+#include "api/environment/environment.h"
+#include "api/field_trials_view.h"
+#include "api/make_ref_counted.h"
+#include "api/rtp_headers.h"
#include "api/test/simulated_network.h"
+#include "api/test/video/function_video_encoder_factory.h"
+#include "api/video/video_codec_type.h"
+#include "api/video_codecs/sdp_video_format.h"
#include "call/fake_network_pipe.h"
+#include "call/flexfec_receive_stream.h"
+#include "call/video_receive_stream.h"
+#include "call/video_send_stream.h"
#include "modules/include/module_common_types_public.h"
+#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
+#include "modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h"
#include "modules/rtp_rtcp/source/rtp_packet.h"
#include "modules/video_coding/codecs/vp8/include/vp8.h"
+#include "rtc_base/buffer.h"
+#include "rtc_base/checks.h"
#include "rtc_base/numerics/sequence_number_unwrapper.h"
#include "rtc_base/synchronization/mutex.h"
#include "rtc_base/task_queue_for_test.h"
+#include "rtc_base/thread_annotations.h"
#include "test/call_test.h"
+#include "test/encoder_settings.h"
#include "test/gtest.h"
-#include "test/network/simulated_network.h"
#include "test/rtcp_packet_parser.h"
+#include "test/rtp_rtcp_observer.h"
#include "test/video_test_constants.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace {
@@ -337,7 +363,7 @@
rtcp::RapidResyncRequest force_send_sr_back_request;
Buffer packet = force_send_sr_back_request.Build();
static_cast<webrtc::Transport*>(receive_transport_.get())
- ->SendRtcp(packet);
+ ->SendRtcp(packet, /*packet_options=*/{});
}
CreateFrameGeneratorCapturer(30, 1280, 720);
StartVideoSources();
diff --git a/video/rtp_video_stream_receiver2_unittest.cc b/video/rtp_video_stream_receiver2_unittest.cc
index 068f476..6a8f963 100644
--- a/video/rtp_video_stream_receiver2_unittest.cc
+++ b/video/rtp_video_stream_receiver2_unittest.cc
@@ -207,7 +207,9 @@
/*raw_payload=*/false);
ON_CALL(mock_transport_, SendRtcp)
.WillByDefault(
- Invoke(&rtcp_packet_parser_, &test::RtcpPacketParser::Parse));
+ Invoke([this](ArrayView<const uint8_t> packet, ::testing::Unused) {
+ return rtcp_packet_parser_.Parse(packet);
+ }));
}
RTPVideoHeader GetDefaultH264VideoHeader() {
diff --git a/video/transport_adapter.cc b/video/transport_adapter.cc
index b3116ea..95e430f 100644
--- a/video/transport_adapter.cc
+++ b/video/transport_adapter.cc
@@ -10,6 +10,10 @@
#include "video/transport_adapter.h"
+#include <cstdint>
+
+#include "api/array_view.h"
+#include "api/call/transport.h"
#include "rtc_base/checks.h"
namespace webrtc {
@@ -30,11 +34,12 @@
return transport_->SendRtp(packet, options);
}
-bool TransportAdapter::SendRtcp(ArrayView<const uint8_t> packet) {
+bool TransportAdapter::SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) {
if (!enabled_.load())
return false;
- return transport_->SendRtcp(packet);
+ return transport_->SendRtcp(packet, options);
}
void TransportAdapter::Enable() {
diff --git a/video/transport_adapter.h b/video/transport_adapter.h
index 28c113e..1752851 100644
--- a/video/transport_adapter.h
+++ b/video/transport_adapter.h
@@ -15,6 +15,7 @@
#include <atomic>
+#include "api/array_view.h"
#include "api/call/transport.h"
namespace webrtc {
@@ -27,7 +28,8 @@
bool SendRtp(ArrayView<const uint8_t> packet,
const PacketOptions& options) override;
- bool SendRtcp(ArrayView<const uint8_t> packet) override;
+ bool SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) override;
void Enable();
void Disable();
diff --git a/video/video_analyzer.cc b/video/video_analyzer.cc
index 0cd9bab..94f06ee 100644
--- a/video/video_analyzer.cc
+++ b/video/video_analyzer.cc
@@ -337,8 +337,9 @@
return result;
}
-bool VideoAnalyzer::SendRtcp(ArrayView<const uint8_t> packet) {
- return transport_->SendRtcp(packet);
+bool VideoAnalyzer::SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) {
+ return transport_->SendRtcp(packet, options);
}
void VideoAnalyzer::OnFrame(const VideoFrame& video_frame) {
diff --git a/video/video_analyzer.h b/video/video_analyzer.h
index 6d68a5d..8ccd353 100644
--- a/video/video_analyzer.h
+++ b/video/video_analyzer.h
@@ -10,24 +10,43 @@
#ifndef VIDEO_VIDEO_ANALYZER_H_
#define VIDEO_VIDEO_ANALYZER_H_
+#include <cstddef>
+#include <cstdint>
+#include <cstdio>
#include <deque>
#include <map>
#include <memory>
+#include <optional>
#include <string>
#include <vector>
#include "absl/strings/string_view.h"
+#include "api/array_view.h"
+#include "api/call/transport.h"
+#include "api/media_types.h"
#include "api/numerics/samples_stats_counter.h"
#include "api/task_queue/task_queue_base.h"
#include "api/test/metrics/metric.h"
+#include "api/units/time_delta.h"
+#include "api/units/timestamp.h"
+#include "api/video/video_frame.h"
+#include "api/video/video_sink_interface.h"
#include "api/video/video_source_interface.h"
+#include "call/audio_receive_stream.h"
+#include "call/call.h"
+#include "call/packet_receiver.h"
+#include "call/video_receive_stream.h"
+#include "call/video_send_stream.h"
#include "modules/rtp_rtcp/source/rtp_packet.h"
+#include "modules/rtp_rtcp/source/rtp_packet_received.h"
#include "modules/rtp_rtcp/source/video_rtp_depacketizer.h"
+#include "rtc_base/copy_on_write_buffer.h"
#include "rtc_base/event.h"
-#include "rtc_base/numerics/running_statistics.h"
#include "rtc_base/numerics/sequence_number_unwrapper.h"
#include "rtc_base/platform_thread.h"
#include "rtc_base/synchronization/mutex.h"
+#include "rtc_base/thread_annotations.h"
+#include "system_wrappers/include/clock.h"
#include "test/layer_filtering_transport.h"
#include "test/rtp_file_writer.h"
@@ -79,7 +98,8 @@
bool SendRtp(ArrayView<const uint8_t> packet,
const PacketOptions& options) override;
- bool SendRtcp(ArrayView<const uint8_t> packet) override;
+ bool SendRtcp(ArrayView<const uint8_t> packet,
+ const PacketOptions& options) override;
void OnFrame(const VideoFrame& video_frame) override;
void Wait();
diff --git a/video/video_receive_stream2_unittest.cc b/video/video_receive_stream2_unittest.cc
index 2feb51b..61e1872 100644
--- a/video/video_receive_stream2_unittest.cc
+++ b/video/video_receive_stream2_unittest.cc
@@ -22,6 +22,7 @@
#include <vector>
#include "absl/memory/memory.h"
+#include "api/array_view.h"
#include "api/environment/environment.h"
#include "api/environment/environment_factory.h"
#include "api/metronome/test/fake_metronome.h"
@@ -214,7 +215,9 @@
.WillByDefault(Invoke(&fake_decoder_, &test::FakeDecoder::Release));
ON_CALL(mock_transport_, SendRtcp)
.WillByDefault(
- Invoke(&rtcp_packet_parser_, &test::RtcpPacketParser::Parse));
+ Invoke([this](ArrayView<const uint8_t> packet, ::testing::Unused) {
+ return rtcp_packet_parser_.Parse(packet);
+ }));
}
~VideoReceiveStream2Test() override {