Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(252)

Side by Side Diff: remoting/protocol/webrtc_frame_scheduler_simple.cc

Issue 2782523003: [Remoting Host] Supporting WebRTC VP9 streaming (Closed)
Patch Set: Fix Feedback Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/protocol/webrtc_frame_scheduler_simple.h" 5 #include "remoting/protocol/webrtc_frame_scheduler_simple.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "remoting/protocol/frame_stats.h" 9 #include "remoting/protocol/frame_stats.h"
10 #include "remoting/protocol/webrtc_dummy_video_encoder.h" 10 #include "remoting/protocol/webrtc_dummy_video_encoder.h"
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 WebrtcFrameSchedulerSimple::WebrtcFrameSchedulerSimple() 125 WebrtcFrameSchedulerSimple::WebrtcFrameSchedulerSimple()
126 : pacing_bucket_(LeakyBucket::kUnlimitedDepth, 0), 126 : pacing_bucket_(LeakyBucket::kUnlimitedDepth, 0),
127 frame_processing_delay_us_(kStatsWindow), 127 frame_processing_delay_us_(kStatsWindow),
128 updated_region_area_(kStatsWindow), 128 updated_region_area_(kStatsWindow),
129 weak_factory_(this) {} 129 weak_factory_(this) {}
130 130
131 WebrtcFrameSchedulerSimple::~WebrtcFrameSchedulerSimple() {} 131 WebrtcFrameSchedulerSimple::~WebrtcFrameSchedulerSimple() {}
132 132
133 void WebrtcFrameSchedulerSimple::OnKeyFrameRequested() { 133 void WebrtcFrameSchedulerSimple::OnKeyFrameRequested() {
134 DCHECK(thread_checker_.CalledOnValidThread()); 134 DCHECK(thread_checker_.CalledOnValidThread());
135 encoder_ready_ = true;
135 key_frame_request_ = true; 136 key_frame_request_ = true;
136 ScheduleNextFrame(base::TimeTicks::Now()); 137 ScheduleNextFrame(base::TimeTicks::Now());
137 } 138 }
138 139
139 void WebrtcFrameSchedulerSimple::OnChannelParameters(int packet_loss, 140 void WebrtcFrameSchedulerSimple::OnChannelParameters(int packet_loss,
140 base::TimeDelta rtt) { 141 base::TimeDelta rtt) {
141 DCHECK(thread_checker_.CalledOnValidThread()); 142 DCHECK(thread_checker_.CalledOnValidThread());
142 143
143 rtt_estimate_ = rtt; 144 rtt_estimate_ = rtt;
144 } 145 }
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 268
268 if (frame_stats) { 269 if (frame_stats) {
269 frame_stats->rtt_estimate = rtt_estimate_; 270 frame_stats->rtt_estimate = rtt_estimate_;
270 frame_stats->bandwidth_estimate_kbps = pacing_bucket_.rate() * 8 / 1000; 271 frame_stats->bandwidth_estimate_kbps = pacing_bucket_.rate() * 8 / 1000;
271 } 272 }
272 } 273 }
273 274
274 void WebrtcFrameSchedulerSimple::ScheduleNextFrame(base::TimeTicks now) { 275 void WebrtcFrameSchedulerSimple::ScheduleNextFrame(base::TimeTicks now) {
275 DCHECK(thread_checker_.CalledOnValidThread()); 276 DCHECK(thread_checker_.CalledOnValidThread());
276 277
277 if (paused_ || pacing_bucket_.rate() == 0 || capture_callback_.is_null() || 278 if (!encoder_ready_ || paused_ || pacing_bucket_.rate() == 0 ||
278 frame_pending_) { 279 capture_callback_.is_null() || frame_pending_) {
279 return; 280 return;
280 } 281 }
281 282
282 // If this is not the first frame then capture next frame after the previous 283 // If this is not the first frame then capture next frame after the previous
283 // one has finished sending. 284 // one has finished sending.
284 base::TimeDelta expected_processing_time = 285 base::TimeDelta expected_processing_time =
285 base::TimeDelta::FromMicroseconds(frame_processing_delay_us_.Max()); 286 base::TimeDelta::FromMicroseconds(frame_processing_delay_us_.Max());
286 base::TimeTicks target_capture_time = 287 base::TimeTicks target_capture_time =
287 pacing_bucket_.GetEmptyTime() - expected_processing_time; 288 pacing_bucket_.GetEmptyTime() - expected_processing_time;
288 289
(...skipping 15 matching lines...) Expand all
304 void WebrtcFrameSchedulerSimple::CaptureNextFrame() { 305 void WebrtcFrameSchedulerSimple::CaptureNextFrame() {
305 DCHECK(thread_checker_.CalledOnValidThread()); 306 DCHECK(thread_checker_.CalledOnValidThread());
306 DCHECK(!frame_pending_); 307 DCHECK(!frame_pending_);
307 last_capture_started_time_ = base::TimeTicks::Now(); 308 last_capture_started_time_ = base::TimeTicks::Now();
308 frame_pending_ = true; 309 frame_pending_ = true;
309 capture_callback_.Run(); 310 capture_callback_.Run();
310 } 311 }
311 312
312 } // namespace protocol 313 } // namespace protocol
313 } // namespace remoting 314 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/webrtc_frame_scheduler_simple.h ('k') | remoting/protocol/webrtc_transport.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698