diff --git a/src/video_engine/vie_channel_manager.cc b/src/video_engine/vie_channel_manager.cc index 1928dcf792..523f0e6aee 100644 --- a/src/video_engine/vie_channel_manager.cc +++ b/src/video_engine/vie_channel_manager.cc @@ -317,9 +317,13 @@ bool ViEChannelManager::CreateChannelObject(int channel_id, } VideoCodec encoder; - vie_encoder->GetEncoder(encoder); - if (vie_channel->SetSendCodec(encoder) != 0) { - vie_encoder = NULL; + if (vie_encoder->GetEncoder(encoder) != 0 || + vie_channel->SetSendCodec(encoder) != 0) { + WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(engine_id_, channel_id), + "%s: Could not GetEncoder or SetSendCodec.", __FUNCTION__); + vie_channel->DeregisterSendRtpRtcpModule(); + delete vie_channel; + return false; } // Store the channel, add it to the channel group and save the vie_encoder. diff --git a/src/video_engine/vie_encoder.cc b/src/video_engine/vie_encoder.cc index 6bcc86e318..e9b7c1f767 100644 --- a/src/video_engine/vie_encoder.cc +++ b/src/video_engine/vie_encoder.cc @@ -87,6 +87,7 @@ ViEEncoder::ViEEncoder(WebRtc_Word32 engine_id, WebRtc_Word32 channel_id, for (int i = 0; i < kMaxSimulcastStreams; i++) { time_last_intra_request_ms_[i] = 0; } + // TODO(wu): Split out those may fail into an Init function. vcm_.InitializeSender(); vpm_.EnableTemporalDecimation(true); @@ -115,8 +116,12 @@ ViEEncoder::ViEEncoder(WebRtc_Word32 engine_id, WebRtc_Word32 channel_id, #ifdef VIDEOCODEC_VP8 VideoCodec video_codec; if (vcm_.Codec(webrtc::kVideoCodecVP8, &video_codec) == VCM_OK) { - vcm_.RegisterSendCodec(&video_codec, number_of_cores_, - default_rtp_rtcp_.MaxDataPayloadLength()); + if (vcm_.RegisterSendCodec(&video_codec, number_of_cores_, + default_rtp_rtcp_.MaxDataPayloadLength()) != 0) { + WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideo, + ViEId(engine_id_, channel_id_), + "ViEEncoder: VCM::RegisterSendCodec failure"); + } default_rtp_rtcp_.RegisterSendPayload(video_codec); } else { assert(false);