| Index: webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
|
| index 378ef130d1a27811137462ace01ece5ca2fe4e19..c1830aae4fabf6fe22f6bc374ce63e66848f4970 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
|
| @@ -116,14 +116,14 @@ void RTPSenderVideo::SendVideoPacketAsRed(uint8_t* data_buffer,
|
| StorageType media_packet_storage,
|
| bool protect) {
|
| std::unique_ptr<RedPacket> red_packet;
|
| - std::vector<RedPacket*> fec_packets;
|
| + std::vector<std::unique_ptr<RedPacket>> fec_packets;
|
| StorageType fec_storage = kDontRetransmit;
|
| uint16_t next_fec_sequence_number = 0;
|
| {
|
| // Only protect while creating RED and FEC packets, not when sending.
|
| rtc::CritScope cs(&crit_);
|
| - red_packet.reset(producer_fec_.BuildRedPacket(
|
| - data_buffer, payload_length, rtp_header_length, red_payload_type_));
|
| + red_packet = ProducerFec::BuildRedPacket(
|
| + data_buffer, payload_length, rtp_header_length, red_payload_type_);
|
| if (protect) {
|
| producer_fec_.AddRtpPacketAndGenerateFec(data_buffer, payload_length,
|
| rtp_header_length);
|
| @@ -132,7 +132,7 @@ void RTPSenderVideo::SendVideoPacketAsRed(uint8_t* data_buffer,
|
| if (num_fec_packets > 0) {
|
| next_fec_sequence_number =
|
| _rtpSender.AllocateSequenceNumber(num_fec_packets);
|
| - fec_packets = producer_fec_.GetFecPackets(
|
| + fec_packets = producer_fec_.GetFecPacketsAsRed(
|
| red_payload_type_, fec_payload_type_, next_fec_sequence_number,
|
| rtp_header_length);
|
| RTC_DCHECK_EQ(num_fec_packets, fec_packets.size());
|
| @@ -152,7 +152,7 @@ void RTPSenderVideo::SendVideoPacketAsRed(uint8_t* data_buffer,
|
| } else {
|
| LOG(LS_WARNING) << "Failed to send RED packet " << media_seq_num;
|
| }
|
| - for (RedPacket* fec_packet : fec_packets) {
|
| + for (const auto& fec_packet : fec_packets) {
|
| if (_rtpSender.SendToNetwork(
|
| fec_packet->data(), fec_packet->length() - rtp_header_length,
|
| rtp_header_length, capture_time_ms, fec_storage,
|
| @@ -166,7 +166,6 @@ void RTPSenderVideo::SendVideoPacketAsRed(uint8_t* data_buffer,
|
| LOG(LS_WARNING) << "Failed to send FEC packet "
|
| << next_fec_sequence_number;
|
| }
|
| - delete fec_packet;
|
| ++next_fec_sequence_number;
|
| }
|
| }
|
| @@ -247,7 +246,11 @@ int32_t RTPSenderVideo::SendVideo(const RtpVideoCodecTypes videoType,
|
| rtc::CritScope cs(&crit_);
|
| FecProtectionParams* fec_params =
|
| frameType == kVideoFrameKey ? &key_fec_params_ : &delta_fec_params_;
|
| - producer_fec_.SetFecParameters(fec_params, 0);
|
| + // We currently do not use unequal protection in the FEC.
|
| + // This is signalled both here (by setting the number of important
|
| + // packets to zero), as well as in ProducerFec::AddRtpPacketAndGenerateFec.
|
| + constexpr int kNumImportantPackets = 0;
|
| + producer_fec_.SetFecParameters(fec_params, kNumImportantPackets);
|
| storage = packetizer->GetStorageType(_retransmissionSettings);
|
| red_payload_type = red_payload_type_;
|
| }
|
|
|