Use RtpPacketReceived in media/engine/webrtc_video_engine_unittest.cc

This is done in preparation of https://webrtc-review.googlesource.com/c/src/+/290540

Bug: webrtc:7135, webrtc:14795
Change-Id: Ia9c5a34afc040a101403de52f8d22ec68531070e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/290576
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39029}
This commit is contained in:
Per K 2023-01-05 14:28:22 +01:00 committed by WebRTC LUCI CQ
parent 614da1b1d8
commit 17c4ca8fb3

View File

@ -53,6 +53,7 @@
#include "media/engine/fake_webrtc_video_engine.h"
#include "media/engine/webrtc_voice_engine.h"
#include "modules/rtp_rtcp/source/rtp_packet.h"
#include "modules/rtp_rtcp/source/rtp_packet_received.h"
#include "rtc_base/arraysize.h"
#include "rtc_base/event.h"
#include "rtc_base/experiments/min_video_bitrate_experiment.h"
@ -85,6 +86,7 @@ using ::testing::Values;
using ::webrtc::BitrateConstraints;
using ::webrtc::RtpExtension;
using ::webrtc::RtpPacket;
using ::webrtc::RtpPacketReceived;
namespace {
static const int kDefaultQpMax = 56;
@ -132,8 +134,8 @@ void VerifyCodecHasDefaultFeedbackParams(const cricket::VideoCodec& codec,
cricket::kRtcpFbParamCcm, cricket::kRtcpFbCcmParamFir)));
}
// Return true if any codec in `codecs` is an RTX codec with associated payload
// type `payload_type`.
// Return true if any codec in `codecs` is an RTX codec with associated
// payload type `payload_type`.
bool HasRtxCodec(const std::vector<cricket::VideoCodec>& codecs,
int payload_type) {
for (const cricket::VideoCodec& codec : codecs) {
@ -1453,7 +1455,7 @@ class WebRtcVideoChannelEncodedFrameCallbackTest : public ::testing::Test {
}
void DeliverKeyFrame(uint32_t ssrc) {
RtpPacket packet;
RtpPacketReceived packet;
packet.SetMarker(true);
packet.SetPayloadType(96); // VP8
packet.SetSsrc(ssrc);
@ -1469,8 +1471,7 @@ class WebRtcVideoChannelEncodedFrameCallbackTest : public ::testing::Test {
buf_ptr[8] = height & 255;
buf_ptr[9] = height >> 8;
call_->Receiver()->DeliverPacket(webrtc::MediaType::VIDEO, packet.Buffer(),
/*packet_time_us=*/0);
channel_->OnPacketReceived(packet.Buffer(), /*packet_time_us=*/-1);
}
void DeliverKeyFrameAndWait(uint32_t ssrc) {
@ -1564,6 +1565,7 @@ TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest,
EXPECT_TRUE(channel_->SetSink(kSsrc + 1, &renderer_));
channel_->SetRecordableEncodedFrameCallback(kSsrc, callback.AsStdFunction());
DeliverKeyFrame(kSsrc); // Expected to not cause function to fire.
channel_->SetDefaultSink(&renderer_);
DeliverKeyFrameAndWait(kSsrc + 1);
receive_channel_->RemoveRecvStream(kSsrc + 1);
}
@ -2057,13 +2059,13 @@ TEST_F(WebRtcVideoChannelBaseTest, SetSendSsrcAfterSetCodecs) {
// Test that we can set the default video renderer before and after
// media is received.
TEST_F(WebRtcVideoChannelBaseTest, SetSink) {
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc);
channel_->SetDefaultSink(NULL);
EXPECT_TRUE(SetDefaultCodec());
EXPECT_TRUE(SetSend(true));
EXPECT_EQ(0, renderer_.num_rendered_frames());
channel_->OnPacketReceived(packet.Buffer(), /* packet_time_us */ -1);
channel_->OnPacketReceived(packet.Buffer(), /*packet_time_us=*/-1);
channel_->SetDefaultSink(&renderer_);
SendFrame();
EXPECT_FRAME_WAIT(1, kVideoWidth, kVideoHeight, kTimeout);
@ -2498,9 +2500,8 @@ class WebRtcVideoChannelTest : public WebRtcVideoEngineTest {
// After receciving and processing the packet, enough time is advanced that
// the unsignalled receive stream cooldown is no longer in effect.
void ReceivePacketAndAdvanceTime(rtc::CopyOnWriteBuffer packet,
int64_t packet_time_us) {
receive_channel_->OnPacketReceived(packet, packet_time_us);
void ReceivePacketAndAdvanceTime(const RtpPacketReceived& packet) {
receive_channel_->OnPacketReceived(packet.Buffer(), /*packet_time_us=*/-1);
rtc::Thread::Current()->ProcessMessages(0);
time_controller_.AdvanceTime(
webrtc::TimeDelta::Millis(kUnsignalledReceiveStreamCooldownMs));
@ -6534,9 +6535,9 @@ TEST_F(WebRtcVideoChannelTest, DefaultReceiveStreamReconfiguresToUseRtx) {
const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1);
ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size());
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(ssrcs[0]);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size())
<< "No default receive stream created.";
@ -6701,9 +6702,9 @@ TEST_F(WebRtcVideoChannelTest, RecvUnsignaledSsrcWithSignaledStreamId) {
EXPECT_EQ(0u, fake_call_->GetVideoReceiveStreams().size());
// Create and deliver packet.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kIncomingUnsignalledSsrc);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
// The stream should now be created with the appropriate sync label.
EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
@ -6718,14 +6719,14 @@ TEST_F(WebRtcVideoChannelTest, RecvUnsignaledSsrcWithSignaledStreamId) {
// Until the demuxer criteria has been updated, we ignore in-flight ssrcs of
// the recently removed unsignaled receive stream.
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
EXPECT_EQ(0u, fake_call_->GetVideoReceiveStreams().size());
// After the demuxer criteria has been updated, we should proceed to create
// unsignalled receive streams. This time when a default video receive stream
// is created it won't have a sync_group.
receive_channel_->OnDemuxerCriteriaUpdateComplete();
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
EXPECT_TRUE(
fake_call_->GetVideoReceiveStreams()[0]->GetConfig().sync_group.empty());
@ -6737,9 +6738,9 @@ TEST_F(WebRtcVideoChannelTest,
EXPECT_TRUE(fake_call_->GetVideoReceiveStreams().empty());
// Packet with unsignaled SSRC is received.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kIncomingUnsignalledSsrc);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
// Default receive stream created.
const auto& receivers1 = fake_call_->GetVideoReceiveStreams();
@ -6785,15 +6786,15 @@ TEST_F(WebRtcVideoChannelTest,
// the demuxer is updated.
{
// Receive a packet for kSsrc1.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc1);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
{
// Receive a packet for kSsrc2.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc2);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
// No unsignaled ssrc for kSsrc2 should have been created, but kSsrc1 should
@ -6811,15 +6812,15 @@ TEST_F(WebRtcVideoChannelTest,
// Receive packets for kSsrc1 and kSsrc2 again.
{
// Receive a packet for kSsrc1.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc1);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
{
// Receive a packet for kSsrc2.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc2);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
// An unsignalled ssrc for kSsrc2 should be created and the packet counter
@ -6858,15 +6859,15 @@ TEST_F(WebRtcVideoChannelTest,
// the demuxer is updated.
{
// Receive a packet for kSsrc1.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc1);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
{
// Receive a packet for kSsrc2.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc2);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
// No unsignaled ssrc for kSsrc1 should have been created, but the packet
@ -6883,15 +6884,15 @@ TEST_F(WebRtcVideoChannelTest,
// Receive packets for kSsrc1 and kSsrc2 again.
{
// Receive a packet for kSsrc1.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc1);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
{
// Receive a packet for kSsrc2.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc2);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
// An unsignalled ssrc for kSsrc1 should be created and the packet counter
@ -6926,9 +6927,9 @@ TEST_F(WebRtcVideoChannelTest, MultiplePendingDemuxerCriteriaUpdates) {
// In-flight packets should arrive because the stream was recreated, even
// though demuxer criteria updates are pending...
{
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
EXPECT_EQ(fake_call_->GetDeliveredPacketsForSsrc(kSsrc), 1u);
@ -6939,9 +6940,9 @@ TEST_F(WebRtcVideoChannelTest, MultiplePendingDemuxerCriteriaUpdates) {
// This still should not prevent in-flight packets from arriving because we
// have a receive stream for it.
{
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
EXPECT_EQ(fake_call_->GetDeliveredPacketsForSsrc(kSsrc), 2u);
@ -6953,9 +6954,9 @@ TEST_F(WebRtcVideoChannelTest, MultiplePendingDemuxerCriteriaUpdates) {
// Now the packet should be dropped and not create an unsignalled receive
// stream.
{
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
EXPECT_EQ(fake_call_->GetVideoReceiveStreams().size(), 0u);
EXPECT_EQ(fake_call_->GetDeliveredPacketsForSsrc(kSsrc), 2u);
@ -6967,9 +6968,9 @@ TEST_F(WebRtcVideoChannelTest, MultiplePendingDemuxerCriteriaUpdates) {
// The packets should continue to be dropped because removal happened after
// the most recently completed demuxer update.
{
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
EXPECT_EQ(fake_call_->GetVideoReceiveStreams().size(), 0u);
EXPECT_EQ(fake_call_->GetDeliveredPacketsForSsrc(kSsrc), 2u);
@ -6981,9 +6982,9 @@ TEST_F(WebRtcVideoChannelTest, MultiplePendingDemuxerCriteriaUpdates) {
// If packets still arrive after the demuxer knows about the latest removal we
// should finally create an unsignalled receive stream.
{
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
}
EXPECT_EQ(fake_call_->GetVideoReceiveStreams().size(), 1u);
EXPECT_EQ(fake_call_->GetDeliveredPacketsForSsrc(kSsrc), 3u);
@ -6996,10 +6997,9 @@ TEST_F(WebRtcVideoChannelTest, UnsignalledSsrcHasACooldown) {
// Send packets for kSsrc1, creating an unsignalled receive stream.
{
// Receive a packet for kSsrc1.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc1);
receive_channel_->OnPacketReceived(packet.Buffer(),
/* packet_time_us */ -1);
receive_channel_->OnPacketReceived(packet.Buffer(), /*packet_time_us=*/-1);
}
rtc::Thread::Current()->ProcessMessages(0);
time_controller_.AdvanceTime(
@ -7012,10 +7012,9 @@ TEST_F(WebRtcVideoChannelTest, UnsignalledSsrcHasACooldown) {
{
// Receive a packet for kSsrc2.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc2);
receive_channel_->OnPacketReceived(packet.Buffer(),
/* packet_time_us */ -1);
receive_channel_->OnPacketReceived(packet.Buffer(), /*packet_time_us=*/-1);
}
rtc::Thread::Current()->ProcessMessages(0);
@ -7030,10 +7029,9 @@ TEST_F(WebRtcVideoChannelTest, UnsignalledSsrcHasACooldown) {
time_controller_.AdvanceTime(webrtc::TimeDelta::Millis(1));
{
// Receive a packet for kSsrc2.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kSsrc2);
receive_channel_->OnPacketReceived(packet.Buffer(),
/* packet_time_us */ -1);
receive_channel_->OnPacketReceived(packet.Buffer(), /*packet_time_us=*/-1);
}
rtc::Thread::Current()->ProcessMessages(0);
@ -7074,9 +7072,9 @@ TEST_F(WebRtcVideoChannelTest, BaseMinimumPlayoutDelayMsUnsignaledRecvStream) {
// Spawn an unsignaled stream by sending a packet, it should inherit
// default delay 200.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetSsrc(kIncomingUnsignalledSsrc);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
recv_stream = fake_call_->GetVideoReceiveStream(kIncomingUnsignalledSsrc);
EXPECT_EQ(recv_stream->base_mininum_playout_delay_ms(), 200);
@ -7108,10 +7106,10 @@ void WebRtcVideoChannelTest::TestReceiveUnsignaledSsrcPacket(
EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size());
RtpPacket packet;
RtpPacketReceived packet;
packet.SetPayloadType(payload_type);
packet.SetSsrc(kIncomingUnsignalledSsrc);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
if (expect_created_receive_stream) {
EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size())
@ -7180,19 +7178,19 @@ TEST_F(WebRtcVideoChannelTest,
const uint32_t rtx_ssrc = ssrc + 1;
// Send media packet.
RtpPacket packet;
RtpPacketReceived packet;
packet.SetPayloadType(payload_type);
packet.SetSsrc(ssrc);
ReceivePacketAndAdvanceTime(packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(packet);
EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size())
<< "Should have created a receive stream for payload type: "
<< payload_type;
// Send rtx packet.
RtpPacket rtx_packet;
RtpPacketReceived rtx_packet;
rtx_packet.SetPayloadType(rtx_vp8_payload_type);
rtx_packet.SetSsrc(rtx_ssrc);
ReceivePacketAndAdvanceTime(rtx_packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(rtx_packet);
EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size())
<< "RTX packet should not have added or removed a receive stream";
@ -7226,10 +7224,10 @@ TEST_F(WebRtcVideoChannelTest, ReceiveDifferentUnsignaledSsrc) {
channel_->SetDefaultSink(&renderer);
// Receive VP8 packet on first SSRC.
RtpPacket rtp_packet;
RtpPacketReceived rtp_packet;
rtp_packet.SetPayloadType(GetEngineCodec("VP8").id);
rtp_packet.SetSsrc(kIncomingUnsignalledSsrc + 1);
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(rtp_packet);
// VP8 packet should create default receive stream.
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0];
@ -7248,7 +7246,7 @@ TEST_F(WebRtcVideoChannelTest, ReceiveDifferentUnsignaledSsrc) {
// Receive VP9 packet on second SSRC.
rtp_packet.SetPayloadType(GetEngineCodec("VP9").id);
rtp_packet.SetSsrc(kIncomingUnsignalledSsrc + 2);
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(rtp_packet);
// VP9 packet should replace the default receive SSRC.
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
recv_stream = fake_call_->GetVideoReceiveStreams()[0];
@ -7268,7 +7266,7 @@ TEST_F(WebRtcVideoChannelTest, ReceiveDifferentUnsignaledSsrc) {
// Receive H264 packet on third SSRC.
rtp_packet.SetPayloadType(126);
rtp_packet.SetSsrc(kIncomingUnsignalledSsrc + 3);
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(rtp_packet);
// H264 packet should replace the default receive SSRC.
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
recv_stream = fake_call_->GetVideoReceiveStreams()[0];
@ -7300,10 +7298,10 @@ TEST_F(WebRtcVideoChannelTest,
EXPECT_EQ(0u, fake_call_->GetVideoReceiveStreams().size());
// Receive packet on an unsignaled SSRC.
RtpPacket rtp_packet;
RtpPacketReceived rtp_packet;
rtp_packet.SetPayloadType(GetEngineCodec("VP8").id);
rtp_packet.SetSsrc(kSsrcs3[0]);
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(rtp_packet);
// Default receive stream should be created.
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
FakeVideoReceiveStream* recv_stream0 =
@ -7319,7 +7317,7 @@ TEST_F(WebRtcVideoChannelTest,
// Receive packet on a different unsignaled SSRC.
rtp_packet.SetSsrc(kSsrcs3[1]);
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(rtp_packet);
// New default receive stream should be created, but old stream should remain.
ASSERT_EQ(2u, fake_call_->GetVideoReceiveStreams().size());
EXPECT_EQ(recv_stream0, fake_call_->GetVideoReceiveStreams()[0]);
@ -8952,10 +8950,10 @@ TEST_F(WebRtcVideoChannelTest,
EXPECT_FALSE(rtp_parameters.encodings[0].ssrc);
// Receive VP8 packet.
RtpPacket rtp_packet;
RtpPacketReceived rtp_packet;
rtp_packet.SetPayloadType(GetEngineCodec("VP8").id);
rtp_packet.SetSsrc(kIncomingUnsignalledSsrc);
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(rtp_packet);
// The `ssrc` member should still be unset.
rtp_parameters = channel_->GetDefaultRtpReceiveParameters();
@ -8969,11 +8967,11 @@ TEST_F(WebRtcVideoChannelTest,
TEST_F(WebRtcVideoChannelTest,
AddReceiveStreamAfterReceivingNonPrimaryUnsignaledSsrc) {
// Receive VP8 RTX packet.
RtpPacket rtp_packet;
RtpPacketReceived rtp_packet;
const cricket::VideoCodec vp8 = GetEngineCodec("VP8");
rtp_packet.SetPayloadType(default_apt_rtx_types_[vp8.id]);
rtp_packet.SetSsrc(2);
ReceivePacketAndAdvanceTime(rtp_packet.Buffer(), /* packet_time_us */ -1);
ReceivePacketAndAdvanceTime(rtp_packet);
EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
cricket::StreamParams params = cricket::StreamParams::CreateLegacy(1);