Chromium Code Reviews| Index: media/cast/video_sender/video_sender.cc |
| diff --git a/media/cast/video_sender/video_sender.cc b/media/cast/video_sender/video_sender.cc |
| index 29859db18853226b0a775b234c79a27d00f699da..924e0135671880103eb1e668432ee789963d9a20 100644 |
| --- a/media/cast/video_sender/video_sender.cc |
| +++ b/media/cast/video_sender/video_sender.cc |
| @@ -65,6 +65,7 @@ VideoSender::VideoSender( |
| duplicate_ack_(0), |
| last_skip_count_(0), |
| current_requested_bitrate_(video_config.start_bitrate), |
| + current_bitrate_divider_(1), |
| congestion_control_(cast_environment->Clock(), |
| video_config.congestion_control_back_off, |
| video_config.max_bitrate, |
| @@ -184,7 +185,8 @@ void VideoSender::SendEncodedVideoFrameMainThread( |
| cast_environment_->Logging()->InsertEncodedFrameEvent( |
| last_send_time_, kVideoFrameEncoded, encoded_frame->rtp_timestamp, |
| frame_id, static_cast<int>(encoded_frame->data.size()), |
| - encoded_frame->key_frame, current_requested_bitrate_); |
| + encoded_frame->key_frame, |
| + current_requested_bitrate_ / current_bitrate_divider_); |
|
Alpha Left Google
2014/05/08 23:22:34
Can we have a helper method to compute this instea
hubbe
2014/05/08 23:44:04
Done.
|
| // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc |
| TRACE_EVENT_INSTANT1( |
| @@ -387,7 +389,7 @@ void VideoSender::OnReceivedCastFeedback(const RtcpCastMessage& cast_feedback) { |
| cast_feedback.ack_frame_id_) { |
| uint32 new_bitrate = 0; |
| if (congestion_control_.OnAck(rtt, &new_bitrate)) { |
| - video_encoder_->SetBitRate(new_bitrate); |
| + video_encoder_->SetBitRate(new_bitrate / current_bitrate_divider_); |
|
Alpha Left Google
2014/05/08 23:22:34
This should really be a helper method.
hubbe
2014/05/08 23:44:04
Done.
|
| current_requested_bitrate_ = new_bitrate; |
| } |
| } |
| @@ -414,7 +416,7 @@ void VideoSender::OnReceivedCastFeedback(const RtcpCastMessage& cast_feedback) { |
| false, cast_feedback.missing_frames_and_packets_); |
| uint32 new_bitrate = 0; |
| if (congestion_control_.OnNack(rtt, &new_bitrate)) { |
| - video_encoder_->SetBitRate(new_bitrate); |
| + video_encoder_->SetBitRate(new_bitrate / current_bitrate_divider_); |
|
Alpha Left Google
2014/05/08 23:22:34
Same here this should be a helper method.
hubbe
2014/05/08 23:44:04
Done.
|
| current_requested_bitrate_ = new_bitrate; |
| } |
| } |
| @@ -467,6 +469,12 @@ void VideoSender::UpdateFramesInFlight() { |
| if (frames_in_flight >= max_unacked_frames_) { |
| video_encoder_->SkipNextFrame(true); |
| return; |
| + } else if (frames_in_flight > max_unacked_frames_ * 4 / 5) { |
| + current_bitrate_divider_ = 3; |
| + } else if (frames_in_flight > max_unacked_frames_ * 2 / 3) { |
| + current_bitrate_divider_ = 2; |
| + } else { |
| + current_bitrate_divider_ = 1; |
| } |
| DCHECK(frames_in_flight <= max_unacked_frames_); |
| } |