diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc index 5be69d324..3b8c7f834 100644 --- a/talk/media/webrtc/webrtcvideoengine2.cc +++ b/talk/media/webrtc/webrtcvideoengine2.cc @@ -1587,7 +1587,13 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodecAndOptions( // Set RTX payload type if RTX is enabled. if (!parameters_.config.rtp.rtx.ssrcs.empty()) { - parameters_.config.rtp.rtx.payload_type = codec_settings.rtx_payload_type; + if (codec_settings.rtx_payload_type == -1) { + LOG(LS_WARNING) << "RTX SSRCs configured but there's no configured RTX " + "payload type. Ignoring."; + parameters_.config.rtp.rtx.ssrcs.clear(); + } else { + parameters_.config.rtp.rtx.payload_type = codec_settings.rtx_payload_type; + } } if (IsNackEnabled(codec_settings.codec)) { @@ -1843,8 +1849,13 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::RecreateWebRtcStream() { parameters_.encoder_config.encoder_specific_settings = ConfigureVideoEncoderSettings(codec_settings.codec, parameters_.options); - stream_ = call_->CreateVideoSendStream(parameters_.config, - parameters_.encoder_config); + webrtc::VideoSendStream::Config config = parameters_.config; + if (!config.rtp.rtx.ssrcs.empty() && config.rtp.rtx.payload_type == -1) { + LOG(LS_WARNING) << "RTX SSRCs configured but there's no configured RTX " + "payload type the set codec. Ignoring RTX."; + config.rtp.rtx.ssrcs.clear(); + } + stream_ = call_->CreateVideoSendStream(config, parameters_.encoder_config); parameters_.encoder_config.encoder_specific_settings = NULL; @@ -1907,6 +1918,11 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::CreateOrReuseVideoDecoder( webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kVp8), type, false); } + if (type == webrtc::kVideoCodecVP9) { + return AllocatedDecoder( + webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kVp9), type, false); + } + // This shouldn't happen, we should not be trying to create something we don't // support. assert(false); diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc index ad3bb9c3c..7f5d077cf 100644 --- a/webrtc/video/video_send_stream.cc +++ b/webrtc/video/video_send_stream.cc @@ -349,6 +349,19 @@ bool VideoSendStream::ReconfigureVideoEncoder( video_codec.codecSpecific.VP8.numberOfTemporalLayers = static_cast( streams.back().temporal_layer_thresholds_bps.size() + 1); + } else if (video_codec.codecType == kVideoCodecVP9) { + if (config.encoder_specific_settings != NULL) { + video_codec.codecSpecific.VP9 = *reinterpret_cast( + config.encoder_specific_settings); + } + video_codec.codecSpecific.VP9.numberOfTemporalLayers = + static_cast( + streams.back().temporal_layer_thresholds_bps.size() + 1); + } else if (video_codec.codecType == kVideoCodecH264) { + if (config.encoder_specific_settings != NULL) { + video_codec.codecSpecific.H264 = *reinterpret_cast( + config.encoder_specific_settings); + } } else { // TODO(pbos): Support encoder_settings codec-agnostically. assert(config.encoder_specific_settings == NULL);