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 3affb318aa70428e2a20489abf14d1cffdd3f397..4f420c47a8b39854811708de9894bb2bed8881f7 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc |
@@ -113,14 +113,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); |
@@ -129,7 +129,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()); |
@@ -148,7 +148,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, |
@@ -161,9 +161,9 @@ 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; |
} |
+ fec_packets.clear(); |
danilchap
2016/07/19 14:55:32
needed? (fec_packets is a local variable and this
brandtr
2016/07/21 09:03:58
Good point :)
|
} |
void RTPSenderVideo::SetGenericFECStatus(const bool enable, |
@@ -242,7 +242,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); |
+ // TODO(brandtr): Note that we currently do not use unequal protection in |
danilchap
2016/07/19 14:55:32
TODO hints that something should be done in the fu
brandtr
2016/07/21 09:03:58
Done.
|
+ // the FEC. This is signalled both here (by setting the number of important |
+ // packets to zero), as well as in ProducerFec::AddRtpPacketAndGenerateFec. |
+ const int kNumImportantPackets = 0; |
danilchap
2016/07/19 14:55:33
might be constexpr.
brandtr
2016/07/21 09:03:58
Done.
|
+ producer_fec_.SetFecParameters(fec_params, kNumImportantPackets); |
storage = packetizer->GetStorageType(_retransmissionSettings); |
red_payload_type = red_payload_type_; |
} |