Index: remoting/protocol/webrtc_frame_scheduler.h |
diff --git a/remoting/protocol/webrtc_frame_scheduler.h b/remoting/protocol/webrtc_frame_scheduler.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3a26b92b2974e72208b5b43b3da237e67821add5 |
--- /dev/null |
+++ b/remoting/protocol/webrtc_frame_scheduler.h |
@@ -0,0 +1,52 @@ |
+// Copyright 2016 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_PROTOCOL_WEBRTC_FRAME_SCHEDULER_H_ |
+#define REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_H_ |
+ |
+#include "base/callback_forward.h" |
+#include "remoting/codec/webrtc_video_encoder.h" |
+#include "third_party/webrtc/video_encoder.h" |
+ |
+namespace remoting { |
+namespace protocol { |
+ |
+// An abstract interface for frame schedulers, which are responsible for |
+// scheduling when video frames are captured and for defining encoding |
+// parameters for each frame. |
+class WebrtcFrameScheduler { |
+ public: |
+ WebrtcFrameScheduler() {} |
+ virtual ~WebrtcFrameScheduler() {} |
+ |
+ // Starts the scheduler. |capture_callback| will be called whenever a new |
+ // frame should be captured. |
+ virtual void Start(const base::Closure& capture_callback) = 0; |
+ |
+ // Pause and resumes the scheduler. |
+ virtual void Pause(bool pause) = 0; |
+ |
+ // Requests a key frame. |
+ virtual void SetKeyFrameRequest() = 0; |
+ |
+ // Sets network bitrate estimate. |
+ virtual void SetTargetBitrate(int bitrate_kbps) = 0; |
+ |
+ // Called after |frame| has been captured to get encoding parameters for the |
+ // frame. Returns false if the frame should be dropped (e.g. when there are |
+ // no changed), true otherwise. |
+ virtual bool GetEncoderFrameParams( |
+ const webrtc::DesktopFrame& frame, |
+ WebrtcVideoEncoder::FrameParams* params_out) = 0; |
+ |
+ // Called after a frame has been encoded and passed to the sender. |
+ virtual void OnFrameEncoded( |
+ const WebrtcVideoEncoder::EncodedFrame& encoded_frame, |
+ const webrtc::EncodedImageCallback::Result& send_result) = 0; |
+}; |
+ |
+} // namespace protocol |
+} // namespace remoting |
+ |
+#endif // REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_H_ |