| Index: remoting/host/video_scheduler.h
|
| diff --git a/remoting/host/video_scheduler.h b/remoting/host/video_scheduler.h
|
| deleted file mode 100644
|
| index 6adab1892a3e27e0d61f3e5ec93bd0ad7afe9d66..0000000000000000000000000000000000000000
|
| --- a/remoting/host/video_scheduler.h
|
| +++ /dev/null
|
| @@ -1,204 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef REMOTING_HOST_VIDEO_SCHEDULER_H_
|
| -#define REMOTING_HOST_VIDEO_SCHEDULER_H_
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/time/time.h"
|
| -#include "base/timer/timer.h"
|
| -#include "remoting/codec/video_encoder.h"
|
| -#include "remoting/proto/video.pb.h"
|
| -#include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
|
| -#include "third_party/webrtc/modules/desktop_capture/mouse_cursor_monitor.h"
|
| -
|
| -namespace base {
|
| -class SingleThreadTaskRunner;
|
| -} // namespace base
|
| -
|
| -namespace media {
|
| -class DesktopCapturer;
|
| -} // namespace media
|
| -
|
| -namespace remoting {
|
| -
|
| -class CaptureScheduler;
|
| -class CursorShapeInfo;
|
| -
|
| -namespace protocol {
|
| -class CursorShapeInfo;
|
| -class CursorShapeStub;
|
| -class VideoStub;
|
| -} // namespace protocol
|
| -
|
| -// Class responsible for scheduling frame captures from a
|
| -// webrtc::DesktopCapturer, delivering them to a VideoEncoder to encode, and
|
| -// finally passing the encoded video packets to the specified VideoStub to send
|
| -// on the network.
|
| -//
|
| -// THREADING
|
| -//
|
| -// This class is supplied TaskRunners to use for capture, encode and network
|
| -// operations. Capture, encode and network transmission tasks are interleaved
|
| -// as illustrated below:
|
| -//
|
| -// | CAPTURE ENCODE NETWORK
|
| -// | .............
|
| -// | . Capture .
|
| -// | .............
|
| -// | ............
|
| -// | . .
|
| -// | ............. . .
|
| -// | . Capture . . Encode .
|
| -// | ............. . .
|
| -// | . .
|
| -// | ............
|
| -// | ............. ............ ..........
|
| -// | . Capture . . . . Send .
|
| -// | ............. . . ..........
|
| -// | . Encode .
|
| -// | . .
|
| -// | . .
|
| -// | ............
|
| -// | Time
|
| -// v
|
| -//
|
| -// VideoScheduler would ideally schedule captures so as to saturate the slowest
|
| -// of the capture, encode and network processes. However, it also needs to
|
| -// rate-limit captures to avoid overloading the host system, either by consuming
|
| -// too much CPU, or hogging the host's graphics subsystem.
|
| -//
|
| -// TODO(sergeyu): Rename this class to VideoFramePipe.
|
| -class VideoScheduler : public base::RefCountedThreadSafe<VideoScheduler>,
|
| - public webrtc::DesktopCapturer::Callback,
|
| - public webrtc::MouseCursorMonitor::Callback {
|
| - public:
|
| - // Enables timestamps for generated frames. Used for testing.
|
| - static void EnableTimestampsForTests();
|
| -
|
| - // Creates a VideoScheduler running capture, encode and network tasks on the
|
| - // supplied TaskRunners. Video and cursor shape updates will be pumped to
|
| - // |video_stub| and |client_stub|, which must remain valid until Stop() is
|
| - // called. |capturer| is used to capture frames.
|
| - VideoScheduler(
|
| - scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
|
| - scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner,
|
| - scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
|
| - scoped_ptr<webrtc::DesktopCapturer> capturer,
|
| - scoped_ptr<webrtc::MouseCursorMonitor> mouse_cursor_monitor,
|
| - scoped_ptr<VideoEncoder> encoder,
|
| - protocol::CursorShapeStub* cursor_stub,
|
| - protocol::VideoStub* video_stub);
|
| -
|
| - // Starts scheduling frame captures.
|
| - void Start();
|
| -
|
| - // Stop scheduling frame captures. This object cannot be re-used once
|
| - // it has been stopped.
|
| - void Stop();
|
| -
|
| - // Pauses or resumes scheduling of frame captures. Pausing/resuming captures
|
| - // only affects capture scheduling and does not stop/start the capturer.
|
| - void Pause(bool pause);
|
| -
|
| - // Updates event timestamp from the last event received from the client. This
|
| - // value is sent back to the client for roundtrip latency estimates.
|
| - void SetLatestEventTimestamp(int64 latest_event_timestamp);
|
| -
|
| - // Sets whether the video encoder should be requested to encode losslessly,
|
| - // or to use a lossless color space (typically requiring higher bandwidth).
|
| - void SetLosslessEncode(bool want_lossless);
|
| - void SetLosslessColor(bool want_lossless);
|
| -
|
| - private:
|
| - friend class base::RefCountedThreadSafe<VideoScheduler>;
|
| - ~VideoScheduler() override;
|
| -
|
| - // Capturer thread ----------------------------------------------------------
|
| -
|
| - // TODO(sergeyu): Move all methods that run on the capture thread to a
|
| - // separate class and make VideoScheduler not ref-counted.
|
| -
|
| - // webrtc::DesktopCapturer::Callback implementation.
|
| - webrtc::SharedMemory* CreateSharedMemory(size_t size) override;
|
| - void OnCaptureCompleted(webrtc::DesktopFrame* frame) override;
|
| -
|
| - // webrtc::MouseCursorMonitor::Callback implementation.
|
| - void OnMouseCursor(webrtc::MouseCursor* mouse_cursor) override;
|
| - void OnMouseCursorPosition(webrtc::MouseCursorMonitor::CursorState state,
|
| - const webrtc::DesktopVector& position) override;
|
| -
|
| - // Starts the capturer on the capture thread.
|
| - void StartOnCaptureThread();
|
| -
|
| - // Stops scheduling frame captures on the capture thread.
|
| - void StopOnCaptureThread();
|
| -
|
| - // Captures next frame on the capture thread.
|
| - void CaptureNextFrameOnCaptureThread();
|
| -
|
| - // Network thread -----------------------------------------------------------
|
| -
|
| - // Captures a new frame. Called by CaptureScheduler.
|
| - void CaptureNextFrame();
|
| -
|
| - // Encodes and sends |frame|.
|
| - void EncodeAndSendFrame(scoped_ptr<webrtc::DesktopFrame> frame);
|
| -
|
| - // Sends encoded frame
|
| - void SendEncodedFrame(int64 latest_event_timestamp,
|
| - base::TimeTicks timestamp,
|
| - scoped_ptr<VideoPacket> packet);
|
| -
|
| - // Callback passed to |video_stub_| for the last packet in each frame, to
|
| - // rate-limit frame captures to network throughput.
|
| - void OnVideoPacketSent();
|
| -
|
| - // Called by |keep_alive_timer_|.
|
| - void SendKeepAlivePacket();
|
| -
|
| - // Callback for |video_stub_| called after a keep-alive packet is sent.
|
| - void OnKeepAlivePacketSent();
|
| -
|
| - // Send updated cursor shape to client.
|
| - void SendCursorShape(scoped_ptr<protocol::CursorShapeInfo> cursor_shape);
|
| -
|
| - // Task runners used by this class.
|
| - scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner_;
|
| - scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner_;
|
| - scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_;
|
| -
|
| - // Used to capture frames. Always accessed on the capture thread.
|
| - scoped_ptr<webrtc::DesktopCapturer> capturer_;
|
| -
|
| - // Used to capture mouse cursor shapes. Always accessed on the capture thread.
|
| - scoped_ptr<webrtc::MouseCursorMonitor> mouse_cursor_monitor_;
|
| -
|
| - // Used to encode captured frames. Always accessed on the encode thread.
|
| - scoped_ptr<VideoEncoder> encoder_;
|
| -
|
| - // Interfaces through which video frames and cursor shapes are passed to the
|
| - // client. These members are always accessed on the network thread.
|
| - protocol::CursorShapeStub* cursor_stub_;
|
| - protocol::VideoStub* video_stub_;
|
| -
|
| - // Timer used to ensure that we send empty keep-alive frames to the client
|
| - // even when the video stream is paused or encoder is busy.
|
| - scoped_ptr<base::DelayTimer<VideoScheduler> > keep_alive_timer_;
|
| -
|
| - // Number updated by the caller to trace performance.
|
| - int64 latest_event_timestamp_;
|
| -
|
| - scoped_ptr<CaptureScheduler> capture_scheduler_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(VideoScheduler);
|
| -};
|
| -
|
| -} // namespace remoting
|
| -
|
| -#endif // REMOTING_HOST_VIDEO_SCHEDULER_H_
|
|
|