Index: webrtc/video/rtp_stream_receiver.cc |
diff --git a/webrtc/video/rtp_stream_receiver.cc b/webrtc/video/rtp_stream_receiver.cc |
index cb1ffc90445ba869c6465ee97386e738eaa76209..264e031b49b83b02654c37f9f995b734ed01234c 100644 |
--- a/webrtc/video/rtp_stream_receiver.cc |
+++ b/webrtc/video/rtp_stream_receiver.cc |
@@ -291,6 +291,9 @@ int32_t RtpStreamReceiver::OnReceivedPayloadData( |
return 0; |
} |
+// TODO(nisse): Try to delete this method. Obstacles: It is used by |
+// ParseAndHandleEncapsulatingHeader, for handling Rtx packets. And |
+// it's part of the RtpData interface which we implement. |
bool RtpStreamReceiver::OnRecoveredPacket(const uint8_t* rtp_packet, |
nisse-webrtc
2017/02/14 10:24:33
Is there any easy way to get rid of this method an
brandtr
2017/02/15 12:20:50
No, RTX, RED, and ULPFEC should not go back to Cal
nisse-webrtc
2017/02/15 13:59:15
This is tricky. Parsing extensions logically belon
|
size_t rtp_packet_length) { |
RTPHeader header; |
@@ -318,6 +321,8 @@ void RtpStreamReceiver::OnIncomingSSRCChanged(const uint32_t ssrc) { |
rtp_rtcp_->SetRemoteSSRC(ssrc); |
} |
+// This method handles both regular Rtp packets and packets recovered |
brandtr
2017/02/15 12:20:50
Nits: "RTP packets". "FlexFEC".
nisse-webrtc
2017/02/15 13:59:15
Done.
|
+// via Flexfec. |
void RtpStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) { |
{ |
rtc::CritScope lock(&receive_cs_); |
@@ -325,29 +330,30 @@ void RtpStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) { |
return; |
} |
} |
+ if (!packet.recovered()) { |
+ int64_t now_ms = clock_->TimeInMilliseconds(); |
- int64_t now_ms = clock_->TimeInMilliseconds(); |
- |
- { |
- // Periodically log the RTP header of incoming packets. |
- rtc::CritScope lock(&receive_cs_); |
- if (now_ms - last_packet_log_ms_ > kPacketLogIntervalMs) { |
- std::stringstream ss; |
- ss << "Packet received on SSRC: " << packet.Ssrc() |
- << " with payload type: " << static_cast<int>(packet.PayloadType()) |
- << ", timestamp: " << packet.Timestamp() |
- << ", sequence number: " << packet.SequenceNumber() |
- << ", arrival time: " << packet.arrival_time_ms(); |
- int32_t time_offset; |
- if (packet.GetExtension<TransmissionOffset>(&time_offset)) { |
- ss << ", toffset: " << time_offset; |
- } |
- uint32_t send_time; |
- if (packet.GetExtension<AbsoluteSendTime>(&send_time)) { |
- ss << ", abs send time: " << send_time; |
+ { |
+ // Periodically log the RTP header of incoming packets. |
+ rtc::CritScope lock(&receive_cs_); |
+ if (now_ms - last_packet_log_ms_ > kPacketLogIntervalMs) { |
+ std::stringstream ss; |
+ ss << "Packet received on SSRC: " << packet.Ssrc() |
+ << " with payload type: " << static_cast<int>(packet.PayloadType()) |
+ << ", timestamp: " << packet.Timestamp() |
+ << ", sequence number: " << packet.SequenceNumber() |
+ << ", arrival time: " << packet.arrival_time_ms(); |
+ int32_t time_offset; |
+ if (packet.GetExtension<TransmissionOffset>(&time_offset)) { |
+ ss << ", toffset: " << time_offset; |
+ } |
+ uint32_t send_time; |
+ if (packet.GetExtension<AbsoluteSendTime>(&send_time)) { |
+ ss << ", abs send time: " << send_time; |
+ } |
+ LOG(LS_INFO) << ss.str(); |
+ last_packet_log_ms_ = now_ms; |
} |
- LOG(LS_INFO) << ss.str(); |
- last_packet_log_ms_ = now_ms; |
} |
} |
@@ -359,13 +365,19 @@ void RtpStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) { |
header.payload_type_frequency = kVideoPayloadTypeFrequency; |
bool in_order = IsPacketInOrder(header); |
- rtp_payload_registry_.SetIncomingPayloadType(header); |
+ if (!packet.recovered()) { |
brandtr
2017/02/15 12:20:50
Could you reorder the lines in this method, so tha
nisse-webrtc
2017/02/15 13:59:15
I'm not sure how order matters. And I'd prefer to
|
+ // TODO(nisse): Why isn't this done for recovered packets? |
+ rtp_payload_registry_.SetIncomingPayloadType(header); |
+ } |
ReceivePacket(packet.data(), packet.size(), header, in_order); |
// Update receive statistics after ReceivePacket. |
// Receive statistics will be reset if the payload type changes (make sure |
// that the first packet is included in the stats). |
- rtp_receive_statistics_->IncomingPacket( |
- header, packet.size(), IsPacketRetransmitted(header, in_order)); |
+ if (!packet.recovered()) { |
+ // TODO(nisse): Should we pass a recovered flag to stats? |
brandtr
2017/02/15 12:20:50
That would be one way of implementing bugs.webrtc.
nisse-webrtc
2017/02/15 13:59:15
I'm adding a TODO and bug reference.
|
+ rtp_receive_statistics_->IncomingPacket( |
+ header, packet.size(), IsPacketRetransmitted(header, in_order)); |
+ } |
} |
int32_t RtpStreamReceiver::RequestKeyFrame() { |