// Copyright 2015 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef REMOTING_PROTOCOL_VIDEO_FRAME_PUMP_H_ #define REMOTING_PROTOCOL_VIDEO_FRAME_PUMP_H_ #include <stddef.h> #include <stdint.h> #include <memory> #include <vector> #include "base/memory/raw_ptr.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/proto/video.pb.h" #include "remoting/protocol/capture_scheduler.h" #include "remoting/protocol/desktop_capturer.h" #include "remoting/protocol/video_stream.h" namespace base { class SingleThreadTaskRunner; } // namespace base namespace remoting::protocol { class VideoFeedbackStub; class VideoStub; // 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 VideoStream, public webrtc::DesktopCapturer::Callback { … }; } // namespace remoting::protocol #endif // REMOTING_PROTOCOL_VIDEO_FRAME_PUMP_H_