Index: webrtc/call/call.cc |
diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc |
index 41f53feee7c57ed5e42753ad9e2a78075eb8a22c..2440cd79c41c09afd81c445d2ecc18250e99e99f 100644 |
--- a/webrtc/call/call.cc |
+++ b/webrtc/call/call.cc |
@@ -236,10 +236,10 @@ class Call : public webrtc::Call, |
MediaType media_type) |
SHARED_LOCKS_REQUIRED(receive_crit_); |
- rtc::Optional<RtpPacketReceived> ParseRtpPacket(const uint8_t* packet, |
- size_t length, |
- const PacketTime* packet_time) |
- SHARED_LOCKS_REQUIRED(receive_crit_); |
+ rtc::Optional<RtpPacketReceived> ParseRtpPacket( |
+ const uint8_t* packet, |
+ size_t length, |
+ const PacketTime* packet_time) const; |
void UpdateSendHistograms(int64_t first_sent_packet_ms) |
EXCLUSIVE_LOCKS_REQUIRED(&bitrate_crit_); |
@@ -485,7 +485,7 @@ Call::~Call() { |
rtc::Optional<RtpPacketReceived> Call::ParseRtpPacket( |
const uint8_t* packet, |
size_t length, |
- const PacketTime* packet_time) { |
+ const PacketTime* packet_time) const { |
RtpPacketReceived parsed_packet; |
if (!parsed_packet.Parse(packet, length)) |
return rtc::Optional<RtpPacketReceived>(); |
@@ -1299,17 +1299,20 @@ PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type, |
const PacketTime& packet_time) { |
TRACE_EVENT0("webrtc", "Call::DeliverRtp"); |
- RTC_DCHECK(media_type == MediaType::AUDIO || media_type == MediaType::VIDEO); |
- |
- ReadLockScoped read_lock(*receive_crit_); |
// TODO(nisse): We should parse the RTP header only here, and pass |
// on parsed_packet to the receive streams. |
rtc::Optional<RtpPacketReceived> parsed_packet = |
ParseRtpPacket(packet, length, &packet_time); |
+ const bool is_keep_alive_packet = |
pbos-webrtc
2017/07/10 22:36:31
Can you put some reference to keepalive packets to
pbos-webrtc
2017/07/10 22:39:16
Reading the other CL, please check config_.rtp.kee
sprang_webrtc
2017/07/11 08:33:06
This is based on https://tools.ietf.org/html/rfc62
|
+ parsed_packet && parsed_packet->payload_size() == 0; |
+ |
+ RTC_DCHECK(media_type == MediaType::AUDIO || media_type == MediaType::VIDEO || |
+ is_keep_alive_packet); |
if (!parsed_packet) |
return DELIVERY_PACKET_ERROR; |
+ ReadLockScoped read_lock(*receive_crit_); |
auto it = receive_rtp_config_.find(parsed_packet->Ssrc()); |
if (it == receive_rtp_config_.end()) { |
LOG(LS_ERROR) << "receive_rtp_config_ lookup failed for ssrc " |