| 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 |