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

Side by Side Diff: webrtc/video/video_send_stream.cc

Issue 2033763002: Always send RED headers if configured. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Tests passing. Created 4 years, 6 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 RTC_DCHECK(ok); 652 RTC_DCHECK(ok);
653 } 653 }
654 } 654 }
655 655
656 return return_value; 656 return return_value;
657 } 657 }
658 658
659 void VideoSendStream::ConfigureProtection() { 659 void VideoSendStream::ConfigureProtection() {
660 // Enable NACK, FEC or both. 660 // Enable NACK, FEC or both.
661 const bool enable_protection_nack = config_.rtp.nack.rtp_history_ms > 0; 661 const bool enable_protection_nack = config_.rtp.nack.rtp_history_ms > 0;
662 bool enable_protection_fec = config_.rtp.fec.red_payload_type != -1; 662 bool enable_protection_fec = config_.rtp.fec.ulpfec_payload_type != -1;
663 // Payload types without picture ID cannot determine that a stream is complete 663 // Payload types without picture ID cannot determine that a stream is complete
664 // without retransmitting FEC, so using FEC + NACK for H.264 (for instance) is 664 // without retransmitting FEC, so using FEC + NACK for H.264 (for instance) is
665 // a waste of bandwidth since FEC packets still have to be transmitted. Note 665 // a waste of bandwidth since FEC packets still have to be transmitted. Note
666 // that this is not the case with FLEXFEC. 666 // that this is not the case with FLEXFEC.
667 if (enable_protection_nack && 667 if (enable_protection_nack &&
668 !PayloadTypeSupportsSkippingFecPackets( 668 !PayloadTypeSupportsSkippingFecPackets(
669 config_.encoder_settings.payload_name)) { 669 config_.encoder_settings.payload_name)) {
670 LOG(LS_WARNING) << "Transmitting payload type without picture ID using" 670 LOG(LS_WARNING) << "Transmitting payload type without picture ID using"
671 "NACK+FEC is a waste of bandwidth since FEC packets " 671 "NACK+FEC is a waste of bandwidth since FEC packets "
672 "also have to be retransmitted. Disabling FEC."; 672 "also have to be retransmitted. Disabling FEC.";
673 enable_protection_fec = false; 673 enable_protection_fec = false;
674 } 674 }
675 675
676 // Set to valid uint8_ts to be castable later without signed overflows. 676 // Set to valid uint8_ts to be castable later without signed overflows.
677 uint8_t payload_type_red = 0; 677 uint8_t payload_type_red = 0;
678 uint8_t payload_type_fec = 0; 678 uint8_t payload_type_fec = 0;
679
679 // TODO(changbin): Should set RTX for RED mapping in RTP sender in future. 680 // TODO(changbin): Should set RTX for RED mapping in RTP sender in future.
680 // Validate payload types. If either RED or FEC payload types are set then 681 // Validate payload types. If either RED or FEC payload types are set then
681 // both should be. If FEC is enabled then they both have to be set. 682 // both should be. If FEC is enabled then they both have to be set.
682 if (enable_protection_fec || config_.rtp.fec.red_payload_type != -1 || 683 if (config_.rtp.fec.red_payload_type != -1) {
683 config_.rtp.fec.ulpfec_payload_type != -1) {
684 RTC_DCHECK_GE(config_.rtp.fec.red_payload_type, 0); 684 RTC_DCHECK_GE(config_.rtp.fec.red_payload_type, 0);
mflodman 2016/06/03 07:28:16 Or change this to not allow 0.
stefan-webrtc 2016/06/03 07:50:18 Will do! https://codereview.webrtc.org/2036083002
685 RTC_DCHECK_LE(config_.rtp.fec.red_payload_type, 127);
686 // TODO(holmer): We should only enable red if ulpfec is also enabled, but
687 // but due to an incompatibility issue with previous versions the receiver
688 // assumes rtx packets are containing red if it has been configured to
689 // receive red. Remove this in a few versions once the incompatibility
690 // issue is resolved (M53 timeframe).
691 payload_type_red = static_cast<uint8_t>(config_.rtp.fec.red_payload_type);
692 }
693 if (config_.rtp.fec.ulpfec_payload_type != -1) {
685 RTC_DCHECK_GE(config_.rtp.fec.ulpfec_payload_type, 0); 694 RTC_DCHECK_GE(config_.rtp.fec.ulpfec_payload_type, 0);
mflodman 2016/06/03 07:28:16 And here.
686 RTC_DCHECK_LE(config_.rtp.fec.red_payload_type, 127);
687 RTC_DCHECK_LE(config_.rtp.fec.ulpfec_payload_type, 127); 695 RTC_DCHECK_LE(config_.rtp.fec.ulpfec_payload_type, 127);
688 payload_type_red = static_cast<uint8_t>(config_.rtp.fec.red_payload_type);
689 payload_type_fec = 696 payload_type_fec =
690 static_cast<uint8_t>(config_.rtp.fec.ulpfec_payload_type); 697 static_cast<uint8_t>(config_.rtp.fec.ulpfec_payload_type);
691 } else {
692 // Payload types unset.
693 RTC_DCHECK_EQ(config_.rtp.fec.red_payload_type, -1);
694 RTC_DCHECK_EQ(config_.rtp.fec.ulpfec_payload_type, -1);
695 } 698 }
696 699
697 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { 700 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
698 // Set NACK. 701 // Set NACK.
699 rtp_rtcp->SetStorePacketsStatus( 702 rtp_rtcp->SetStorePacketsStatus(
700 enable_protection_nack || congestion_controller_->pacer(), 703 enable_protection_nack || congestion_controller_->pacer(),
701 kMinSendSidePacketHistorySize); 704 kMinSendSidePacketHistorySize);
702 // Set FEC. 705 // Set FEC.
703 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { 706 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
704 rtp_rtcp->SetGenericFECStatus(enable_protection_fec, payload_type_red, 707 rtp_rtcp->SetGenericFECStatus(enable_protection_fec, payload_type_red,
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 &module_nack_rate); 809 &module_nack_rate);
807 *sent_video_rate_bps += module_video_rate; 810 *sent_video_rate_bps += module_video_rate;
808 *sent_nack_rate_bps += module_nack_rate; 811 *sent_nack_rate_bps += module_nack_rate;
809 *sent_fec_rate_bps += module_fec_rate; 812 *sent_fec_rate_bps += module_fec_rate;
810 } 813 }
811 return 0; 814 return 0;
812 } 815 }
813 816
814 } // namespace internal 817 } // namespace internal
815 } // namespace webrtc 818 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698