Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(659)

Unified Diff: webrtc/modules/rtp_rtcp/source/flexfec_receiver.cc

Issue 2589393002: Revert of Parse FlexFEC RTP headers in Call and add integration with BWE. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 204ce84d2a56e5d01850f5994cb4c79c25c718d2..369dd31ae103d42a5dd8a9ba4cfa2dca8a3e0f85 100644
--- a/webrtc/modules/rtp_rtcp/source/flexfec_receiver.cc
+++ b/webrtc/modules/rtp_rtcp/source/flexfec_receiver.cc
@@ -10,8 +10,11 @@
#include "webrtc/modules/rtp_rtcp/include/flexfec_receiver.h"
+#include <utility>
+
#include "webrtc/base/logging.h"
#include "webrtc/base/scoped_ref_ptr.h"
+#include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h"
namespace webrtc {
@@ -28,14 +31,13 @@
} // namespace
-FlexfecReceiver::FlexfecReceiver(
- uint32_t ssrc,
- uint32_t protected_media_ssrc,
- RecoveredPacketReceiver* recovered_packet_receiver)
+FlexfecReceiver::FlexfecReceiver(uint32_t ssrc,
+ uint32_t protected_media_ssrc,
+ RecoveredPacketReceiver* callback)
: ssrc_(ssrc),
protected_media_ssrc_(protected_media_ssrc),
erasure_code_(ForwardErrorCorrection::CreateFlexfec()),
- recovered_packet_receiver_(recovered_packet_receiver),
+ callback_(callback),
clock_(Clock::GetRealTimeClock()),
last_recovered_packet_ms_(-1) {
// It's OK to create this object on a different thread/task queue than
@@ -45,9 +47,10 @@
FlexfecReceiver::~FlexfecReceiver() = default;
-bool FlexfecReceiver::AddAndProcessReceivedPacket(RtpPacketReceived packet) {
+bool FlexfecReceiver::AddAndProcessReceivedPacket(const uint8_t* packet,
+ size_t packet_length) {
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
- if (!AddReceivedPacket(std::move(packet))) {
+ if (!AddReceivedPacket(packet, packet_length)) {
return false;
}
return ProcessReceivedPackets();
@@ -58,32 +61,42 @@
return packet_counter_;
}
-bool FlexfecReceiver::AddReceivedPacket(RtpPacketReceived packet) {
+bool FlexfecReceiver::AddReceivedPacket(const uint8_t* packet,
+ size_t packet_length) {
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
// RTP packets with a full base header (12 bytes), but without payload,
// could conceivably be useful in the decoding. Therefore we check
- // with a non-strict inequality here.
- RTC_DCHECK_GE(packet.size(), kRtpHeaderSize);
+ // with a strict inequality here.
+ if (packet_length < kRtpHeaderSize) {
+ LOG(LS_WARNING) << "Truncated packet, discarding.";
+ return false;
+ }
+
+ // TODO(brandtr): Consider how to handle received FlexFEC packets and
+ // the bandwidth estimator.
+ RtpPacketReceived parsed_packet;
+ if (!parsed_packet.Parse(packet, packet_length)) {
+ return false;
+ }
// Demultiplex based on SSRC, and insert into erasure code decoder.
std::unique_ptr<ReceivedPacket> received_packet(new ReceivedPacket());
- received_packet->seq_num = packet.SequenceNumber();
- received_packet->ssrc = packet.Ssrc();
+ received_packet->seq_num = parsed_packet.SequenceNumber();
+ received_packet->ssrc = parsed_packet.Ssrc();
if (received_packet->ssrc == ssrc_) {
- // This is a FlexFEC packet.
- if (packet.payload_size() < kMinFlexfecHeaderSize) {
+ // This is a FEC packet belonging to this FlexFEC stream.
+ if (parsed_packet.payload_size() < kMinFlexfecHeaderSize) {
LOG(LS_WARNING) << "Truncated FlexFEC packet, discarding.";
return false;
}
received_packet->is_fec = true;
++packet_counter_.num_fec_packets;
-
// Insert packet payload into erasure code.
// TODO(brandtr): Remove this memcpy when the FEC packet classes
// are using COW buffers internally.
received_packet->pkt = rtc::scoped_refptr<Packet>(new Packet());
- auto payload = packet.payload();
+ auto payload = parsed_packet.payload();
memcpy(received_packet->pkt->data, payload.data(), payload.size());
received_packet->pkt->length = payload.size();
} else {
@@ -93,14 +106,13 @@
return false;
}
received_packet->is_fec = false;
-
// Insert entire packet into erasure code.
// TODO(brandtr): Remove this memcpy too.
received_packet->pkt = rtc::scoped_refptr<Packet>(new Packet());
- memcpy(received_packet->pkt->data, packet.data(), packet.size());
- received_packet->pkt->length = packet.size();
+ memcpy(received_packet->pkt->data, parsed_packet.data(),
+ parsed_packet.size());
+ received_packet->pkt->length = parsed_packet.size();
}
-
received_packets_.push_back(std::move(received_packet));
++packet_counter_.num_packets;
@@ -132,8 +144,8 @@
continue;
}
++packet_counter_.num_recovered_packets;
- if (!recovered_packet_receiver_->OnRecoveredPacket(
- recovered_packet->pkt->data, recovered_packet->pkt->length)) {
+ if (!callback_->OnRecoveredPacket(recovered_packet->pkt->data,
+ recovered_packet->pkt->length)) {
return false;
}
recovered_packet->returned = true;
« no previous file with comments | « webrtc/modules/rtp_rtcp/include/flexfec_receiver.h ('k') | webrtc/modules/rtp_rtcp/source/flexfec_receiver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698