| 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
|
|
|