Chromium Code Reviews| 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_; |
| } |