Chromium Code Reviews| Index: remoting/protocol/webrtc_frame_scheduler_simple.cc |
| diff --git a/remoting/protocol/webrtc_frame_scheduler_simple.cc b/remoting/protocol/webrtc_frame_scheduler_simple.cc |
| index 336276d6609e20169c69af3b4aa86f95ad614a83..6b1c706392b3d7b5a50b24fefba53ee139204045 100644 |
| --- a/remoting/protocol/webrtc_frame_scheduler_simple.cc |
| +++ b/remoting/protocol/webrtc_frame_scheduler_simple.cc |
| @@ -64,8 +64,7 @@ WebrtcFrameSchedulerSimple::~WebrtcFrameSchedulerSimple() {} |
| void WebrtcFrameSchedulerSimple::OnKeyFrameRequested() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| key_frame_request_ = true; |
| - if (!capture_timer_.IsRunning()) |
| - ScheduleNextFrame(base::TimeTicks::Now()); |
| + ScheduleNextFrame(base::TimeTicks::Now()); |
| } |
| void WebrtcFrameSchedulerSimple::OnChannelParameters(int packet_loss, |
| @@ -109,6 +108,7 @@ bool WebrtcFrameSchedulerSimple::GetEncoderFrameParams( |
| if (frame.updated_region().is_empty() && !top_off_is_active_ && |
| !key_frame_request_) { |
| + frame_pending_ = false; |
| ScheduleNextFrame(now); |
| return false; |
| } |
| @@ -157,6 +157,8 @@ void WebrtcFrameSchedulerSimple::OnFrameEncoded( |
| const WebrtcVideoEncoder::EncodedFrame& encoded_frame, |
| const webrtc::EncodedImageCallback::Result& send_result) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| + DCHECK(frame_pending_); |
| + frame_pending_ = false; |
| base::TimeTicks now = base::TimeTicks::Now(); |
| pacing_bucket_.RefillOrSpill(encoded_frame.data.size(), now); |
| @@ -179,8 +181,10 @@ void WebrtcFrameSchedulerSimple::ScheduleNextFrame(base::TimeTicks now) { |
| // Don't capture frames when paused or target bitrate is 0 or there is |
| // no capture callback set. |
|
Jamie
2016/10/18 22:40:26
Update this comment. As written now, it's just an
Sergey Ulanov
2016/10/18 23:11:02
Removed it.
|
| - if (paused_ || pacing_bucket_.rate() == 0 || capture_callback_.is_null()) |
| + if (paused_ || pacing_bucket_.rate() == 0 || capture_callback_.is_null() || |
| + frame_pending_) { |
| return; |
| + } |
| // If this is not the first frame then capture next frame after the previous |
| // one has finished sending. |
| @@ -205,8 +209,9 @@ void WebrtcFrameSchedulerSimple::ScheduleNextFrame(base::TimeTicks now) { |
| void WebrtcFrameSchedulerSimple::CaptureNextFrame() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| - |
| + DCHECK(!frame_pending_); |
| last_capture_started_time_ = base::TimeTicks::Now(); |
| + frame_pending_ = true; |
| capture_callback_.Run(); |
| } |