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_); |
} |