| Index: webrtc/modules/rtp_rtcp/source/producer_fec.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/producer_fec.cc b/webrtc/modules/rtp_rtcp/source/producer_fec.cc
|
| index 06f15402bafb6f233613c34a455863d21632aaf3..cdd898d733ed7a7399f34f852039f738262b6f60 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/producer_fec.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/producer_fec.cc
|
| @@ -93,9 +93,10 @@ size_t RedPacket::length() const {
|
| }
|
|
|
| ProducerFec::ProducerFec()
|
| - : num_protected_frames_(0),
|
| + : fec_(ForwardErrorCorrection::CreateUlpfec()),
|
| + num_protected_frames_(0),
|
| num_important_packets_(0),
|
| - min_num_media_packets_(1) {
|
| + min_num_media_packets_(1) {
|
| memset(¶ms_, 0, sizeof(params_));
|
| memset(&new_params_, 0, sizeof(new_params_));
|
| }
|
| @@ -124,9 +125,8 @@ void ProducerFec::SetFecParameters(const FecProtectionParams* params,
|
| // protection in 'unequal protection mode') cannot exceed kMaxMediaPackets.
|
| RTC_DCHECK_GE(params->fec_rate, 0);
|
| RTC_DCHECK_LE(params->fec_rate, 255);
|
| - if (num_important_packets >
|
| - static_cast<int>(ForwardErrorCorrection::kMaxMediaPackets)) {
|
| - num_important_packets = ForwardErrorCorrection::kMaxMediaPackets;
|
| + if (num_important_packets > static_cast<int>(kUlpfecMaxMediaPackets)) {
|
| + num_important_packets = kUlpfecMaxMediaPackets;
|
| }
|
| // Store the new params and apply them for the next set of FEC packets being
|
| // produced.
|
| @@ -148,8 +148,8 @@ int ProducerFec::AddRtpPacketAndGenerateFec(const uint8_t* data_buffer,
|
| }
|
| bool complete_frame = false;
|
| const bool marker_bit = (data_buffer[1] & kRtpMarkerBitMask) ? true : false;
|
| - if (media_packets_.size() < ForwardErrorCorrection::kMaxMediaPackets) {
|
| - // Generic FEC can only protect up to |kMaxMediaPackets| packets.
|
| + if (media_packets_.size() < kUlpfecMaxMediaPackets) {
|
| + // Generic FEC can only protect up to |kUlpfecMaxMediaPackets| packets.
|
| std::unique_ptr<ForwardErrorCorrection::Packet> packet(
|
| new ForwardErrorCorrection::Packet());
|
| packet->length = payload_length + rtp_header_length;
|
| @@ -168,16 +168,16 @@ int ProducerFec::AddRtpPacketAndGenerateFec(const uint8_t* data_buffer,
|
| (num_protected_frames_ == params_.max_fec_frames ||
|
| (ExcessOverheadBelowMax() && MinimumMediaPacketsReached()))) {
|
| RTC_DCHECK_LE(num_important_packets_,
|
| - static_cast<int>(ForwardErrorCorrection::kMaxMediaPackets));
|
| + static_cast<int>(kUlpfecMaxMediaPackets));
|
| // TODO(pbos): Consider whether unequal protection should be enabled or not,
|
| // it is currently always disabled.
|
| //
|
| // Since unequal protection is disabled, the value of
|
| // |num_important_packets_| has no importance when calling GenerateFec().
|
| constexpr bool kUseUnequalProtection = false;
|
| - int ret = fec_.EncodeFec(media_packets_, params_.fec_rate,
|
| - num_important_packets_, kUseUnequalProtection,
|
| - params_.fec_mask_type, &generated_fec_packets_);
|
| + int ret = fec_->EncodeFec(media_packets_, params_.fec_rate,
|
| + num_important_packets_, kUseUnequalProtection,
|
| + params_.fec_mask_type, &generated_fec_packets_);
|
| if (generated_fec_packets_.empty()) {
|
| num_protected_frames_ = 0;
|
| DeleteMediaPackets();
|
| @@ -213,7 +213,7 @@ size_t ProducerFec::NumAvailableFecPackets() const {
|
| }
|
|
|
| size_t ProducerFec::MaxPacketOverhead() const {
|
| - return fec_.MaxPacketOverhead();
|
| + return fec_->MaxPacketOverhead();
|
| }
|
|
|
| std::vector<std::unique_ptr<RedPacket>> ProducerFec::GetFecPacketsAsRed(
|
| @@ -238,15 +238,12 @@ std::vector<std::unique_ptr<RedPacket>> ProducerFec::GetFecPacketsAsRed(
|
| red_packet->SetSeqNum(seq_num++);
|
| red_packet->ClearMarkerBit();
|
| red_packet->AssignPayload(fec_packet->data, fec_packet->length);
|
| -
|
| red_packets.push_back(std::move(red_packet));
|
| }
|
| -
|
| // Reset state.
|
| DeleteMediaPackets();
|
| generated_fec_packets_.clear();
|
| num_protected_frames_ = 0;
|
| -
|
| return red_packets;
|
| }
|
|
|
| @@ -257,7 +254,7 @@ int ProducerFec::Overhead() const {
|
| // generation is implemented.
|
| RTC_DCHECK(!media_packets_.empty());
|
| int num_fec_packets =
|
| - fec_.NumFecPackets(media_packets_.size(), params_.fec_rate);
|
| + fec_->NumFecPackets(media_packets_.size(), params_.fec_rate);
|
| // Return the overhead in Q8.
|
| return (num_fec_packets << 8) / media_packets_.size();
|
| }
|
|
|