Chromium Code Reviews| Index: media/cast/sender/video_sender.cc |
| diff --git a/media/cast/sender/video_sender.cc b/media/cast/sender/video_sender.cc |
| index 598e0d3a98906e7234d0fba149a165522df5caf0..7f72038890ac9a93354085eaf2fe1d705d8464c8 100644 |
| --- a/media/cast/sender/video_sender.cc |
| +++ b/media/cast/sender/video_sender.cc |
| @@ -22,6 +22,20 @@ namespace cast { |
| const int kNumAggressiveReportsSentAtStart = 100; |
| const int kMinSchedulingDelayMs = 1; |
| +namespace { |
| + |
| +// Returns a fixed bitrate value when external video encoder is used. |
| +// Some hardware encoder shows bad behavior if we set the bitrate too |
| +// frequently, e.g. quality drop, not abiding by target bitrate, etc. |
| +// See details: crbug.com/392086. |
| +size_t GetFixedBitrate(const VideoSenderConfig& video_config) { |
| + if (!video_config.use_external_encoder) |
| + return 0; |
| + return (video_config.min_bitrate + video_config.max_bitrate) / 2; |
| +} |
| + |
| +} // namespace |
| + |
| VideoSender::VideoSender( |
| scoped_refptr<CastEnvironment> cast_environment, |
| const VideoSenderConfig& video_config, |
| @@ -40,6 +54,7 @@ VideoSender::VideoSender( |
| 1 + static_cast<int>(target_playout_delay_ * |
| video_config.max_frame_rate / |
| base::TimeDelta::FromSeconds(1)))), |
| + fixed_bitrate_(GetFixedBitrate(video_config)), |
| num_aggressive_rtcp_reports_sent_(0), |
| frames_in_encoder_(0), |
| last_sent_frame_id_(0), |
| @@ -117,10 +132,18 @@ void VideoSender::InsertRawVideoFrame( |
| return; |
| } |
| - uint32 bitrate = congestion_control_.GetBitrate( |
| - capture_time + target_playout_delay_, target_playout_delay_); |
| - |
| - video_encoder_->SetBitRate(bitrate); |
| + uint32 bitrate = fixed_bitrate_; |
|
miu
2014/08/05 21:52:07
nit/bike-shedding: How about killing the extra |bi
Alpha Left Google
2014/08/06 01:24:54
bitrate is used in line 153.
|
| + if (!bitrate) { |
| + bitrate = congestion_control_.GetBitrate( |
| + capture_time + target_playout_delay_, target_playout_delay_); |
| + DCHECK(bitrate); |
| + video_encoder_->SetBitRate(bitrate); |
| + } else if (last_send_time_.is_null()) { |
| + // Set the fixed bitrate value to codec until a frame is sent. We might |
| + // set this value a couple times at the very beginning of the stream but |
| + // it is not harmful. |
| + video_encoder_->SetBitRate(bitrate); |
| + } |
| if (video_encoder_->EncodeVideoFrame( |
| video_frame, |