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

Unified Diff: remoting/host/video_scheduler.h

Issue 13983010: Use webrtc::DesktopCapturer for screen capturer implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/host/screen_resolution_unittest.cc ('k') | remoting/host/video_scheduler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/video_scheduler.h
diff --git a/remoting/host/video_scheduler.h b/remoting/host/video_scheduler.h
index d26c394c38973508fbd0b2761576a426160d838d..16f624790e4fe573c138cb6e3671751a01454f4c 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_;
« no previous file with comments | « remoting/host/screen_resolution_unittest.cc ('k') | remoting/host/video_scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698