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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc

Issue 2956263002: Don't disable fec for packets without timing frames extension, even if (Closed)
Patch Set: Add missing extension to test Created 3 years, 5 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 unified diff | Download patch
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 return false; 297 return false;
298 298
299 // Create header that will be reused in all packets. 299 // Create header that will be reused in all packets.
300 std::unique_ptr<RtpPacketToSend> rtp_header = rtp_sender_->AllocatePacket(); 300 std::unique_ptr<RtpPacketToSend> rtp_header = rtp_sender_->AllocatePacket();
301 rtp_header->SetPayloadType(payload_type); 301 rtp_header->SetPayloadType(payload_type);
302 rtp_header->SetTimestamp(rtp_timestamp); 302 rtp_header->SetTimestamp(rtp_timestamp);
303 rtp_header->set_capture_time_ms(capture_time_ms); 303 rtp_header->set_capture_time_ms(capture_time_ms);
304 auto last_packet = rtc::MakeUnique<RtpPacketToSend>(*rtp_header); 304 auto last_packet = rtc::MakeUnique<RtpPacketToSend>(*rtp_header);
305 305
306 size_t fec_packet_overhead; 306 size_t fec_packet_overhead;
307 bool is_timing_frame = false;
308 bool red_enabled; 307 bool red_enabled;
309 int32_t retransmission_settings; 308 int32_t retransmission_settings;
310 { 309 {
311 rtc::CritScope cs(&crit_); 310 rtc::CritScope cs(&crit_);
312 // According to 311 // According to
313 // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/ 312 // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/
314 // ts_126114v120700p.pdf Section 7.4.5: 313 // ts_126114v120700p.pdf Section 7.4.5:
315 // The MTSI client shall add the payload bytes as defined in this clause 314 // The MTSI client shall add the payload bytes as defined in this clause
316 // onto the last RTP packet in each group of packets which make up a key 315 // onto the last RTP packet in each group of packets which make up a key
317 // frame (I-frame or IDR frame in H.264 (AVC), or an IRAP picture in H.265 316 // frame (I-frame or IDR frame in H.264 (AVC), or an IRAP picture in H.265
(...skipping 11 matching lines...) Expand all
329 last_rotation_ = current_rotation; 328 last_rotation_ = current_rotation;
330 // Report content type only for key frames. 329 // Report content type only for key frames.
331 if (frame_type == kVideoFrameKey && 330 if (frame_type == kVideoFrameKey &&
332 video_header->content_type != VideoContentType::UNSPECIFIED) { 331 video_header->content_type != VideoContentType::UNSPECIFIED) {
333 last_packet->SetExtension<VideoContentTypeExtension>( 332 last_packet->SetExtension<VideoContentTypeExtension>(
334 video_header->content_type); 333 video_header->content_type);
335 } 334 }
336 if (video_header->video_timing.is_timing_frame) { 335 if (video_header->video_timing.is_timing_frame) {
337 last_packet->SetExtension<VideoTimingExtension>( 336 last_packet->SetExtension<VideoTimingExtension>(
338 video_header->video_timing); 337 video_header->video_timing);
339 is_timing_frame = true;
340 } 338 }
341 } 339 }
342 340
343 // FEC settings. 341 // FEC settings.
344 const FecProtectionParams& fec_params = 342 const FecProtectionParams& fec_params =
345 frame_type == kVideoFrameKey ? key_fec_params_ : delta_fec_params_; 343 frame_type == kVideoFrameKey ? key_fec_params_ : delta_fec_params_;
346 if (flexfec_enabled()) 344 if (flexfec_enabled())
347 flexfec_sender_->SetFecParameters(fec_params); 345 flexfec_sender_->SetFecParameters(fec_params);
348 if (ulpfec_enabled()) 346 if (ulpfec_enabled())
349 ulpfec_generator_.SetFecParameters(fec_params); 347 ulpfec_generator_.SetFecParameters(fec_params);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 if (!packetizer->NextPacket(packet.get())) 387 if (!packetizer->NextPacket(packet.get()))
390 return false; 388 return false;
391 RTC_DCHECK_LE(packet->payload_size(), 389 RTC_DCHECK_LE(packet->payload_size(),
392 last ? max_data_payload_length - last_packet_reduction_len 390 last ? max_data_payload_length - last_packet_reduction_len
393 : max_data_payload_length); 391 : max_data_payload_length);
394 if (!rtp_sender_->AssignSequenceNumber(packet.get())) 392 if (!rtp_sender_->AssignSequenceNumber(packet.get()))
395 return false; 393 return false;
396 394
397 bool protect_packet = (packetizer->GetProtectionType() == kProtectedPacket); 395 bool protect_packet = (packetizer->GetProtectionType() == kProtectedPacket);
398 // Put packetization finish timestamp into extension. 396 // Put packetization finish timestamp into extension.
399 if (last && is_timing_frame) { 397 if (packet->HasExtension<VideoTimingExtension>()) {
400 packet->set_packetization_finish_time_ms(clock_->TimeInMilliseconds()); 398 packet->set_packetization_finish_time_ms(clock_->TimeInMilliseconds());
401 // TODO(ilnik): Due to webrtc:7859, packets with timing extensions are not 399 // TODO(ilnik): Due to webrtc:7859, packets with timing extensions are not
402 // protected by FEC. It reduces FEC efficiency a bit. When FEC is moved 400 // protected by FEC. It reduces FEC efficiency a bit. When FEC is moved
403 // below the pacer, it can be re-enabled for these packets. 401 // below the pacer, it can be re-enabled for these packets.
404 // NOTE: Any RTP stream processor in the network, modifying 'network' 402 // NOTE: Any RTP stream processor in the network, modifying 'network'
405 // timestamps in the timing frames extension have to be an end-point for 403 // timestamps in the timing frames extension have to be an end-point for
406 // FEC, otherwise recovered by FEC packets will be corrupted. 404 // FEC, otherwise recovered by FEC packets will be corrupted.
407 protect_packet = false; 405 protect_packet = false;
408 } 406 }
409 407
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 rtc::CritScope cs(&crit_); 447 rtc::CritScope cs(&crit_);
450 return retransmission_settings_; 448 return retransmission_settings_;
451 } 449 }
452 450
453 void RTPSenderVideo::SetSelectiveRetransmissions(uint8_t settings) { 451 void RTPSenderVideo::SetSelectiveRetransmissions(uint8_t settings) {
454 rtc::CritScope cs(&crit_); 452 rtc::CritScope cs(&crit_);
455 retransmission_settings_ = settings; 453 retransmission_settings_ = settings;
456 } 454 }
457 455
458 } // namespace webrtc 456 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698