| /* |
| * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #include "modules/desktop_capture/fake_desktop_capturer.h" |
| |
| #include <utility> |
| |
| #include "modules/desktop_capture/desktop_capture_types.h" |
| #include "modules/desktop_capture/desktop_frame.h" |
| |
| namespace webrtc { |
| |
| FakeDesktopCapturer::FakeDesktopCapturer() = default; |
| FakeDesktopCapturer::~FakeDesktopCapturer() = default; |
| |
| void FakeDesktopCapturer::set_result(DesktopCapturer::Result result) { |
| result_ = result; |
| } |
| |
| int FakeDesktopCapturer::num_frames_captured() const { |
| return num_frames_captured_; |
| } |
| |
| int FakeDesktopCapturer::num_capture_attempts() const { |
| return num_capture_attempts_; |
| } |
| |
| // Uses the `generator` provided as DesktopFrameGenerator, FakeDesktopCapturer |
| // does |
| // not take the ownership of `generator`. |
| void FakeDesktopCapturer::set_frame_generator( |
| DesktopFrameGenerator* generator) { |
| generator_ = generator; |
| } |
| |
| void FakeDesktopCapturer::Start(DesktopCapturer::Callback* callback) { |
| callback_ = callback; |
| } |
| |
| void FakeDesktopCapturer::CaptureFrame() { |
| num_capture_attempts_++; |
| if (generator_) { |
| if (result_ != DesktopCapturer::Result::SUCCESS) { |
| callback_->OnCaptureResult(result_, nullptr); |
| return; |
| } |
| |
| std::unique_ptr<DesktopFrame> frame( |
| generator_->GetNextFrame(shared_memory_factory_.get())); |
| if (frame) { |
| num_frames_captured_++; |
| callback_->OnCaptureResult(result_, std::move(frame)); |
| } else { |
| callback_->OnCaptureResult(DesktopCapturer::Result::ERROR_TEMPORARY, |
| nullptr); |
| } |
| return; |
| } |
| callback_->OnCaptureResult(DesktopCapturer::Result::ERROR_PERMANENT, nullptr); |
| } |
| |
| void FakeDesktopCapturer::SetSharedMemoryFactory( |
| std::unique_ptr<SharedMemoryFactory> shared_memory_factory) { |
| shared_memory_factory_ = std::move(shared_memory_factory); |
| } |
| |
| bool FakeDesktopCapturer::GetSourceList(DesktopCapturer::SourceList* sources) { |
| sources->push_back({kWindowId, "A-Fake-DesktopCapturer-Window"}); |
| sources->push_back({kScreenId}); |
| return true; |
| } |
| |
| bool FakeDesktopCapturer::SelectSource(DesktopCapturer::SourceId id) { |
| return id == kWindowId || id == kScreenId || id == kFullDesktopScreenId; |
| } |
| |
| } // namespace webrtc |