| Index: webrtc/modules/video_coding/video_sender.cc
|
| diff --git a/webrtc/modules/video_coding/video_sender.cc b/webrtc/modules/video_coding/video_sender.cc
|
| index b9c5ea547a40865cc18e1eb49c657504c22c31cc..8dd11a12f71fdcb04985be2c756b5dbebf8d69e4 100644
|
| --- a/webrtc/modules/video_coding/video_sender.cc
|
| +++ b/webrtc/modules/video_coding/video_sender.cc
|
| @@ -219,19 +219,23 @@ int32_t VideoSender::SetChannelParameters(uint32_t target_bitrate,
|
| if (encoder_has_internal_source) {
|
| rtc::CritScope cs(&encoder_crit_);
|
| if (_encoder) {
|
| - SetEncoderParameters(encoder_params);
|
| + SetEncoderParameters(encoder_params, encoder_has_internal_source);
|
| }
|
| }
|
|
|
| return VCM_OK;
|
| }
|
|
|
| -void VideoSender::SetEncoderParameters(EncoderParameters params) {
|
| +void VideoSender::SetEncoderParameters(EncoderParameters params,
|
| + bool has_internal_source) {
|
| // |target_bitrate == 0 | means that the network is down or the send pacer is
|
| - // full.
|
| - // TODO(perkj): Consider setting |target_bitrate| == 0 to the encoders.
|
| - // Especially if |encoder_has_internal_source_ | == true.
|
| - if (params.target_bitrate == 0)
|
| + // full. We currently only report this if the encoder has an internal source.
|
| + // If the encoder does not have an internal source, higher levels are expected
|
| + // to not call AddVideoFrame. We do this since its unclear how current
|
| + // encoder implementations behave when given a zero target bitrate.
|
| + // TODO(perkj): Make sure all known encoder implementations handle zero
|
| + // target bitrate and remove this check.
|
| + if (!has_internal_source && params.target_bitrate == 0)
|
| return;
|
|
|
| if (params.input_frame_rate == 0) {
|
| @@ -258,15 +262,17 @@ int32_t VideoSender::AddVideoFrame(const VideoFrame& videoFrame,
|
| const CodecSpecificInfo* codecSpecificInfo) {
|
| EncoderParameters encoder_params;
|
| std::vector<FrameType> next_frame_types;
|
| + bool encoder_has_internal_source = false;
|
| {
|
| rtc::CritScope lock(¶ms_crit_);
|
| encoder_params = encoder_params_;
|
| next_frame_types = next_frame_types_;
|
| + encoder_has_internal_source = encoder_has_internal_source_;
|
| }
|
| rtc::CritScope lock(&encoder_crit_);
|
| if (_encoder == nullptr)
|
| return VCM_UNINITIALIZED;
|
| - SetEncoderParameters(encoder_params);
|
| + SetEncoderParameters(encoder_params, encoder_has_internal_source);
|
| if (_mediaOpt.DropFrame()) {
|
| LOG(LS_VERBOSE) << "Drop Frame "
|
| << "target bitrate " << encoder_params.target_bitrate
|
|
|