Index: modules/rtp_rtcp/source/flexfec_receiver.cc |
diff --git a/modules/rtp_rtcp/source/flexfec_receiver.cc b/modules/rtp_rtcp/source/flexfec_receiver.cc |
index 5a625d89a20302b260ebac7feb79d37d9385d82c..ec35a2c06383e4face8059c7f6124a6f1aaa3cc8 100644 |
--- a/modules/rtp_rtcp/source/flexfec_receiver.cc |
+++ b/modules/rtp_rtcp/source/flexfec_receiver.cc |
@@ -48,10 +48,11 @@ FlexfecReceiver::~FlexfecReceiver() = default; |
void FlexfecReceiver::OnRtpPacket(const RtpPacketReceived& packet) { |
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_); |
- if (!AddReceivedPacket(packet)) { |
+ std::unique_ptr<ReceivedPacket> received_packet = AddReceivedPacket(packet); |
+ if (!received_packet) |
return; |
- } |
- ProcessReceivedPackets(); |
+ |
+ ProcessReceivedPacket(*received_packet); |
} |
FecPacketCounter FlexfecReceiver::GetPacketCounter() const { |
@@ -61,7 +62,8 @@ FecPacketCounter FlexfecReceiver::GetPacketCounter() const { |
// TODO(eladalon): Consider using packet.recovered() to avoid processing |
// recovered packets here. |
-bool FlexfecReceiver::AddReceivedPacket(const RtpPacketReceived& packet) { |
+std::unique_ptr<ReceivedPacket> FlexfecReceiver::AddReceivedPacket( |
+ const RtpPacketReceived& packet) { |
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_); |
// RTP packets with a full base header (12 bytes), but without payload, |
@@ -77,7 +79,7 @@ bool FlexfecReceiver::AddReceivedPacket(const RtpPacketReceived& packet) { |
// This is a FlexFEC packet. |
if (packet.payload_size() < kMinFlexfecHeaderSize) { |
LOG(LS_WARNING) << "Truncated FlexFEC packet, discarding."; |
- return false; |
+ return nullptr; |
} |
received_packet->is_fec = true; |
++packet_counter_.num_fec_packets; |
@@ -93,7 +95,7 @@ bool FlexfecReceiver::AddReceivedPacket(const RtpPacketReceived& packet) { |
// This is a media packet, or a FlexFEC packet belonging to some |
// other FlexFEC stream. |
if (received_packet->ssrc != protected_media_ssrc_) { |
- return false; |
+ return nullptr; |
} |
received_packet->is_fec = false; |
@@ -104,10 +106,9 @@ bool FlexfecReceiver::AddReceivedPacket(const RtpPacketReceived& packet) { |
received_packet->pkt->length = packet.size(); |
} |
- received_packets_.push_back(std::move(received_packet)); |
++packet_counter_.num_packets; |
- return true; |
+ return received_packet; |
} |
// Note that the implementation of this member function and the implementation |
@@ -119,16 +120,13 @@ bool FlexfecReceiver::AddReceivedPacket(const RtpPacketReceived& packet) { |
// Here, however, the received media pipeline is more decoupled from the |
// FlexFEC decoder, and we therefore do not interfere with the reception |
// of non-recovered media packets. |
-bool FlexfecReceiver::ProcessReceivedPackets() { |
+void FlexfecReceiver::ProcessReceivedPacket( |
+ const ReceivedPacket& received_packet) { |
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_); |
// Decode. |
- if (!received_packets_.empty()) { |
- if (erasure_code_->DecodeFec(&received_packets_, &recovered_packets_) != |
- 0) { |
- return false; |
- } |
- } |
+ erasure_code_->DecodeFec(received_packet, &recovered_packets_); |
+ |
// Return recovered packets through callback. |
for (const auto& recovered_packet : recovered_packets_) { |
if (recovered_packet->returned) { |
@@ -150,7 +148,6 @@ bool FlexfecReceiver::ProcessReceivedPackets() { |
last_recovered_packet_ms_ = now_ms; |
} |
} |
- return true; |
} |
} // namespace webrtc |