Index: remoting/host/video_frame_pump.h |
diff --git a/remoting/host/video_frame_pump.h b/remoting/host/video_frame_pump.h |
deleted file mode 100644 |
index f4542cafc0939da6f347c4738509092c15db432e..0000000000000000000000000000000000000000 |
--- a/remoting/host/video_frame_pump.h |
+++ /dev/null |
@@ -1,197 +0,0 @@ |
-// Copyright 2015 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_FRAME_PUMP_H_ |
-#define REMOTING_HOST_VIDEO_FRAME_PUMP_H_ |
- |
-#include "base/basictypes.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/memory/scoped_vector.h" |
-#include "base/threading/thread_checker.h" |
-#include "base/time/time.h" |
-#include "base/timer/timer.h" |
-#include "remoting/codec/video_encoder.h" |
-#include "remoting/host/capture_scheduler.h" |
-#include "remoting/proto/video.pb.h" |
-#include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h" |
- |
-namespace base { |
-class SingleThreadTaskRunner; |
-} // namespace base |
- |
-namespace remoting { |
- |
-namespace protocol { |
-class VideoFeedbackStub; |
-class VideoStub; |
-} // namespace protocol |
- |
-// Class responsible for scheduling frame captures from a screen capturer., |
-// 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 |
-// |
-// VideoFramePump 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. |
-class VideoFramePump : public webrtc::DesktopCapturer::Callback { |
- public: |
- // Enables timestamps for generated frames. Used for testing. |
- static void EnableTimestampsForTests(); |
- |
- // Creates a VideoFramePump running capture, encode and network tasks on the |
- // supplied TaskRunners. Video will be pumped to |video_stub|, which must |
- // outlive the pump.. |
- VideoFramePump( |
- scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner, |
- scoped_ptr<webrtc::DesktopCapturer> capturer, |
- scoped_ptr<VideoEncoder> encoder, |
- protocol::VideoStub* video_stub); |
- ~VideoFramePump() override; |
- |
- // 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); |
- |
- // Called whenever input event is received. |
- void OnInputEventReceived(int64_t 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); |
- |
- protocol::VideoFeedbackStub* video_feedback_stub() { |
- return &capture_scheduler_; |
- } |
- |
- private: |
- struct FrameTimestamps { |
- FrameTimestamps(); |
- ~FrameTimestamps(); |
- |
- // The following two fields are set only for one frame after each incoming |
- // input event. |input_event_client_timestamp| is event timestamp |
- // received from the client. |input_event_received_time| is local time when |
- // the event was received. |
- int64_t input_event_client_timestamp = -1; |
- base::TimeTicks input_event_received_time; |
- |
- base::TimeTicks capture_started_time; |
- base::TimeTicks capture_ended_time; |
- base::TimeTicks encode_started_time; |
- base::TimeTicks encode_ended_time; |
- base::TimeTicks can_send_time; |
- }; |
- |
- struct PacketWithTimestamps { |
- PacketWithTimestamps(scoped_ptr<VideoPacket> packet, |
- scoped_ptr<FrameTimestamps> timestamps); |
- ~PacketWithTimestamps(); |
- |
- scoped_ptr<VideoPacket> packet; |
- scoped_ptr<FrameTimestamps> timestamps; |
- }; |
- |
- // webrtc::DesktopCapturer::Callback interface. |
- webrtc::SharedMemory* CreateSharedMemory(size_t size) override; |
- void OnCaptureCompleted(webrtc::DesktopFrame* frame) override; |
- |
- // Callback for CaptureScheduler. |
- void CaptureNextFrame(); |
- |
- // Task running on the encoder thread to encode the |frame|. |
- static scoped_ptr<PacketWithTimestamps> EncodeFrame( |
- VideoEncoder* encoder, |
- scoped_ptr<webrtc::DesktopFrame> frame, |
- scoped_ptr<FrameTimestamps> timestamps); |
- |
- // Task called when a frame has finished encoding. |
- void OnFrameEncoded(scoped_ptr<PacketWithTimestamps> packet); |
- |
- // Sends |packet| to the client. |
- void SendPacket(scoped_ptr<PacketWithTimestamps> packet); |
- |
- // Helper called from SendPacket() to calculate timing fields in the |packet| |
- // before sending it. |
- void UpdateFrameTimers(VideoPacket* packet, FrameTimestamps* timestamps); |
- |
- // Callback passed to |video_stub_|. |
- void OnVideoPacketSent(); |
- |
- // Called by |keep_alive_timer_|. |
- void SendKeepAlivePacket(); |
- |
- // Callback for |video_stub_| called after a keep-alive packet is sent. |
- void OnKeepAlivePacketSent(); |
- |
- // Task runner used to run |encoder_|. |
- scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner_; |
- |
- // Capturer used to capture the screen. |
- scoped_ptr<webrtc::DesktopCapturer> capturer_; |
- |
- // Used to encode captured frames. Always accessed on the encode thread. |
- scoped_ptr<VideoEncoder> encoder_; |
- |
- // Interface through which video frames are passed to the client. |
- 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. |
- base::Timer keep_alive_timer_; |
- |
- // CaptureScheduler calls CaptureNextFrame() whenever a new frame needs to be |
- // captured. |
- CaptureScheduler capture_scheduler_; |
- |
- // Timestamps for the frame to be captured next. |
- scoped_ptr<FrameTimestamps> next_frame_timestamps_; |
- |
- // Timestamps for the frame that's being captured. |
- scoped_ptr<FrameTimestamps> captured_frame_timestamps_; |
- |
- bool send_pending_ = false; |
- |
- ScopedVector<PacketWithTimestamps> pending_packets_; |
- |
- base::ThreadChecker thread_checker_; |
- |
- base::WeakPtrFactory<VideoFramePump> weak_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(VideoFramePump); |
-}; |
- |
-} // namespace remoting |
- |
-#endif // REMOTING_HOST_VIDEO_FRAME_PUMP_H_ |