Chromium Code Reviews| Index: webrtc/video/vie_encoder.cc |
| diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc |
| index 8704947c2eb0213939473c55812685379c6f9b2b..4a6327f0ae87fc83b861196e6bf1620bb2e32ce7 100644 |
| --- a/webrtc/video/vie_encoder.cc |
| +++ b/webrtc/video/vie_encoder.cc |
| @@ -42,7 +42,6 @@ ViEEncoder::ViEEncoder(uint32_t number_of_cores, |
| time_of_last_frame_activity_ms_(0), |
| encoder_config_(), |
| last_observed_bitrate_bps_(0), |
| - encoder_paused_(true), |
| encoder_paused_and_dropped_frame_(false), |
| module_process_thread_(module_process_thread), |
| has_received_sli_(false), |
| @@ -62,16 +61,6 @@ ViEEncoder::~ViEEncoder() { |
| module_process_thread_->DeRegisterModule(&video_sender_); |
| } |
| -void ViEEncoder::Pause() { |
| - rtc::CritScope lock(&data_cs_); |
| - encoder_paused_ = true; |
| -} |
| - |
| -void ViEEncoder::Start() { |
| - rtc::CritScope lock(&data_cs_); |
| - encoder_paused_ = false; |
| -} |
| - |
| int32_t ViEEncoder::RegisterExternalEncoder(webrtc::VideoEncoder* encoder, |
| uint8_t pl_type, |
| bool internal_source) { |
| @@ -86,21 +75,26 @@ int32_t ViEEncoder::DeRegisterExternalEncoder(uint8_t pl_type) { |
| void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec, |
| size_t max_data_payload_length) { |
| + LOG(LS_INFO) << "SetEncoder" << video_codec.startBitrate; |
| // Setting target width and height for VPM. |
| RTC_CHECK_EQ(VPM_OK, |
| vp_->SetTargetResolution(video_codec.width, video_codec.height, |
| video_codec.maxFramerate)); |
| - |
| - // Cache codec before calling AddBitrateObserver (which calls OnBitrateUpdated |
| - // that makes use of the number of simulcast streams configured). |
| + uint32_t last_observed_bitrate_bps = 0; |
| { |
| rtc::CritScope lock(&data_cs_); |
| encoder_config_ = video_codec; |
| + last_observed_bitrate_bps = last_observed_bitrate_bps_; |
| } |
| bool success = video_sender_.RegisterSendCodec( |
| &video_codec, number_of_cores_, |
| static_cast<uint32_t>(max_data_payload_length)) == VCM_OK; |
| + |
| + // Set the currently known channel parameters to ensure that if the encoder |
| + // should currently be paused, it stays paused. |
| + video_sender_.SetChannelParameters(last_observed_bitrate_bps, 0, 0); |
|
pbos-webrtc
2016/06/16 13:16:28
Can we skip 0, 0? Maybe by storing the last observ
|
| + |
| if (!success) { |
| LOG(LS_ERROR) << "Failed to configure encoder."; |
| RTC_DCHECK(success); |
| @@ -127,9 +121,9 @@ void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec, |
| bool ViEEncoder::EncoderPaused() const { |
| // Pause video if paused by caller or as long as the network is down or the |
| // pacer queue has grown too large in buffered mode. |
| - // If the pacer queue has grown to large or the network is down, |
| + // If the pacer queue has grown too large or the network is down, |
| // last_observed_bitrate_bps_ will be 0. |
| - return encoder_paused_ || video_suspended_ || last_observed_bitrate_bps_ == 0; |
| + return video_suspended_ || last_observed_bitrate_bps_ == 0; |
| } |
| void ViEEncoder::TraceFrameDropStart() { |