Skip to content

Commit

Permalink
add baseSet and other optimize
Browse files Browse the repository at this point in the history
  • Loading branch information
penguinol committed Jan 31, 2024
1 parent 096e48f commit 2bc46be
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 20 deletions.
4 changes: 3 additions & 1 deletion worker/include/RTC/RTCP/FeedbackRtpTransport.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,8 @@ namespace RTC
~FeedbackRtpTransportPacket();

public:
AddPacketResult AddPacket(uint16_t sequenceNumber, uint64_t timestamp, size_t maxRtcpPacketLen);
void SetBase(uint16_t sequenceNumber, uint64_t timestamp);
AddPacketResult AddPacket(uint16_t sequenceNumber, uint64_t timestamp, size_t maxRtcpPacketLen);
// Just for locally generated packets.
void Finish();
bool IsFull()
Expand Down Expand Up @@ -318,6 +318,8 @@ namespace RTC
void AddPendingChunks();

private:
// Whether baseSequenceNumber has been set
bool baseSet{ false };
uint16_t baseSequenceNumber{ 0u };
// 24 bits signed integer.
int32_t referenceTime{ 0 };
Expand Down
5 changes: 3 additions & 2 deletions worker/include/RTC/TransportCongestionControlServer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,9 @@ namespace RTC
uint8_t unlimitedRembCounter{ 0u };
std::deque<double> packetLossHistory;
double packetLoss{ 0 };
bool receivedTransportWideSeqNumber{ false };
uint16_t transportCcFeedbackStartSeqNum{ 0u };
// Whether received any packet with transport wide sequence number.
bool transportWideSeqNumberReceived{ false };
uint16_t transportCcFeedbackWideSeqNumStart{ 0u };
std::map<uint16_t, uint64_t, RTC::SeqManager<uint16_t>::SeqLowerThan> mapPacketArrivalTimes;
};
} // namespace RTC
Expand Down
18 changes: 10 additions & 8 deletions worker/src/RTC/RTCP/FeedbackRtpTransport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -279,11 +279,21 @@ namespace RTC
return offset;
}

void FeedbackRtpTransportPacket::SetBase(uint16_t sequenceNumber, uint64_t timestamp)
{
this->baseSet = true;
this->baseSequenceNumber = sequenceNumber;
this->referenceTime = static_cast<int32_t>((timestamp & 0x1FFFFFC0) / 64);
this->latestSequenceNumber = sequenceNumber - 1;
this->latestTimestamp = (timestamp >> 6) * 64; // IMPORTANT: Loose precision.
}

FeedbackRtpTransportPacket::AddPacketResult FeedbackRtpTransportPacket::AddPacket(
uint16_t sequenceNumber, uint64_t timestamp, size_t maxRtcpPacketLen)
{
MS_TRACE();

MS_ASSERT(baseSet, "base not set");
MS_ASSERT(!IsFull(), "packet is full");

// If the wide sequence number of the new packet is lower than the latest seen,
Expand Down Expand Up @@ -362,14 +372,6 @@ namespace RTC
return AddPacketResult::SUCCESS;
}

void FeedbackRtpTransportPacket::SetBase(uint16_t sequenceNumber, uint64_t timestamp)
{
this->baseSequenceNumber = sequenceNumber;
this->referenceTime = static_cast<int32_t>((timestamp & 0x1FFFFFC0) / 64);
this->latestSequenceNumber = sequenceNumber - 1;
this->latestTimestamp = (timestamp >> 6) * 64; // IMPORTANT: Loose precision.
}

void FeedbackRtpTransportPacket::Finish()
{
MS_TRACE();
Expand Down
23 changes: 14 additions & 9 deletions worker/src/RTC/TransportCongestionControlServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,14 +135,14 @@ namespace RTC
// tcc feedback, these packets may have been reported as lost previously,
// therefore we need to reset the start sequence num for the next tcc feedback.
if (
!this->receivedTransportWideSeqNumber ||
!this->transportWideSeqNumberReceived ||
RTC::SeqManager<uint16_t>::IsSeqLowerThan(
wideSeqNumber, this->transportCcFeedbackStartSeqNum))
wideSeqNumber, this->transportCcFeedbackWideSeqNumStart))
{
this->transportCcFeedbackStartSeqNum = wideSeqNumber;
this->transportCcFeedbackWideSeqNumStart = wideSeqNumber;
}

this->receivedTransportWideSeqNumber = true;
this->transportWideSeqNumberReceived = true;

MayDropOldPacketArrivalTimes(wideSeqNumber, nowMs);

Expand Down Expand Up @@ -180,12 +180,17 @@ namespace RTC
{
MS_TRACE();

auto it = this->mapPacketArrivalTimes.lower_bound(this->transportCcFeedbackStartSeqNum);
if (!this->transportWideSeqNumberReceived)
{
return;
}

auto it = this->mapPacketArrivalTimes.lower_bound(this->transportCcFeedbackWideSeqNumStart);

if (it != this->mapPacketArrivalTimes.end())
{
// Set base sequence num and reference time.
this->transportCcFeedbackPacket->SetBase(this->transportCcFeedbackStartSeqNum, it->second);
// Set base sequence num and reference time
this->transportCcFeedbackPacket->SetBase(this->transportCcFeedbackWideSeqNumStart, it->second);

for (; it != this->mapPacketArrivalTimes.end(); ++it)
{
Expand Down Expand Up @@ -297,7 +302,7 @@ namespace RTC

// Increment packet count.
this->transportCcFeedbackPacket->SetFeedbackPacketCount(++this->transportCcFeedbackPacketCount);
this->transportCcFeedbackStartSeqNum = latestWideSeqNumber + 1;
this->transportCcFeedbackWideSeqNumStart = latestWideSeqNumber + 1;
}

inline void TransportCongestionControlServer::MayDropOldPacketArrivalTimes(
Expand All @@ -314,7 +319,7 @@ namespace RTC
auto it = this->mapPacketArrivalTimes.begin();

while (it != this->mapPacketArrivalTimes.end() &&
it->first != this->transportCcFeedbackStartSeqNum &&
it->first != this->transportCcFeedbackWideSeqNumStart &&
RTC::SeqManager<uint16_t>::IsSeqLowerThan(it->first, seqNum) &&
it->second <= expiryTimestamp)
{
Expand Down

0 comments on commit 2bc46be

Please sign in to comment.