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; |
} |