Index: talk/media/webrtc/webrtcvideoengine2.cc |
diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc |
index 05cd6bbcf1a582380d1c35b5aeb3dbdfb98f2b31..8a1ea82fc0edcb89d777dd636eee90ad447d6730 100644 |
--- a/talk/media/webrtc/webrtcvideoengine2.cc |
+++ b/talk/media/webrtc/webrtcvideoengine2.cc |
@@ -303,6 +303,12 @@ static void MergeFecConfig(const webrtc::FecConfig& other, |
output->red_rtx_payload_type = other.red_rtx_payload_type; |
} |
} |
+ |
+// Returns true if the given codec is disallowed from doing simulcast. |
+bool IsCodecBlacklistedForSimulcast(const std::string& codec_name) { |
+ return CodecNamesEq(codec_name, kH264CodecName); |
+} |
+ |
} // namespace |
// Constants defined in talk/media/webrtc/constants.h |
@@ -2099,9 +2105,17 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig( |
clamped_codec.width = width; |
clamped_codec.height = height; |
- encoder_config.streams = CreateVideoStreams( |
- clamped_codec, parameters_.options, parameters_.max_bitrate_bps, |
- dimensions.is_screencast ? 1 : parameters_.config.rtp.ssrcs.size()); |
+ // By default, the stream count for the codec configuration should match the |
+ // number of negotiated ssrcs. But if the codec is blacklisted for simulcast |
+ // or a screencast, only configure a single stream. |
+ size_t stream_count = parameters_.config.rtp.ssrcs.size(); |
+ if (IsCodecBlacklistedForSimulcast(codec.name) || dimensions.is_screencast) { |
+ stream_count = 1; |
+ } |
+ |
+ encoder_config.streams = |
+ CreateVideoStreams(clamped_codec, parameters_.options, |
+ parameters_.max_bitrate_bps, stream_count); |
// Conference mode screencast uses 2 temporal layers split at 100kbit. |
if (parameters_.options.conference_mode.GetWithDefaultIfUnset(false) && |