summaryrefslogtreecommitdiffstats
path: root/remoting/host/video_scheduler.h
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-16 10:45:24 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-16 10:45:24 +0000
commitb9ed58f046141b4610c1bdc966d962d5fb95ac6b (patch)
treeb7dc10e49ea765b6ebc99985d3538a2e1363942e /remoting/host/video_scheduler.h
parentc1c88cf23606dd1ca2bfd9f57496aeec847e713f (diff)
downloadchromium_src-b9ed58f046141b4610c1bdc966d962d5fb95ac6b.zip
chromium_src-b9ed58f046141b4610c1bdc966d962d5fb95ac6b.tar.gz
chromium_src-b9ed58f046141b4610c1bdc966d962d5fb95ac6b.tar.bz2
Use webrtc::DesktopCapturer for screen capturer implementation.
Screen capturers are being moved from media/video/capture/screen to third_party/webrtc. This CL is an intermediate step in that process. Depends on https://webrtc-codereview.appspot.com/1322007/ TBR=brettw@chromium.org (third_party/webrtc dependency) Review URL: https://chromiumcodereview.appspot.com/13983010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@200504 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/host/video_scheduler.h')
-rw-r--r--remoting/host/video_scheduler.h34
1 files changed, 19 insertions, 15 deletions
diff --git a/remoting/host/video_scheduler.h b/remoting/host/video_scheduler.h
index d26c394..16f6247 100644
--- a/remoting/host/video_scheduler.h
+++ b/remoting/host/video_scheduler.h
@@ -23,7 +23,6 @@ class SingleThreadTaskRunner;
} // namespace base
namespace media {
-class ScreenCaptureData;
class ScreenCapturer;
} // namespace media
@@ -74,7 +73,8 @@ class VideoStub;
// too much CPU, or hogging the host's graphics subsystem.
class VideoScheduler : public base::RefCountedThreadSafe<VideoScheduler>,
- public media::ScreenCapturer::Delegate {
+ public webrtc::DesktopCapturer::Callback,
+ public media::ScreenCapturer::MouseShapeObserver {
public:
// Creates a VideoScheduler running capture, encode and network tasks on the
// supplied TaskRunners. Video and cursor shape updates will be pumped to
@@ -89,9 +89,11 @@ class VideoScheduler : public base::RefCountedThreadSafe<VideoScheduler>,
protocol::CursorShapeStub* cursor_stub,
protocol::VideoStub* video_stub);
- // media::ScreenCapturer::Delegate implementation.
- virtual void OnCaptureCompleted(
- scoped_refptr<media::ScreenCaptureData> capture_data) OVERRIDE;
+ // webrtc::DesktopCapturer::Callback implementation.
+ virtual webrtc::SharedMemory* CreateSharedMemory(size_t size) OVERRIDE;
+ virtual void OnCaptureCompleted(webrtc::DesktopFrame* frame) OVERRIDE;
+
+ // media::ScreenCapturer::MouseShapeObserver implementation.
virtual void OnCursorShapeChanged(
scoped_ptr<media::MouseCursorShape> cursor_shape) OVERRIDE;
@@ -119,8 +121,7 @@ class VideoScheduler : public base::RefCountedThreadSafe<VideoScheduler>,
// Starts the capturer on the capture thread.
void StartOnCaptureThread();
- // Stops scheduling frame captures on the capture thread, and posts
- // StopOnEncodeThread() to the network thread when done.
+ // Stops scheduling frame captures on the capture thread.
void StopOnCaptureThread();
// Schedules the next call to CaptureNextFrame.
@@ -147,13 +148,11 @@ class VideoScheduler : public base::RefCountedThreadSafe<VideoScheduler>,
// Encoder thread -----------------------------------------------------------
// Encode a frame, passing generated VideoPackets to SendVideoPacket().
- void EncodeFrame(scoped_refptr<media::ScreenCaptureData> capture_data);
-
- void EncodedDataAvailableCallback(scoped_ptr<VideoPacket> packet);
+ void EncodeFrame(scoped_ptr<webrtc::DesktopFrame> frame,
+ int sequence_number);
- // Used to synchronize capture and encode thread teardown, notifying the
- // network thread when done.
- void StopOnEncodeThread(scoped_ptr<media::ScreenCapturer> capturer);
+ void EncodedDataAvailableCallback(int sequence_number,
+ scoped_ptr<VideoPacket> packet);
// Task runners used by this class.
scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner_;
@@ -174,8 +173,13 @@ class VideoScheduler : public base::RefCountedThreadSafe<VideoScheduler>,
// Timer used to schedule CaptureNextFrame().
scoped_ptr<base::OneShotTimer<VideoScheduler> > capture_timer_;
- // Count the number of recordings (i.e. capture or encode) happening.
- int pending_captures_;
+ // The number of frames being processed, i.e. frames that we are currently
+ // capturing, encoding or sending. The value is capped at 2 to minimize
+ // latency.
+ int pending_frames_;
+
+ // Set when the capturer is capturing a frame.
+ bool capture_pending_;
// True if the previous scheduled capture was skipped.
bool did_skip_frame_;