OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/host/desktop_capturer_proxy.h" | 5 #include "remoting/host/desktop_capturer_proxy.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 22 matching lines...) Expand all Loading... |
33 | 33 |
34 void CreateCapturer(const webrtc::DesktopCaptureOptions& options); | 34 void CreateCapturer(const webrtc::DesktopCaptureOptions& options); |
35 | 35 |
36 void Start(); | 36 void Start(); |
37 void SetSharedMemoryFactory( | 37 void SetSharedMemoryFactory( |
38 std::unique_ptr<webrtc::SharedMemoryFactory> shared_memory_factory); | 38 std::unique_ptr<webrtc::SharedMemoryFactory> shared_memory_factory); |
39 void Capture(const webrtc::DesktopRegion& rect); | 39 void Capture(const webrtc::DesktopRegion& rect); |
40 | 40 |
41 private: | 41 private: |
42 // webrtc::DesktopCapturer::Callback implementation. | 42 // webrtc::DesktopCapturer::Callback implementation. |
43 void OnCaptureCompleted(webrtc::DesktopFrame* frame) override; | 43 void OnCaptureResult(webrtc::DesktopCapturer::Result result, |
| 44 std::unique_ptr<webrtc::DesktopFrame> frame) override; |
44 | 45 |
45 base::ThreadChecker thread_checker_; | 46 base::ThreadChecker thread_checker_; |
46 | 47 |
47 base::WeakPtr<DesktopCapturerProxy> proxy_; | 48 base::WeakPtr<DesktopCapturerProxy> proxy_; |
48 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_; | 49 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_; |
49 std::unique_ptr<webrtc::DesktopCapturer> capturer_; | 50 std::unique_ptr<webrtc::DesktopCapturer> capturer_; |
50 | 51 |
51 DISALLOW_COPY_AND_ASSIGN(Core); | 52 DISALLOW_COPY_AND_ASSIGN(Core); |
52 }; | 53 }; |
53 | 54 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 if (capturer_) { | 87 if (capturer_) { |
87 capturer_->SetSharedMemoryFactory(std::move(shared_memory_factory)); | 88 capturer_->SetSharedMemoryFactory(std::move(shared_memory_factory)); |
88 } | 89 } |
89 } | 90 } |
90 | 91 |
91 void DesktopCapturerProxy::Core::Capture(const webrtc::DesktopRegion& rect) { | 92 void DesktopCapturerProxy::Core::Capture(const webrtc::DesktopRegion& rect) { |
92 DCHECK(thread_checker_.CalledOnValidThread()); | 93 DCHECK(thread_checker_.CalledOnValidThread()); |
93 if (capturer_) { | 94 if (capturer_) { |
94 capturer_->Capture(rect); | 95 capturer_->Capture(rect); |
95 } else { | 96 } else { |
96 OnCaptureCompleted(nullptr); | 97 OnCaptureResult(webrtc::DesktopCapturer::Result::ERROR_PERMANENT, nullptr); |
97 } | 98 } |
98 } | 99 } |
99 | 100 |
100 void DesktopCapturerProxy::Core::OnCaptureCompleted( | 101 void DesktopCapturerProxy::Core::OnCaptureResult( |
101 webrtc::DesktopFrame* frame) { | 102 webrtc::DesktopCapturer::Result result, |
| 103 std::unique_ptr<webrtc::DesktopFrame> frame) { |
102 DCHECK(thread_checker_.CalledOnValidThread()); | 104 DCHECK(thread_checker_.CalledOnValidThread()); |
103 | 105 |
104 caller_task_runner_->PostTask( | 106 caller_task_runner_->PostTask( |
105 FROM_HERE, base::Bind(&DesktopCapturerProxy::OnFrameCaptured, proxy_, | 107 FROM_HERE, base::Bind(&DesktopCapturerProxy::OnFrameCaptured, proxy_, |
106 base::Passed(base::WrapUnique(frame)))); | 108 result, base::Passed(&frame))); |
107 } | 109 } |
108 | 110 |
109 DesktopCapturerProxy::DesktopCapturerProxy( | 111 DesktopCapturerProxy::DesktopCapturerProxy( |
110 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, | 112 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, |
111 const webrtc::DesktopCaptureOptions& options) | 113 const webrtc::DesktopCaptureOptions& options) |
112 : capture_task_runner_(capture_task_runner), weak_factory_(this) { | 114 : capture_task_runner_(capture_task_runner), weak_factory_(this) { |
113 core_.reset(new Core(weak_factory_.GetWeakPtr())); | 115 core_.reset(new Core(weak_factory_.GetWeakPtr())); |
114 capture_task_runner_->PostTask( | 116 capture_task_runner_->PostTask( |
115 FROM_HERE, base::Bind(&Core::CreateCapturer, | 117 FROM_HERE, base::Bind(&Core::CreateCapturer, |
116 base::Unretained(core_.get()), options)); | 118 base::Unretained(core_.get()), options)); |
(...skipping 28 matching lines...) Expand all Loading... |
145 | 147 |
146 // Start() must be called before Capture(). | 148 // Start() must be called before Capture(). |
147 DCHECK(callback_); | 149 DCHECK(callback_); |
148 | 150 |
149 capture_task_runner_->PostTask( | 151 capture_task_runner_->PostTask( |
150 FROM_HERE, | 152 FROM_HERE, |
151 base::Bind(&Core::Capture, base::Unretained(core_.get()), rect)); | 153 base::Bind(&Core::Capture, base::Unretained(core_.get()), rect)); |
152 } | 154 } |
153 | 155 |
154 void DesktopCapturerProxy::OnFrameCaptured( | 156 void DesktopCapturerProxy::OnFrameCaptured( |
| 157 webrtc::DesktopCapturer::Result result, |
155 std::unique_ptr<webrtc::DesktopFrame> frame) { | 158 std::unique_ptr<webrtc::DesktopFrame> frame) { |
156 DCHECK(thread_checker_.CalledOnValidThread()); | 159 DCHECK(thread_checker_.CalledOnValidThread()); |
157 | 160 |
158 callback_->OnCaptureCompleted(frame.release()); | 161 callback_->OnCaptureResult(result, std::move(frame)); |
159 } | 162 } |
160 | 163 |
161 } // namespace remoting | 164 } // namespace remoting |
OLD | NEW |