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

Side by Side Diff: remoting/host/desktop_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/desktop_capturer_proxy.h"
6
7 #include "base/bind.h"
8 #include "base/location.h"
9 #include "base/single_thread_task_runner.h"
10 #include "base/thread_task_runner_handle.h"
11 #include "remoting/proto/control.pb.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 DesktopCapturerProxy::Core : public base::NonThreadSafe,
18 public webrtc::DesktopCapturer::Callback {
19 public:
20 Core(base::WeakPtr<DesktopCapturerProxy> proxy,
21 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
22 scoped_ptr<webrtc::DesktopCapturer> capturer);
23 ~Core();
24
25 void Start();
26 void Capture(const webrtc::DesktopRegion& rect);
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 base::WeakPtr<DesktopCapturerProxy> proxy_;
34 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
35 scoped_ptr<webrtc::DesktopCapturer> capturer_;
36
37 DISALLOW_COPY_AND_ASSIGN(Core);
38 };
39
40 DesktopCapturerProxy::Core::Core(
41 base::WeakPtr<DesktopCapturerProxy> proxy,
42 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
43 scoped_ptr<webrtc::DesktopCapturer> capturer)
44 : proxy_(proxy),
45 caller_task_runner_(base::ThreadTaskRunnerHandle::Get()),
46 capturer_(capturer.Pass()) {
47 DetachFromThread();
48 }
49
50 DesktopCapturerProxy::Core::~Core() {
51 DCHECK(CalledOnValidThread());
52 }
53
54 void DesktopCapturerProxy::Core::Start() {
55 DCHECK(CalledOnValidThread());
56 capturer_->Start(this);
57 }
58
59 void DesktopCapturerProxy::Core::Capture(const webrtc::DesktopRegion& rect) {
60 DCHECK(CalledOnValidThread());
61
62 capturer_->Capture(rect);
63 }
64
65 webrtc::SharedMemory* DesktopCapturerProxy::Core::CreateSharedMemory(
66 size_t size) {
Wez 2015/02/12 21:59:15 nit: thread DCHECK?
Sergey Ulanov 2015/02/13 08:39:44 Done.
67 // CreateSharedMemory() call is synchronous and cannot be proxied to another
68 // thread.
69 return nullptr;
70 }
71
72 void DesktopCapturerProxy::Core::OnCaptureCompleted(
73 webrtc::DesktopFrame* frame) {
74 DCHECK(CalledOnValidThread());
75
76 caller_task_runner_->PostTask(
77 FROM_HERE, base::Bind(&DesktopCapturerProxy::OnFrameCaptured, proxy_,
78 base::Passed(make_scoped_ptr(frame))));
79 }
80
81 DesktopCapturerProxy::DesktopCapturerProxy(
82 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
83 scoped_ptr<webrtc::DesktopCapturer> capturer)
84 : capture_task_runner_(capture_task_runner),
85 weak_factory_(this) {
86 core_.reset(new Core(weak_factory_.GetWeakPtr(), capture_task_runner,
87 capturer.Pass()));
88 }
89
90 void DesktopCapturerProxy::Start(Callback* callback) {
91 DCHECK(CalledOnValidThread());
92
93 callback_ = callback;
94
95 capture_task_runner_->PostTask(
96 FROM_HERE, base::Bind(&Core::Start, base::Unretained(core_.get())));
97 }
98
99 DesktopCapturerProxy::~DesktopCapturerProxy() {
100 DCHECK(CalledOnValidThread());
101
102 capture_task_runner_->DeleteSoon(FROM_HERE, core_.release());
103 }
104
105 void DesktopCapturerProxy::Capture(const webrtc::DesktopRegion& rect) {
106 DCHECK(CalledOnValidThread());
107
108 // Start() must be called before Capture().
109 DCHECK(callback_);
110
111 capture_task_runner_->PostTask(
112 FROM_HERE,
113 base::Bind(&Core::Capture, base::Unretained(core_.get()), rect));
114 }
115
116 void DesktopCapturerProxy::OnFrameCaptured(
117 scoped_ptr<webrtc::DesktopFrame> frame) {
118 DCHECK(CalledOnValidThread());
119
120 callback_->OnCaptureCompleted(frame.release());
121 }
122
123 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698