Index: webrtc/call/call.cc |
diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc |
index e594dcc6cadce83560ac48f325c60c4637a566d2..d178406b2972307b3d77998ebaa303b31c1aef35 100644 |
--- a/webrtc/call/call.cc |
+++ b/webrtc/call/call.cc |
@@ -137,7 +137,7 @@ class Call : public webrtc::Call, |
const PacketTime& packet_time) override; |
// Implements RecoveredPacketReceiver. |
- bool OnRecoveredPacket(const uint8_t* packet, size_t length) override; |
+ void OnRecoveredPacket(const uint8_t* packet, size_t length) override; |
void SetBitrateConfig( |
const webrtc::Call::Config::BitrateConfig& bitrate_config) override; |
@@ -179,7 +179,7 @@ class Call : public webrtc::Call, |
rtc::Optional<RtpPacketReceived> ParseRtpPacket(const uint8_t* packet, |
size_t length, |
- const PacketTime& packet_time) |
+ const PacketTime* packet_time) |
SHARED_LOCKS_REQUIRED(receive_crit_); |
void UpdateSendHistograms(int64_t first_sent_packet_ms) |
@@ -409,7 +409,7 @@ Call::~Call() { |
rtc::Optional<RtpPacketReceived> Call::ParseRtpPacket( |
const uint8_t* packet, |
size_t length, |
- const PacketTime& packet_time) { |
+ const PacketTime* packet_time) { |
RtpPacketReceived parsed_packet; |
if (!parsed_packet.Parse(packet, length)) |
return rtc::Optional<RtpPacketReceived>(); |
@@ -419,8 +419,8 @@ rtc::Optional<RtpPacketReceived> Call::ParseRtpPacket( |
parsed_packet.IdentifyExtensions(it->second.extensions); |
int64_t arrival_time_ms; |
- if (packet_time.timestamp != -1) { |
- arrival_time_ms = (packet_time.timestamp + 500) / 1000; |
+ if (packet_time && packet_time->timestamp != -1) { |
+ arrival_time_ms = (packet_time->timestamp + 500) / 1000; |
} else { |
arrival_time_ms = clock_->TimeInMilliseconds(); |
} |
@@ -1189,7 +1189,7 @@ PacketReceiver::DeliveryStatus Call::DeliverRtp(MediaType media_type, |
// 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); |
+ ParseRtpPacket(packet, length, &packet_time); |
if (!parsed_packet) |
return DELIVERY_PACKET_ERROR; |
@@ -1255,13 +1255,20 @@ PacketReceiver::DeliveryStatus Call::DeliverPacket( |
// TODO(brandtr): Update this member function when we support protecting |
// audio packets with FlexFEC. |
-bool Call::OnRecoveredPacket(const uint8_t* packet, size_t length) { |
- uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(&packet[8]); |
+void Call::OnRecoveredPacket(const uint8_t* packet, size_t length) { |
ReadLockScoped read_lock(*receive_crit_); |
- auto it = video_receive_ssrcs_.find(ssrc); |
+ rtc::Optional<RtpPacketReceived> parsed_packet = |
+ ParseRtpPacket(packet, length, nullptr); |
+ if (!parsed_packet) |
+ return; |
+ |
+ parsed_packet->set_recovered(true); |
+ |
+ auto it = video_receive_ssrcs_.find(parsed_packet->Ssrc()); |
if (it == video_receive_ssrcs_.end()) |
- return false; |
- return it->second->OnRecoveredPacket(packet, length); |
+ return; |
+ |
+ it->second->OnRtpPacket(*parsed_packet); |
} |
void Call::NotifyBweOfReceivedPacket(const RtpPacketReceived& packet, |