Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(362)

Unified Diff: webrtc/modules/rtp_rtcp/source/rtp_sender.cc

Issue 2190913002: Fix bug where transport sequence numbers are allocated for packets without the header extension reg… (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Comments addressed. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.h ('k') | webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/rtp_rtcp/source/rtp_sender.cc
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc
index 25016e053f2b43a948f803846fda364423d31dbe..ad19bf08832ed99df778aa32c662535cae023362 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc
@@ -591,9 +591,9 @@ size_t RTPSender::SendPadData(size_t bytes,
size_t padding_bytes_in_packet =
std::min(MaxDataPayloadLength(), kMaxPaddingLength);
size_t bytes_sent = 0;
- bool using_transport_seq = rtp_header_extension_map_.IsRegistered(
- kRtpExtensionTransportSequenceNumber) &&
- transport_sequence_number_allocator_;
+ bool using_transport_seq =
+ IsRtpHeaderExtensionRegistered(kRtpExtensionTransportSequenceNumber) &&
+ transport_sequence_number_allocator_;
for (; bytes > 0; bytes -= padding_bytes_in_packet) {
if (bytes < padding_bytes_in_packet)
bytes = padding_bytes_in_packet;
@@ -647,9 +647,13 @@ size_t RTPSender::SendPadData(size_t bytes,
}
uint8_t padding_packet[IP_PACKET_SIZE];
- size_t header_length =
- CreateRtpHeader(padding_packet, payload_type, ssrc, false, timestamp,
- sequence_number, std::vector<uint32_t>());
+ size_t header_length = 0;
+ {
+ rtc::CritScope lock(&send_critsect_);
+ header_length =
+ CreateRtpHeader(padding_packet, payload_type, ssrc, false, timestamp,
+ sequence_number, std::vector<uint32_t>());
+ }
BuildPaddingPacket(padding_packet, header_length, padding_bytes_in_packet);
size_t length = padding_bytes_in_packet + header_length;
int64_t now_ms = clock_->TimeInMilliseconds();
@@ -666,13 +670,11 @@ size_t RTPSender::SendPadData(size_t bytes,
UpdateAbsoluteSendTime(padding_packet, length, rtp_header, now_ms);
PacketOptions options;
- if (AllocateTransportSequenceNumber(&options.packet_id)) {
- if (UpdateTransportSequenceNumber(options.packet_id, padding_packet,
- length, rtp_header)) {
- if (transport_feedback_observer_)
- transport_feedback_observer_->AddPacket(options.packet_id, length,
- probe_cluster_id);
- }
+ if (UpdateTransportSequenceNumber(padding_packet, length, rtp_header,
+ &options.packet_id)) {
+ if (transport_feedback_observer_)
+ transport_feedback_observer_->AddPacket(options.packet_id, length,
+ probe_cluster_id);
}
if (!SendPacketToNetwork(padding_packet, length, options))
@@ -859,13 +861,11 @@ bool RTPSender::PrepareAndSendPacket(uint8_t* buffer,
UpdateAbsoluteSendTime(buffer_to_send_ptr, length, rtp_header, now_ms);
PacketOptions options;
- if (AllocateTransportSequenceNumber(&options.packet_id)) {
- if (UpdateTransportSequenceNumber(options.packet_id, buffer_to_send_ptr,
- length, rtp_header)) {
- if (transport_feedback_observer_)
- transport_feedback_observer_->AddPacket(options.packet_id, length,
- probe_cluster_id);
- }
+ if (UpdateTransportSequenceNumber(buffer_to_send_ptr, length, rtp_header,
+ &options.packet_id)) {
+ if (transport_feedback_observer_)
+ transport_feedback_observer_->AddPacket(options.packet_id, length,
+ probe_cluster_id);
}
if (!is_retransmit && !send_over_rtx) {
@@ -992,13 +992,11 @@ int32_t RTPSender::SendToNetwork(uint8_t* buffer,
}
PacketOptions options;
- if (AllocateTransportSequenceNumber(&options.packet_id)) {
- if (UpdateTransportSequenceNumber(options.packet_id, buffer, length,
- rtp_header)) {
- if (transport_feedback_observer_)
- transport_feedback_observer_->AddPacket(options.packet_id, length,
- PacketInfo::kNotAProbe);
- }
+ if (UpdateTransportSequenceNumber(buffer, length, rtp_header,
+ &options.packet_id)) {
+ if (transport_feedback_observer_)
+ transport_feedback_observer_->AddPacket(options.packet_id, length,
+ PacketInfo::kNotAProbe);
}
UpdateDelayStatistics(capture_time_ms, now_ms);
UpdateOnSendPacket(options.packet_id, capture_time_ms, rtp_header.ssrc);
@@ -1587,11 +1585,11 @@ void RTPSender::UpdateAbsoluteSendTime(uint8_t* rtp_packet,
ConvertMsTo24Bits(now_ms));
}
-bool RTPSender::UpdateTransportSequenceNumber(
- uint16_t sequence_number,
- uint8_t* rtp_packet,
- size_t rtp_packet_length,
- const RTPHeader& rtp_header) const {
+bool RTPSender::UpdateTransportSequenceNumber(uint8_t* rtp_packet,
+ size_t rtp_packet_length,
+ const RTPHeader& rtp_header,
+ int* sequence_number) const {
+ RTC_DCHECK(sequence_number);
size_t offset;
rtc::CritScope lock(&send_critsect_);
@@ -1609,7 +1607,10 @@ bool RTPSender::UpdateTransportSequenceNumber(
RTC_NOTREACHED();
}
- BuildTransportSequenceNumberExtension(rtp_packet + offset, sequence_number);
+ if (!AllocateTransportSequenceNumber(sequence_number))
+ return false;
+
+ BuildTransportSequenceNumberExtension(rtp_packet + offset, *sequence_number);
return true;
}
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.h ('k') | webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698