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

Side by Side Diff: remoting/host/screen_capturer_proxy.cc

Issue 883673004: Cleanup VideoFramePump. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@rename_scheduler
Patch Set: Created 5 years, 10 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "remoting/host/screen_capturer_proxy.h"
6
7 #include "base/bind.h"
8 #include "base/location.h"
9 #include "base/single_thread_task_runner.h"
10 #include "remoting/proto/control.pb.h"
11 #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
12 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
13 #include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
14
15 namespace remoting {
16
17 class ScreenCapturerProxy::Core : public webrtc::DesktopCapturer::Callback {
Wez 2015/02/11 01:05:07 nit: You could make this class purely a DesktopCap
Sergey Ulanov 2015/02/11 19:21:35 the capturer and the callback would still need to
18 public:
19 Core(base::WeakPtr<ScreenCapturerProxy> proxy,
20 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
21 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
22 scoped_ptr<webrtc::DesktopCapturer> capturer);
23 ~Core();
24
25 void Start();
26 void Capture();
27
28 private:
29 // webrtc::DesktopCapturer::Callback implementation.
30 webrtc::SharedMemory* CreateSharedMemory(size_t size) override;
31 void OnCaptureCompleted(webrtc::DesktopFrame* frame) override;
32
33
Wez 2015/02/11 01:05:07 nit: Duplicate blank line?
Sergey Ulanov 2015/02/11 19:21:35 Done.
34 base::WeakPtr<ScreenCapturerProxy> proxy_;
35 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_;
36 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner_;
37 scoped_ptr<webrtc::DesktopCapturer> capturer_;
38
39 DISALLOW_COPY_AND_ASSIGN(Core);
40 };
41
42 ScreenCapturerProxy::Core::Core(
43 base::WeakPtr<ScreenCapturerProxy> proxy,
44 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
45 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
46 scoped_ptr<webrtc::DesktopCapturer> capturer)
47 : proxy_(proxy),
48 network_task_runner_(network_task_runner),
49 capture_task_runner_(capture_task_runner),
50 capturer_(capturer.Pass()) {
51 }
52
53 void ScreenCapturerProxy::Core::Start() {
54 DCHECK(capture_task_runner_->BelongsToCurrentThread());
55
56 capturer_->Start(this);
57 }
58
59 ScreenCapturerProxy::Core::~Core() {
Wez 2015/02/11 01:05:07 nit: This seems to be in the wrong order wrt Start
Sergey Ulanov 2015/02/11 19:21:35 Done.
60 DCHECK(capture_task_runner_->BelongsToCurrentThread());
61 }
62
63 void ScreenCapturerProxy::Core::Capture() {
64 DCHECK(capture_task_runner_->BelongsToCurrentThread());
65
66 capturer_->Capture(webrtc::DesktopRegion());
67 }
68
69 webrtc::SharedMemory* ScreenCapturerProxy::Core::CreateSharedMemory(
70 size_t size) {
71 return nullptr;
72 }
73
74 void ScreenCapturerProxy::Core::OnCaptureCompleted(
75 webrtc::DesktopFrame* frame) {
76 DCHECK(capture_task_runner_->BelongsToCurrentThread());
77
78 network_task_runner_->PostTask(
79 FROM_HERE, base::Bind(&ScreenCapturerProxy::OnFrameCaptured, proxy_,
80 base::Passed(make_scoped_ptr(frame))));
81 }
Wez 2015/02/11 01:05:07 nit: Missing blank line.
Sergey Ulanov 2015/02/11 19:21:35 Done.
82 ScreenCapturerProxy::ScreenCapturerProxy(
83 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
84 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
85 scoped_ptr<webrtc::DesktopCapturer> capturer)
86 : network_task_runner_(network_task_runner),
87 capture_task_runner_(capture_task_runner),
88 weak_factory_(this) {
89 DCHECK(network_task_runner_->BelongsToCurrentThread());
90
91 core_.reset(new Core(weak_factory_.GetWeakPtr(), network_task_runner,
92 capture_task_runner, capturer.Pass()));
93 }
94
95 void ScreenCapturerProxy::Init(
96 const FrameCapturedCallback& frame_captured_callback) {
97 DCHECK(network_task_runner_->BelongsToCurrentThread());
98
99 frame_captured_callback_ = frame_captured_callback;
100
101 capture_task_runner_->PostTask(
102 FROM_HERE, base::Bind(&Core::Start, base::Unretained(core_.get())));
103 }
104
105 ScreenCapturerProxy::~ScreenCapturerProxy() {
106 DCHECK(network_task_runner_->BelongsToCurrentThread());
107
108 capture_task_runner_->DeleteSoon(FROM_HERE, core_.release());
109 }
110
111 void ScreenCapturerProxy::Capture() {
112 DCHECK(network_task_runner_->BelongsToCurrentThread());
113
114 // Start() must be called before Capture().
115 DCHECK(!frame_captured_callback_.is_null());
116
117 capture_task_runner_->PostTask(
118 FROM_HERE, base::Bind(&Core::Capture, base::Unretained(core_.get())));
119 }
120
121 void ScreenCapturerProxy::OnFrameCaptured(
122 scoped_ptr<webrtc::DesktopFrame> frame) {
123 DCHECK(network_task_runner_->BelongsToCurrentThread());
124
125 frame_captured_callback_.Run(frame.Pass());
126 }
127
128 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698