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

Unified 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, 7 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/video/video_send_stream.cc
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
index afd9909dc0bfc37b17cc701b65054db8f6bdc98e..00dfd8894b0a11de520f5c542dad176ffcb2ebc7 100644
--- a/webrtc/video/video_send_stream.cc
+++ b/webrtc/video/video_send_stream.cc
@@ -659,7 +659,7 @@ int32_t VideoSendStream::Encoded(const EncodedImage& encoded_image,
void VideoSendStream::ConfigureProtection() {
// Enable NACK, FEC or both.
const bool enable_protection_nack = config_.rtp.nack.rtp_history_ms > 0;
- bool enable_protection_fec = config_.rtp.fec.red_payload_type != -1;
+ bool enable_protection_fec = config_.rtp.fec.ulpfec_payload_type != -1;
// Payload types without picture ID cannot determine that a stream is complete
// without retransmitting FEC, so using FEC + NACK for H.264 (for instance) is
// a waste of bandwidth since FEC packets still have to be transmitted. Note
@@ -676,22 +676,25 @@ void VideoSendStream::ConfigureProtection() {
// Set to valid uint8_ts to be castable later without signed overflows.
uint8_t payload_type_red = 0;
uint8_t payload_type_fec = 0;
+
// TODO(changbin): Should set RTX for RED mapping in RTP sender in future.
// Validate payload types. If either RED or FEC payload types are set then
// both should be. If FEC is enabled then they both have to be set.
- if (enable_protection_fec || config_.rtp.fec.red_payload_type != -1 ||
- config_.rtp.fec.ulpfec_payload_type != -1) {
+ if (config_.rtp.fec.red_payload_type != -1) {
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
- RTC_DCHECK_GE(config_.rtp.fec.ulpfec_payload_type, 0);
RTC_DCHECK_LE(config_.rtp.fec.red_payload_type, 127);
- RTC_DCHECK_LE(config_.rtp.fec.ulpfec_payload_type, 127);
+ // TODO(holmer): We should only enable red if ulpfec is also enabled, but
+ // but due to an incompatibility issue with previous versions the receiver
+ // assumes rtx packets are containing red if it has been configured to
+ // receive red. Remove this in a few versions once the incompatibility
+ // issue is resolved (M53 timeframe).
payload_type_red = static_cast<uint8_t>(config_.rtp.fec.red_payload_type);
+ }
+ if (config_.rtp.fec.ulpfec_payload_type != -1) {
+ RTC_DCHECK_GE(config_.rtp.fec.ulpfec_payload_type, 0);
mflodman 2016/06/03 07:28:16 And here.
+ RTC_DCHECK_LE(config_.rtp.fec.ulpfec_payload_type, 127);
payload_type_fec =
static_cast<uint8_t>(config_.rtp.fec.ulpfec_payload_type);
- } else {
- // Payload types unset.
- RTC_DCHECK_EQ(config_.rtp.fec.red_payload_type, -1);
- RTC_DCHECK_EQ(config_.rtp.fec.ulpfec_payload_type, -1);
}
for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {

Powered by Google App Engine
This is Rietveld 408576698