Index: remoting/host/video_scheduler.cc |
diff --git a/remoting/host/video_scheduler.cc b/remoting/host/video_scheduler.cc |
index e6cead840b6641272b2e6d9a932c53d3df1cb476..41c3dccf098258643c6e6b6a8a54f2d35b1960ff 100644 |
--- a/remoting/host/video_scheduler.cc |
+++ b/remoting/host/video_scheduler.cc |
@@ -31,28 +31,30 @@ namespace remoting { |
// TODO(hclam): Move this value to CaptureScheduler. |
static const int kMaxPendingCaptures = 2; |
-// static |
-scoped_refptr<VideoScheduler> VideoScheduler::Create( |
+VideoScheduler::VideoScheduler( |
scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, |
scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner, |
scoped_refptr<base::SingleThreadTaskRunner> network_task_runner, |
scoped_ptr<media::ScreenCapturer> capturer, |
scoped_ptr<VideoEncoder> encoder, |
protocol::CursorShapeStub* cursor_stub, |
- protocol::VideoStub* video_stub) { |
- DCHECK(network_task_runner->BelongsToCurrentThread()); |
- DCHECK(capturer); |
- DCHECK(encoder); |
- DCHECK(cursor_stub); |
- DCHECK(video_stub); |
- |
- scoped_refptr<VideoScheduler> scheduler = new VideoScheduler( |
- capture_task_runner, encode_task_runner, network_task_runner, |
- capturer.Pass(), encoder.Pass(), cursor_stub, video_stub); |
- capture_task_runner->PostTask( |
- FROM_HERE, base::Bind(&VideoScheduler::StartOnCaptureThread, scheduler)); |
- |
- return scheduler; |
+ protocol::VideoStub* video_stub) |
+ : capture_task_runner_(capture_task_runner), |
+ encode_task_runner_(encode_task_runner), |
+ network_task_runner_(network_task_runner), |
+ capturer_(capturer.Pass()), |
+ encoder_(encoder.Pass()), |
+ cursor_stub_(cursor_stub), |
+ video_stub_(video_stub), |
+ pending_captures_(0), |
+ did_skip_frame_(false), |
+ is_paused_(false), |
+ sequence_number_(0) { |
+ DCHECK(network_task_runner_->BelongsToCurrentThread()); |
+ DCHECK(capturer_); |
+ DCHECK(encoder_); |
+ DCHECK(cursor_stub_); |
+ DCHECK(video_stub_); |
} |
// Public methods -------------------------------------------------------------- |
@@ -102,6 +104,13 @@ void VideoScheduler::OnCursorShapeChanged( |
base::Passed(&cursor_proto))); |
} |
+void VideoScheduler::Start() { |
+ DCHECK(network_task_runner_->BelongsToCurrentThread()); |
+ |
+ capture_task_runner_->PostTask( |
+ FROM_HERE, base::Bind(&VideoScheduler::StartOnCaptureThread, this)); |
+} |
+ |
void VideoScheduler::Stop() { |
DCHECK(network_task_runner_->BelongsToCurrentThread()); |
@@ -125,7 +134,7 @@ void VideoScheduler::Pause(bool pause) { |
is_paused_ = pause; |
// Restart captures if we're resuming and there are none scheduled. |
- if (!is_paused_ && !capture_timer_->IsRunning()) |
+ if (!is_paused_ && capture_timer_ && !capture_timer_->IsRunning()) |
CaptureNextFrame(); |
} |
} |
@@ -144,27 +153,6 @@ void VideoScheduler::UpdateSequenceNumber(int64 sequence_number) { |
// Private methods ----------------------------------------------------------- |
-VideoScheduler::VideoScheduler( |
- scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> network_task_runner, |
- scoped_ptr<media::ScreenCapturer> capturer, |
- scoped_ptr<VideoEncoder> encoder, |
- protocol::CursorShapeStub* cursor_stub, |
- protocol::VideoStub* video_stub) |
- : capture_task_runner_(capture_task_runner), |
- encode_task_runner_(encode_task_runner), |
- network_task_runner_(network_task_runner), |
- capturer_(capturer.Pass()), |
- encoder_(encoder.Pass()), |
- cursor_stub_(cursor_stub), |
- video_stub_(video_stub), |
- pending_captures_(0), |
- did_skip_frame_(false), |
- is_paused_(false), |
- sequence_number_(0) { |
-} |
- |
VideoScheduler::~VideoScheduler() { |
} |
@@ -172,6 +160,7 @@ VideoScheduler::~VideoScheduler() { |
void VideoScheduler::StartOnCaptureThread() { |
DCHECK(capture_task_runner_->BelongsToCurrentThread()); |
+ DCHECK(!capture_timer_); |
// Start the capturer and let it notify us if cursor shape changes. |
capturer_->Start(this); |