Index: webrtc/media/engine/webrtcvideoengine2.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc |
index 129eb3288a6a27b03c5806eec76a4f4680d9319a..67662b91a9e995a323224ecf1776266aa9fe73f4 100644 |
--- a/webrtc/media/engine/webrtcvideoengine2.cc |
+++ b/webrtc/media/engine/webrtcvideoengine2.cc |
@@ -1183,15 +1183,11 @@ bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp, |
receive_ssrcs_.insert(used_ssrc); |
webrtc::VideoReceiveStream::Config config(this); |
- webrtc::FlexfecConfig flexfec_config; |
+ webrtc::FlexfecReceiveStream::Config flexfec_config(this); |
ConfigureReceiverRtp(&config, &flexfec_config, sp); |
// Set up A/V sync group based on sync label. |
config.sync_group = sp.sync_label; |
- |
- config.rtp.remb = send_codec_ ? HasRemb(send_codec_->codec) : false; |
- config.rtp.transport_cc = |
- send_codec_ ? HasTransportCc(send_codec_->codec) : false; |
config.disable_prerenderer_smoothing = |
video_config_.disable_prerenderer_smoothing; |
@@ -1204,7 +1200,7 @@ bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp, |
void WebRtcVideoChannel2::ConfigureReceiverRtp( |
webrtc::VideoReceiveStream::Config* config, |
- webrtc::FlexfecConfig* flexfec_config, |
+ webrtc::FlexfecReceiveStream::Config* flexfec_config, |
const StreamParams& sp) const { |
uint32_t ssrc = sp.first_ssrc(); |
@@ -1233,6 +1229,10 @@ void WebRtcVideoChannel2::ConfigureReceiverRtp( |
} |
} |
+ config->rtp.remb = send_codec_ ? HasRemb(send_codec_->codec) : false; |
+ config->rtp.transport_cc = |
+ send_codec_ ? HasTransportCc(send_codec_->codec) : false; |
+ |
for (size_t i = 0; i < recv_codecs_.size(); ++i) { |
uint32_t rtx_ssrc; |
if (recv_codecs_[i].rtx_payload_type != -1 && |
@@ -1246,10 +1246,12 @@ void WebRtcVideoChannel2::ConfigureReceiverRtp( |
// TODO(brandtr): This code needs to be generalized when we add support for |
// multistream protection. |
- uint32_t flexfec_ssrc; |
- if (sp.GetFecFrSsrc(ssrc, &flexfec_ssrc)) { |
- flexfec_config->flexfec_ssrc = flexfec_ssrc; |
+ if (sp.GetFecFrSsrc(ssrc, &flexfec_config->remote_ssrc)) { |
flexfec_config->protected_media_ssrcs = {ssrc}; |
+ flexfec_config->local_ssrc = config->rtp.local_ssrc; |
+ flexfec_config->rtcp_mode = config->rtp.rtcp_mode; |
+ flexfec_config->transport_cc = config->rtp.transport_cc; |
+ flexfec_config->rtp_header_extensions = config->rtp.extensions; |
} |
} |
@@ -2148,7 +2150,7 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( |
WebRtcVideoDecoderFactory* external_decoder_factory, |
bool default_stream, |
const std::vector<VideoCodecSettings>& recv_codecs, |
- const webrtc::FlexfecConfig& flexfec_config) |
+ const webrtc::FlexfecReceiveStream::Config& flexfec_config) |
: call_(call), |
stream_params_(sp), |
stream_(NULL), |
@@ -2257,8 +2259,7 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::ConfigureCodecs( |
// TODO(pbos): Reconfigure RTX based on incoming recv_codecs. |
config_.rtp.ulpfec = recv_codecs.front().ulpfec; |
- flexfec_config_.flexfec_payload_type = |
- recv_codecs.front().flexfec_payload_type; |
+ flexfec_config_.payload_type = recv_codecs.front().flexfec_payload_type; |
config_.rtp.nack.rtp_history_ms = |
HasNack(recv_codecs.begin()->codec) ? kNackHistoryMs : 0; |
@@ -2341,16 +2342,7 @@ void WebRtcVideoChannel2::WebRtcVideoReceiveStream::RecreateWebRtcStream() { |
stream_ = call_->CreateVideoReceiveStream(config_.Copy()); |
stream_->Start(); |
if (IsFlexfecFieldTrialEnabled() && flexfec_config_.IsCompleteAndEnabled()) { |
- webrtc::FlexfecReceiveStream::Config config; |
- // Payload types and SSRCs come from the FlexFEC specific part of the SDP. |
- config.payload_type = flexfec_config_.flexfec_payload_type; |
- config.remote_ssrc = flexfec_config_.flexfec_ssrc; |
- config.protected_media_ssrcs = flexfec_config_.protected_media_ssrcs; |
- // RTCP messages and RTP header extensions apply to the entire track |
- // in the SDP. |
- config.transport_cc = config_.rtp.transport_cc; |
- config.rtp_header_extensions = config_.rtp.extensions; |
- flexfec_stream_ = call_->CreateFlexfecReceiveStream(config); |
+ flexfec_stream_ = call_->CreateFlexfecReceiveStream(flexfec_config_); |
flexfec_stream_->Start(); |
} |
} |