Index: webrtc/modules/rtp_rtcp/source/flexfec_receiver.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/flexfec_receiver.cc b/webrtc/modules/rtp_rtcp/source/flexfec_receiver.cc |
index af8582737a71fcbdea1b443d3ed72dd074bf9018..31b804ad65e6b072129dab6c53e2490d7ae9be90 100644 |
--- a/webrtc/modules/rtp_rtcp/source/flexfec_receiver.cc |
+++ b/webrtc/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() { |
+bool FlexfecReceiver::ProcessReceivedPacket( |
brandtr
2017/09/14 11:49:45
make void?
nisse-webrtc
2017/09/14 12:55:51
Done.
|
+ 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) { |