Skip to content

Commit

Permalink
use make_unique
Browse files Browse the repository at this point in the history
  • Loading branch information
ibc committed Jul 2, 2024
1 parent f19a534 commit 730b9f3
Showing 1 changed file with 36 additions and 60 deletions.
96 changes: 36 additions & 60 deletions worker/test/src/RTC/TestRtpStreamSend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,22 @@
#include "RTC/RtpStream.hpp"
#include "RTC/RtpStreamSend.hpp"
#include <catch2/catch_test_macros.hpp>
#include <memory>
#include <vector>

// #define PERFORMANCE_TEST 1

using namespace RTC;

static RtpPacket* CreateRtpPacket(uint8_t* buffer, size_t len, uint16_t seq, uint32_t timestamp)
static std::unique_ptr<RtpPacket> CreateRtpPacket(
uint8_t* buffer, size_t len, uint16_t seq, uint32_t timestamp)
{
auto* packet = RtpPacket::Parse(buffer, len);

packet->SetSequenceNumber(seq);
packet->SetTimestamp(timestamp);

return packet;
return std::unique_ptr<RtpPacket>(packet);
}

static void SendRtpPacket(std::vector<std::pair<RtpStreamSend*, uint32_t>> streams, RtpPacket* packet)
Expand Down Expand Up @@ -78,20 +80,15 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
SECTION("receive NACK and get retransmitted packets")
{
// packet1 [pt:123, seq:21006, timestamp:1533790901]
std::unique_ptr<RtpPacket> packet1(
CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, 1533790901));
auto packet1(CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, 1533790901));
// packet2 [pt:123, seq:21007, timestamp:1533790901]
std::unique_ptr<RtpPacket> packet2(
CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, 1533790901));
auto packet2(CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, 1533790901));
// packet3 [pt:123, seq:21008, timestamp:1533793871]
std::unique_ptr<RtpPacket> packet3(
CreateRtpPacket(rtpBuffer3, sizeof(rtpBuffer3), 21008, 1533793871));
auto packet3(CreateRtpPacket(rtpBuffer3, sizeof(rtpBuffer3), 21008, 1533793871));
// packet4 [pt:123, seq:21009, timestamp:1533793871]
std::unique_ptr<RtpPacket> packet4(
CreateRtpPacket(rtpBuffer4, sizeof(rtpBuffer4), 21009, 1533793871));
auto packet4(CreateRtpPacket(rtpBuffer4, sizeof(rtpBuffer4), 21009, 1533793871));
// packet5 [pt:123, seq:21010, timestamp:1533796931]
std::unique_ptr<RtpPacket> packet5(
CreateRtpPacket(rtpBuffer5, sizeof(rtpBuffer5), 21010, 1533796931));
auto packet5(CreateRtpPacket(rtpBuffer5, sizeof(rtpBuffer5), 21010, 1533796931));

// Create a RtpStreamSend instance.
TestRtpStreamListener testRtpStreamListener;
Expand All @@ -104,7 +101,7 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
params.mimeType.type = RTC::RtpCodecMimeType::Type::VIDEO;

std::string mid;
std::unique_ptr<RtpStreamSend> stream(new RtpStreamSend(&testRtpStreamListener, params, mid));
auto stream = std::make_unique<RtpStreamSend>(&testRtpStreamListener, params, mid);

// Receive all the packets (some of them not in order and/or duplicated).
SendRtpPacket({ { stream.get(), params.ssrc } }, packet1.get());
Expand Down Expand Up @@ -146,20 +143,15 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
SECTION("receive NACK and get zero retransmitted packets if useNack is not set")
{
// packet1 [pt:123, seq:21006, timestamp:1533790901]
std::unique_ptr<RtpPacket> packet1(
CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, 1533790901));
auto packet1(CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, 1533790901));
// packet2 [pt:123, seq:21007, timestamp:1533790901]
std::unique_ptr<RtpPacket> packet2(
CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, 1533790901));
auto packet2(CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, 1533790901));
// packet3 [pt:123, seq:21008, timestamp:1533793871]
std::unique_ptr<RtpPacket> packet3(
CreateRtpPacket(rtpBuffer3, sizeof(rtpBuffer3), 21008, 1533793871));
auto packet3(CreateRtpPacket(rtpBuffer3, sizeof(rtpBuffer3), 21008, 1533793871));
// packet4 [pt:123, seq:21009, timestamp:1533793871]
std::unique_ptr<RtpPacket> packet4(
CreateRtpPacket(rtpBuffer4, sizeof(rtpBuffer4), 21009, 1533793871));
auto packet4(CreateRtpPacket(rtpBuffer4, sizeof(rtpBuffer4), 21009, 1533793871));
// packet5 [pt:123, seq:21010, timestamp:1533796931]
std::unique_ptr<RtpPacket> packet5(
CreateRtpPacket(rtpBuffer5, sizeof(rtpBuffer5), 21010, 1533796931));
auto packet5(CreateRtpPacket(rtpBuffer5, sizeof(rtpBuffer5), 21010, 1533796931));

// Create a RtpStreamSend instance.
TestRtpStreamListener testRtpStreamListener;
Expand All @@ -172,7 +164,7 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
params.mimeType.type = RTC::RtpCodecMimeType::Type::VIDEO;

std::string mid;
std::unique_ptr<RtpStreamSend> stream(new RtpStreamSend(&testRtpStreamListener, params, mid));
auto stream = std::make_unique<RtpStreamSend>(&testRtpStreamListener, params, mid);

// Receive all the packets (some of them not in order and/or duplicated).
SendRtpPacket({ { stream.get(), params.ssrc } }, packet1.get());
Expand Down Expand Up @@ -202,20 +194,15 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
SECTION("receive NACK and get zero retransmitted packets for audio")
{
// packet1 [pt:123, seq:21006, timestamp:1533790901]
std::unique_ptr<RtpPacket> packet1(
CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, 1533790901));
auto packet1(CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, 1533790901));
// packet2 [pt:123, seq:21007, timestamp:1533790901]
std::unique_ptr<RtpPacket> packet2(
CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, 1533790901));
auto packet2(CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, 1533790901));
// packet3 [pt:123, seq:21008, timestamp:1533793871]
std::unique_ptr<RtpPacket> packet3(
CreateRtpPacket(rtpBuffer3, sizeof(rtpBuffer3), 21008, 1533793871));
auto packet3(CreateRtpPacket(rtpBuffer3, sizeof(rtpBuffer3), 21008, 1533793871));
// packet4 [pt:123, seq:21009, timestamp:1533793871]
std::unique_ptr<RtpPacket> packet4(
CreateRtpPacket(rtpBuffer4, sizeof(rtpBuffer4), 21009, 1533793871));
auto packet4(CreateRtpPacket(rtpBuffer4, sizeof(rtpBuffer4), 21009, 1533793871));
// packet5 [pt:123, seq:21010, timestamp:1533796931]
std::unique_ptr<RtpPacket> packet5(
CreateRtpPacket(rtpBuffer5, sizeof(rtpBuffer5), 21010, 1533796931));
auto packet5(CreateRtpPacket(rtpBuffer5, sizeof(rtpBuffer5), 21010, 1533796931));

// Create a RtpStreamSend instance.
TestRtpStreamListener testRtpStreamListener;
Expand All @@ -228,7 +215,7 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
params.mimeType.type = RTC::RtpCodecMimeType::Type::AUDIO;

std::string mid;
std::unique_ptr<RtpStreamSend> stream(new RtpStreamSend(&testRtpStreamListener, params, mid));
auto stream = std::make_unique<RtpStreamSend>(&testRtpStreamListener, params, mid);

// Receive all the packets (some of them not in order and/or duplicated).
SendRtpPacket({ { stream.get(), params.ssrc } }, packet1.get());
Expand Down Expand Up @@ -258,11 +245,9 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
SECTION("receive NACK in different RtpStreamSend instances and get retransmitted packets")
{
// packet1 [pt:123, seq:21006, timestamp:1533790901]
std::unique_ptr<RtpPacket> packet1(
CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, 1533790901));
auto packet1(CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, 1533790901));
// packet2 [pt:123, seq:21007, timestamp:1533790901]
std::unique_ptr<RtpPacket> packet2(
CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, 1533790901));
auto packet2(CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, 1533790901));

// Create two RtpStreamSend instances.
TestRtpStreamListener testRtpStreamListener1;
Expand Down Expand Up @@ -334,10 +319,8 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
uint32_t diffTs = RtpStreamSend::MaxRetransmissionDelayForVideoMs * clockRate / 1000;
uint32_t secondTs = firstTs + diffTs;

std::unique_ptr<RtpPacket> packet1(
CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, firstTs));
std::unique_ptr<RtpPacket> packet2(
CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, secondTs - 1));
auto packet1(CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, firstTs));
auto packet2(CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, secondTs - 1));

// Create a RtpStreamSend instance.
TestRtpStreamListener testRtpStreamListener;
Expand All @@ -350,7 +333,7 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
params1.mimeType.type = RTC::RtpCodecMimeType::Type::VIDEO;

std::string mid;
std::unique_ptr<RtpStreamSend> stream(new RtpStreamSend(&testRtpStreamListener, params1, mid));
auto stream = std::make_unique<RtpStreamSend>(&testRtpStreamListener, params1, mid);

// Receive all the packets.
SendRtpPacket({ { stream.get(), params1.ssrc } }, packet1.get());
Expand Down Expand Up @@ -389,12 +372,9 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
// Send a third packet so it will clean old packets from the buffer.
uint32_t thirdTs = firstTs + (2 * diffTs);

std::unique_ptr<RtpPacket> packet1(
CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, firstTs));
std::unique_ptr<RtpPacket> packet2(
CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, secondTs));
std::unique_ptr<RtpPacket> packet3(
CreateRtpPacket(rtpBuffer3, sizeof(rtpBuffer3), 21008, thirdTs));
auto packet1(CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 21006, firstTs));
auto packet2(CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 21007, secondTs));
auto packet3(CreateRtpPacket(rtpBuffer3, sizeof(rtpBuffer3), 21008, thirdTs));

// Create a RtpStreamSend instance.
TestRtpStreamListener testRtpStreamListener;
Expand All @@ -407,7 +387,7 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
params1.mimeType.type = RTC::RtpCodecMimeType::Type::VIDEO;

std::string mid;
std::unique_ptr<RtpStreamSend> stream(new RtpStreamSend(&testRtpStreamListener, params1, mid));
auto stream = std::make_unique<RtpStreamSend>(&testRtpStreamListener, params1, mid);

// Receive all the packets.
SendRtpPacket({ { stream.get(), params1.ssrc } }, packet1.get());
Expand Down Expand Up @@ -439,18 +419,14 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
{
// This scenario reproduce the "too bad sequence number" and "bad sequence
// number" scenarios in RtpStream::UpdateSeq().
std::unique_ptr<RtpPacket> packet1(
CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 50001, 1000001));
std::unique_ptr<RtpPacket> packet2(
CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 50002, 1000002));
auto packet1(CreateRtpPacket(rtpBuffer1, sizeof(rtpBuffer1), 50001, 1000001));
auto packet2(CreateRtpPacket(rtpBuffer2, sizeof(rtpBuffer2), 50002, 1000002));
// Third packet has bad sequence number (its seq is more than MaxDropout=3000
// older than current max seq) and will be dropped.
std::unique_ptr<RtpPacket> packet3(
CreateRtpPacket(rtpBuffer3, sizeof(rtpBuffer3), 40003, 1000003));
auto packet3(CreateRtpPacket(rtpBuffer3, sizeof(rtpBuffer3), 40003, 1000003));
// Forth packet has seq=badSeq+1 so will be accepted and will trigger a
// stream reset.
std::unique_ptr<RtpPacket> packet4(
CreateRtpPacket(rtpBuffer4, sizeof(rtpBuffer4), 40004, 1000004));
auto packet4(CreateRtpPacket(rtpBuffer4, sizeof(rtpBuffer4), 40004, 1000004));

// Create a RtpStreamSend instance.
TestRtpStreamListener testRtpStreamListener;
Expand All @@ -463,7 +439,7 @@ SCENARIO("NACK and RTP packets retransmission", "[rtp][rtcp][nack]")
params1.mimeType.type = RTC::RtpCodecMimeType::Type::VIDEO;

std::string mid;
std::unique_ptr<RtpStreamSend> stream(new RtpStreamSend(&testRtpStreamListener, params1, mid));
auto stream = std::make_unique<RtpStreamSend>(&testRtpStreamListener, params1, mid);

SendRtpPacket({ { stream.get(), params1.ssrc } }, packet1.get());
SendRtpPacket({ { stream.get(), params1.ssrc } }, packet2.get());
Expand Down

0 comments on commit 730b9f3

Please sign in to comment.