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

Unified Diff: remoting/protocol/webrtc_video_stream.h

Issue 2079253003: Move frame scheduling logic from WebrtcFrameScheduler to WebrtcVideoStream. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 6 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/protocol/webrtc_video_encoder_factory.cc ('k') | remoting/protocol/webrtc_video_stream.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/webrtc_video_stream.h
diff --git a/remoting/protocol/webrtc_video_stream.h b/remoting/protocol/webrtc_video_stream.h
index 59230a690ca5ea312e6dc270d7f1045be844fa69..5db4750cbfb14a2c063f06bfcfd7c9e5e408ded6 100644
--- a/remoting/protocol/webrtc_video_stream.h
+++ b/remoting/protocol/webrtc_video_stream.h
@@ -9,16 +9,17 @@
#include <memory>
+#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
+#include "base/threading/thread_checker.h"
+#include "base/timer/timer.h"
#include "remoting/codec/video_encoder.h"
#include "remoting/protocol/video_stream.h"
-#include "remoting/protocol/webrtc_frame_scheduler.h"
+#include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
namespace webrtc {
-class DesktopSize;
-class DesktopCapturer;
class MediaStreamInterface;
class PeerConnectionInterface;
class PeerConnectionFactoryInterface;
@@ -29,8 +30,10 @@ namespace remoting {
namespace protocol {
class WebrtcVideoCapturerAdapter;
+class WebrtcTransport;
-class WebrtcVideoStream : public VideoStream {
+class WebrtcVideoStream : public VideoStream,
+ public webrtc::DesktopCapturer::Callback {
public:
WebrtcVideoStream();
~WebrtcVideoStream() override;
@@ -38,7 +41,7 @@ class WebrtcVideoStream : public VideoStream {
bool Start(
std::unique_ptr<webrtc::DesktopCapturer> desktop_capturer,
WebrtcTransport* webrtc_transport,
- scoped_refptr<base::SingleThreadTaskRunner> video_encode_task_runner,
+ scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner,
std::unique_ptr<VideoEncoder> video_encoder);
// VideoStream interface.
@@ -49,11 +52,60 @@ class WebrtcVideoStream : public VideoStream {
void SetSizeCallback(const SizeCallback& size_callback) override;
private:
- scoped_refptr<webrtc::PeerConnectionInterface> connection_;
+ // webrtc::DesktopCapturer::Callback interface.
+ void OnCaptureResult(webrtc::DesktopCapturer::Result result,
+ std::unique_ptr<webrtc::DesktopFrame> frame) override;
+
+ // Starts |capture_timer_|.
+ void StartCaptureTimer();
+
+ // Called by |capture_timer_|.
+ void CaptureNextFrame();
+
+ void OnFrameEncoded(std::unique_ptr<VideoPacket> packet);
+
+ void SetKeyFrameRequest();
+ bool ClearAndGetKeyFrameRequest();
+ void SetTargetBitrate(int bitrate);
+
+ scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
scoped_refptr<webrtc::MediaStreamInterface> stream_;
- // Owned by the dummy video capturer.
- WebrtcFrameScheduler* webrtc_frame_scheduler_;
+ bool key_frame_request_ = false;
+ uint32_t target_bitrate_kbps_ = 1000; // Initial bitrate.
+
+ bool received_first_frame_request_ = false;
+
+ bool capture_pending_ = false;
+ bool encode_pending_ = false;
+
+ // Last time capture was started.
+ base::TimeTicks last_capture_started_ticks_;
+
+ webrtc::DesktopSize frame_size_;
+ webrtc::DesktopVector frame_dpi_;
+ SizeCallback size_callback_;
+
+ // Main task runner.
+ scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
+
+ // Task runner used to run |encoder_|.
+ scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner_;
+
+ // Capturer used to capture the screen.
+ std::unique_ptr<webrtc::DesktopCapturer> capturer_;
+
+ std::unique_ptr<base::RepeatingTimer> capture_timer_;
+
+ // Used to send across encoded frames.
+ WebrtcTransport* webrtc_transport_ = nullptr;
+
+ // Used to encode captured frames. Always accessed on the encode thread.
+ std::unique_ptr<VideoEncoder> encoder_;
+
+ base::ThreadChecker thread_checker_;
+
+ base::WeakPtrFactory<WebrtcVideoStream> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(WebrtcVideoStream);
};
« no previous file with comments | « remoting/protocol/webrtc_video_encoder_factory.cc ('k') | remoting/protocol/webrtc_video_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698