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

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

Issue 2080553003: Style updates for ForwardErrorCorrection and related classes (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Re-add explicit constructors. Created 4 years, 6 months 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/forward_error_correction.cc
diff --git a/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc b/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc
index 623c658a17401b877bd6748471f1e7ed8b9f3552..7b10bc0a345239022cb5c26e8cf5258899525a78 100644
--- a/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc
+++ b/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc
@@ -37,7 +37,8 @@ const uint8_t kUlpHeaderSizeLBitClear = (2 + kMaskSizeLBitClear);
// Transport header size in bytes. Assume UDP/IPv4 as a reasonable minimum.
const uint8_t kTransportOverhead = 28;
-enum { kMaxFecPackets = ForwardErrorCorrection::kMaxMediaPackets };
+// Maximum number of FEC packets stored internally.
+const uint8_t kMaxFecPackets = ForwardErrorCorrection::kMaxMediaPackets;
danilchap 2016/06/29 10:31:52 prefer size_t for this variable.
brandtr 2016/06/29 14:24:10 Done. Would it make sense to change all of these
danilchap 2016/06/29 15:18:24 For new code should use constexpr, for old code li
int32_t ForwardErrorCorrection::Packet::AddRef() {
return ++ref_count_;
@@ -85,8 +86,7 @@ ForwardErrorCorrection::RecoveredPacket::RecoveredPacket() {}
ForwardErrorCorrection::RecoveredPacket::~RecoveredPacket() {}
ForwardErrorCorrection::ForwardErrorCorrection()
- : generated_fec_packets_(kMaxMediaPackets), fec_packet_received_(false) {}
-
+ : generated_fec_packets_(kMaxMediaPackets) {}
ForwardErrorCorrection::~ForwardErrorCorrection() {}
// Input packet
@@ -106,6 +106,9 @@ ForwardErrorCorrection::~ForwardErrorCorrection() {}
// | FEC Level 0 Payload |
// | |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+// N.B. that any potential RED headers are added/removed before calling
danilchap 2016/06/29 10:31:53 what is N.B. ?
brandtr 2016/06/29 14:24:10 "Nota Bene" == "note well" in latin. It's a bit ac
+// GenerateFEC or DecodeFEC.
int32_t ForwardErrorCorrection::GenerateFEC(const PacketList& media_packet_list,
uint8_t protection_factor,
int num_important_packets,
@@ -182,10 +185,10 @@ int32_t ForwardErrorCorrection::GenerateFEC(const PacketList& media_packet_list,
num_mask_bytes = kMaskSizeLBitSet;
}
- GenerateFecBitStrings(media_packet_list, packet_mask.get(), num_fec_packets,
- l_bit);
- GenerateFecUlpHeaders(media_packet_list, packet_mask.get(), l_bit,
- num_fec_packets);
+ GenerateFecBitStrings(media_packet_list, packet_mask.get(),
+ num_fec_packets, l_bit);
+ GenerateFecUlpHeaders(media_packet_list, packet_mask.get(),
+ num_fec_packets, l_bit);
return 0;
}
@@ -207,9 +210,7 @@ void ForwardErrorCorrection::GenerateFecBitStrings(
uint8_t* packet_mask,
int num_fec_packets,
bool l_bit) {
- if (media_packet_list.empty()) {
- return;
- }
+ assert(!media_packet_list.empty());
danilchap 2016/06/29 10:31:52 use RTC_DCHECK instead of assert
brandtr 2016/06/29 14:24:10 Done.
uint8_t media_payload_length[2];
const int num_mask_bytes = l_bit ? kMaskSizeLBitSet : kMaskSizeLBitClear;
const uint16_t ulp_header_size =
@@ -219,7 +220,7 @@ void ForwardErrorCorrection::GenerateFecBitStrings(
for (int i = 0; i < num_fec_packets; ++i) {
Packet* const fec_packet = &generated_fec_packets_[i];
- PacketList::const_iterator media_list_it = media_packet_list.begin();
+ auto media_list_it = media_packet_list.cbegin();
uint32_t pkt_mask_idx = i * num_mask_bytes;
uint32_t media_pkt_idx = 0;
uint16_t fec_packet_length = 0;
@@ -237,9 +238,10 @@ void ForwardErrorCorrection::GenerateFecBitStrings(
fec_packet_length = media_packet->length + fec_rtp_offset;
// On the first protected packet, we don't need to XOR.
if (fec_packet->length == 0) {
- // Copy the first 2 bytes of the RTP header.
- memcpy(fec_packet->data, media_packet->data, 2);
- // Copy the 5th to 8th bytes of the RTP header.
+ // Copy the first 2 bytes of the RTP header. Note that the E and L
+ // bits are overwritten in GenerateFecUlpHeaders.
+ memcpy(&fec_packet->data[0], &media_packet->data[0], 2);
+ // Copy the 5th to 8th bytes of the RTP header (timestamp).
memcpy(&fec_packet->data[4], &media_packet->data[4], 4);
// Copy network-ordered payload size.
memcpy(&fec_packet->data[8], media_payload_length, 2);
@@ -291,7 +293,6 @@ int ForwardErrorCorrection::InsertZerosInBitMasks(
uint8_t* packet_mask,
int num_mask_bytes,
int num_fec_packets) {
- uint8_t* new_mask = NULL;
if (media_packets.size() <= 1) {
return media_packets.size();
}
@@ -313,15 +314,16 @@ int ForwardErrorCorrection::InsertZerosInBitMasks(
if (media_packets.size() + total_missing_seq_nums > 8 * kMaskSizeLBitClear) {
new_mask_bytes = kMaskSizeLBitSet;
}
- new_mask = new uint8_t[num_fec_packets * kMaskSizeLBitSet];
- memset(new_mask, 0, num_fec_packets * kMaskSizeLBitSet);
+ std::unique_ptr<uint8_t[]> new_mask(
+ new uint8_t[num_fec_packets * kMaskSizeLBitSet]);
+ memset(new_mask.get(), 0, num_fec_packets * kMaskSizeLBitSet);
- PacketList::const_iterator it = media_packets.begin();
+ auto it = media_packets.cbegin();
uint16_t prev_seq_num = first_seq_num;
++it;
// Insert the first column.
- CopyColumn(new_mask, new_mask_bytes, packet_mask, num_mask_bytes,
+ CopyColumn(new_mask.get(), new_mask_bytes, packet_mask, num_mask_bytes,
num_fec_packets, 0, 0);
int new_bit_index = 1;
int old_bit_index = 1;
@@ -335,11 +337,11 @@ int ForwardErrorCorrection::InsertZerosInBitMasks(
const int zeros_to_insert =
static_cast<uint16_t>(seq_num - prev_seq_num - 1);
if (zeros_to_insert > 0) {
- InsertZeroColumns(zeros_to_insert, new_mask, new_mask_bytes,
+ InsertZeroColumns(zeros_to_insert, new_mask.get(), new_mask_bytes,
num_fec_packets, new_bit_index);
}
new_bit_index += zeros_to_insert;
- CopyColumn(new_mask, new_mask_bytes, packet_mask, num_mask_bytes,
+ CopyColumn(new_mask.get(), new_mask_bytes, packet_mask, num_mask_bytes,
num_fec_packets, new_bit_index, old_bit_index);
++new_bit_index;
++old_bit_index;
@@ -353,8 +355,7 @@ int ForwardErrorCorrection::InsertZerosInBitMasks(
}
}
// Replace the old mask with the new.
- memcpy(packet_mask, new_mask, kMaskSizeLBitSet * num_fec_packets);
- delete[] new_mask;
+ memcpy(packet_mask, new_mask.get(), kMaskSizeLBitSet * num_fec_packets);
return new_bit_index;
}
@@ -393,8 +394,8 @@ void ForwardErrorCorrection::CopyColumn(uint8_t* new_mask,
void ForwardErrorCorrection::GenerateFecUlpHeaders(
const PacketList& media_packet_list,
uint8_t* packet_mask,
- bool l_bit,
- int num_fec_packets) {
+ int num_fec_packets,
+ bool l_bit) {
// -- Generate FEC and ULP headers --
//
// FEC Header, 10 bytes
@@ -416,9 +417,9 @@ void ForwardErrorCorrection::GenerateFecUlpHeaders(
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | mask cont. (present only when L = 1) |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- PacketList::const_iterator media_list_it = media_packet_list.begin();
- Packet* media_packet = *media_list_it;
- assert(media_packet != NULL);
+ Packet* first_media_packet = media_packet_list.front();
danilchap 2016/06/29 10:31:53 may be add RTC_DCHECK(!media_packet_list.empty())
brandtr 2016/06/29 14:24:10 Done.
+ assert(first_media_packet != NULL);
danilchap 2016/06/29 10:31:52 RTC_DCHECK(first_media_packet);
brandtr 2016/06/29 14:24:10 Done.
+ uint16_t seq_num = ParseSequenceNumber(first_media_packet->data);
int num_mask_bytes = l_bit ? kMaskSizeLBitSet : kMaskSizeLBitClear;
const uint16_t ulp_header_size =
l_bit ? kUlpHeaderSizeLBitSet : kUlpHeaderSizeLBitClear;
@@ -432,10 +433,10 @@ void ForwardErrorCorrection::GenerateFecUlpHeaders(
} else {
fec_packet->data[0] |= 0x40; // Set the L bit.
}
- // Two byte sequence number from first RTP packet to SN base.
+ // Sequence number from first media packet used as SN base.
// We use the same sequence number base for every FEC packet,
// but that's not required in general.
- memcpy(&fec_packet->data[2], &media_packet->data[2], 2);
+ ByteWriter<uint16_t>::WriteBigEndian(&fec_packet->data[2], seq_num);
// -- ULP header --
// Copy the payload size to the protection length field.
@@ -452,8 +453,6 @@ void ForwardErrorCorrection::GenerateFecUlpHeaders(
void ForwardErrorCorrection::ResetState(
RecoveredPacketList* recovered_packet_list) {
- fec_packet_received_ = false;
-
// Free the memory for any existing recovered packets, if the user hasn't.
while (!recovered_packet_list->empty()) {
delete recovered_packet_list->front();
@@ -463,10 +462,9 @@ void ForwardErrorCorrection::ResetState(
// Free the FEC packet list.
while (!fec_packet_list_.empty()) {
- FecPacketList::iterator fec_packet_list_it = fec_packet_list_.begin();
+ auto fec_packet_list_it = fec_packet_list_.cbegin();
FecPacket* fec_packet = *fec_packet_list_it;
danilchap 2016/06/29 10:31:52 may be reduce a bit futher: FecPacket* fec_packet
brandtr 2016/06/29 14:24:10 Done.
- ProtectedPacketList::iterator protected_packet_list_it;
- protected_packet_list_it = fec_packet->protected_pkt_list.begin();
+ auto protected_packet_list_it = fec_packet->protected_pkt_list.begin();
while (protected_packet_list_it != fec_packet->protected_pkt_list.end()) {
delete *protected_packet_list_it;
protected_packet_list_it =
@@ -482,8 +480,7 @@ void ForwardErrorCorrection::ResetState(
void ForwardErrorCorrection::InsertMediaPacket(
ReceivedPacket* rx_packet,
RecoveredPacketList* recovered_packet_list) {
- RecoveredPacketList::iterator recovered_packet_list_it =
- recovered_packet_list->begin();
+ auto recovered_packet_list_it = recovered_packet_list->cbegin();
// Search for duplicate packets.
while (recovered_packet_list_it != recovered_packet_list->end()) {
@@ -493,28 +490,28 @@ void ForwardErrorCorrection::InsertMediaPacket(
rx_packet->pkt = NULL;
return;
}
- recovered_packet_list_it++;
+ ++recovered_packet_list_it;
}
- RecoveredPacket* recoverd_packet_to_insert = new RecoveredPacket;
- recoverd_packet_to_insert->was_recovered = false;
+ RecoveredPacket* recovered_packet_to_insert = new RecoveredPacket;
+ recovered_packet_to_insert->was_recovered = false;
// Inserted Media packet is already sent to VCM.
- recoverd_packet_to_insert->returned = true;
- recoverd_packet_to_insert->seq_num = rx_packet->seq_num;
- recoverd_packet_to_insert->pkt = rx_packet->pkt;
- recoverd_packet_to_insert->pkt->length = rx_packet->pkt->length;
+ recovered_packet_to_insert->returned = true;
+ recovered_packet_to_insert->seq_num = rx_packet->seq_num;
+ recovered_packet_to_insert->pkt = rx_packet->pkt;
+ recovered_packet_to_insert->pkt->length = rx_packet->pkt->length;
// TODO(holmer): Consider replacing this with a binary search for the right
// position, and then just insert the new packet. Would get rid of the sort.
- recovered_packet_list->push_back(recoverd_packet_to_insert);
+ recovered_packet_list->push_back(recovered_packet_to_insert);
recovered_packet_list->sort(SortablePacket::LessThan);
- UpdateCoveringFECPackets(recoverd_packet_to_insert);
+ UpdateCoveringFECPackets(recovered_packet_to_insert);
}
void ForwardErrorCorrection::UpdateCoveringFECPackets(RecoveredPacket* packet) {
- for (FecPacketList::iterator it = fec_packet_list_.begin();
- it != fec_packet_list_.end(); ++it) {
+ for (auto it = fec_packet_list_.cbegin();
danilchap 2016/06/29 10:31:52 this loop seems better to reduce to c++11 loop: fo
brandtr 2016/06/29 14:24:10 Done.
+ it != fec_packet_list_.end(); ++it) {
// Is this FEC packet protecting the media packet |packet|?
- ProtectedPacketList::iterator protected_it = std::lower_bound(
+ auto protected_it = std::lower_bound(
(*it)->protected_pkt_list.begin(), (*it)->protected_pkt_list.end(),
packet, SortablePacket::LessThan);
if (protected_it != (*it)->protected_pkt_list.end() &&
@@ -528,17 +525,15 @@ void ForwardErrorCorrection::UpdateCoveringFECPackets(RecoveredPacket* packet) {
void ForwardErrorCorrection::InsertFECPacket(
ReceivedPacket* rx_packet,
const RecoveredPacketList* recovered_packet_list) {
- fec_packet_received_ = true;
-
// Check for duplicate.
- FecPacketList::iterator fec_packet_list_it = fec_packet_list_.begin();
+ auto fec_packet_list_it = fec_packet_list_.begin();
while (fec_packet_list_it != fec_packet_list_.end()) {
danilchap 2016/06/29 10:31:52 reduce this one to c++11 loop too.
brandtr 2016/06/29 14:24:10 Done.
if (rx_packet->seq_num == (*fec_packet_list_it)->seq_num) {
// Delete duplicate FEC packet data.
rx_packet->pkt = NULL;
return;
}
- fec_packet_list_it++;
+ ++fec_packet_list_it;
}
FecPacket* fec_packet = new FecPacket;
fec_packet->pkt = rx_packet->pkt;
@@ -590,14 +585,14 @@ void ForwardErrorCorrection::AssignRecoveredPackets(
ProtectedPacketList* not_recovered = &fec_packet->protected_pkt_list;
RecoveredPacketList already_recovered;
std::set_intersection(
- recovered_packets->begin(), recovered_packets->end(),
- not_recovered->begin(), not_recovered->end(),
+ recovered_packets->cbegin(), recovered_packets->cend(),
+ not_recovered->cbegin(), not_recovered->cend(),
std::inserter(already_recovered, already_recovered.end()),
SortablePacket::LessThan);
// Set the FEC pointers to all recovered packets so that we don't have to
// search for them when we are doing recovery.
- ProtectedPacketList::iterator not_recovered_it = not_recovered->begin();
- for (RecoveredPacketList::iterator it = already_recovered.begin();
+ auto not_recovered_it = not_recovered->cbegin();
+ for (auto it = already_recovered.cbegin();
it != already_recovered.end(); ++it) {
// Search for the next recovered packet in |not_recovered|.
while ((*not_recovered_it)->seq_num != (*it)->seq_num)
@@ -643,8 +638,8 @@ void ForwardErrorCorrection::InsertPackets(
DiscardOldPackets(recovered_packet_list);
}
-bool ForwardErrorCorrection::InitRecovery(const FecPacket* fec_packet,
- RecoveredPacket* recovered) {
+bool ForwardErrorCorrection::InitRecoveryOfPacket(const FecPacket* fec_packet,
+ RecoveredPacket* recovered) {
// This is the first packet which we try to recover with.
const uint16_t ulp_header_size = fec_packet->pkt->data[0] & 0x40
? kUlpHeaderSizeLBitSet
@@ -684,7 +679,8 @@ bool ForwardErrorCorrection::InitRecovery(const FecPacket* fec_packet,
return true;
}
-bool ForwardErrorCorrection::FinishRecovery(RecoveredPacket* recovered) {
+bool ForwardErrorCorrection::FinishRecoveryOfPacket(
+ RecoveredPacket* recovered) {
// Set the RTP version to 2.
recovered->pkt->data[0] |= 0x80; // Set the 1st bit.
recovered->pkt->data[0] &= 0xbf; // Clear the 2nd bit.
@@ -729,10 +725,9 @@ void ForwardErrorCorrection::XorPackets(const Packet* src_packet,
bool ForwardErrorCorrection::RecoverPacket(
const FecPacket* fec_packet,
RecoveredPacket* rec_packet_to_insert) {
- if (!InitRecovery(fec_packet, rec_packet_to_insert))
+ if (!InitRecoveryOfPacket(fec_packet, rec_packet_to_insert))
return false;
- ProtectedPacketList::const_iterator protected_it =
- fec_packet->protected_pkt_list.begin();
+ auto protected_it = fec_packet->protected_pkt_list.cbegin();
danilchap 2016/06/29 10:31:52 ditto
brandtr 2016/06/29 14:24:10 Done.
while (protected_it != fec_packet->protected_pkt_list.end()) {
if ((*protected_it)->pkt == NULL) {
// This is the packet we're recovering.
@@ -742,14 +737,14 @@ bool ForwardErrorCorrection::RecoverPacket(
}
++protected_it;
}
- if (!FinishRecovery(rec_packet_to_insert))
+ if (!FinishRecoveryOfPacket(rec_packet_to_insert))
return false;
return true;
}
void ForwardErrorCorrection::AttemptRecover(
RecoveredPacketList* recovered_packet_list) {
- FecPacketList::iterator fec_packet_list_it = fec_packet_list_.begin();
+ auto fec_packet_list_it = fec_packet_list_.begin();
while (fec_packet_list_it != fec_packet_list_.end()) {
// Search for each FEC packet's protected media packets.
int packets_missing = NumCoveredPacketsMissing(*fec_packet_list_it);
@@ -797,8 +792,7 @@ void ForwardErrorCorrection::AttemptRecover(
int ForwardErrorCorrection::NumCoveredPacketsMissing(
const FecPacket* fec_packet) {
int packets_missing = 0;
- ProtectedPacketList::const_iterator it =
- fec_packet->protected_pkt_list.begin();
+ auto it = fec_packet->protected_pkt_list.cbegin();
danilchap 2016/06/29 10:31:52 ditto
brandtr 2016/06/29 14:24:10 Done.
for (; it != fec_packet->protected_pkt_list.end(); ++it) {
if ((*it)->pkt == NULL) {
++packets_missing;

Powered by Google App Engine
This is Rietveld 408576698