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 d004cd8d4fbe6239d6515a2d328cb777807dc33b..abaa4b87151c3dbb69973358b552d890c7bfe744 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc |
@@ -119,7 +119,8 @@ RTPSender::RTPSender( |
TransportFeedbackObserver* transport_feedback_observer, |
BitrateStatisticsObserver* bitrate_callback, |
FrameCountObserver* frame_count_observer, |
- SendSideDelayObserver* send_side_delay_observer) |
+ SendSideDelayObserver* send_side_delay_observer, |
+ SendPacketObserver* send_packet_observer) |
: clock_(clock), |
// TODO(holmer): Remove this conversion when we remove the use of |
// TickTime. |
@@ -157,6 +158,7 @@ RTPSender::RTPSender( |
rtp_stats_callback_(NULL), |
frame_count_observer_(frame_count_observer), |
send_side_delay_observer_(send_side_delay_observer), |
+ send_packet_observer_(send_packet_observer), |
// RTP variables |
start_timestamp_forced_(false), |
start_timestamp_(0), |
@@ -885,9 +887,7 @@ bool RTPSender::TimeToSendPacket(uint16_t sequence_number, |
// Packet cannot be found. Allow sending to continue. |
return true; |
} |
- if (!retransmission && capture_time_ms > 0) { |
- UpdateDelayStatistics(capture_time_ms, clock_->TimeInMilliseconds()); |
- } |
+ |
int rtx; |
{ |
CriticalSectionScoped lock(send_critsect_.get()); |
@@ -946,6 +946,11 @@ bool RTPSender::PrepareAndSendPacket(uint8_t* buffer, |
transport_feedback_observer_->AddPacket(options.packet_id, length, true); |
} |
+ if (!is_retransmit && !send_over_rtx) { |
+ UpdateDelayStatistics(capture_time_ms, now_ms); |
+ UpdateOnSendPacket(capture_time_ms, &options.packet_id); |
+ } |
+ |
bool ret = SendPacketToNetwork(buffer_to_send_ptr, length, options); |
if (ret) { |
CriticalSectionScoped lock(send_critsect_.get()); |
@@ -1065,12 +1070,12 @@ int32_t RTPSender::SendToNetwork(uint8_t* buffer, |
} |
return 0; |
} |
- if (capture_time_ms > 0) { |
- UpdateDelayStatistics(capture_time_ms, now_ms); |
- } |
+ PacketOptions options; |
+ UpdateDelayStatistics(capture_time_ms, now_ms); |
+ UpdateOnSendPacket(capture_time_ms, &options.packet_id); |
stefan-webrtc
2015/12/10 08:37:49
I don't think we have to add it here since this pa
åsapersson
2015/12/15 14:28:26
OK, removed from this path.
|
size_t length = payload_length + rtp_header_length; |
- bool sent = SendPacketToNetwork(buffer, length, PacketOptions()); |
+ bool sent = SendPacketToNetwork(buffer, length, options); |
// Mark the packet as sent in the history even if send failed. Dropping a |
// packet here should be treated as any other packet drop so we should be |
@@ -1089,7 +1094,7 @@ int32_t RTPSender::SendToNetwork(uint8_t* buffer, |
} |
void RTPSender::UpdateDelayStatistics(int64_t capture_time_ms, int64_t now_ms) { |
- if (!send_side_delay_observer_) |
+ if (!send_side_delay_observer_ || capture_time_ms <= 0) |
return; |
uint32_t ssrc; |
@@ -1121,6 +1126,22 @@ void RTPSender::UpdateDelayStatistics(int64_t capture_time_ms, int64_t now_ms) { |
ssrc); |
} |
+void RTPSender::UpdateOnSendPacket(int64_t capture_time_ms, int* packet_id) { |
+ if (!send_packet_observer_ || !transport_sequence_number_allocator_ || |
+ capture_time_ms <= 0) |
+ return; |
+ |
+ uint32_t ssrc; |
+ { |
+ CriticalSectionScoped lock(send_critsect_.get()); |
+ ssrc = ssrc_; |
stefan-webrtc
2015/12/10 08:37:49
The ssrc is available without locking from the rtp
åsapersson
2015/12/15 14:28:26
Done.
|
+ } |
+ if (*packet_id == -1) |
+ *packet_id = transport_sequence_number_allocator_->AllocateSequenceNumber(); |
stefan-webrtc
2015/12/10 08:37:49
Can we move this out of this method and call it on
åsapersson
2015/12/15 14:28:26
Done.
|
+ |
+ send_packet_observer_->OnSendPacket(*packet_id, capture_time_ms, ssrc); |
stefan-webrtc
2015/12/10 08:37:49
Is it possible to unify this callback with the cal
åsapersson
2015/12/15 14:28:26
I guess it can be done if we do not want to do it
stefan-webrtc
2016/01/18 19:48:25
Why doesn't it work per stream? I don't think I un
|
+} |
+ |
void RTPSender::ProcessBitrate() { |
CriticalSectionScoped cs(send_critsect_.get()); |
total_bitrate_sent_.Process(); |