/* * 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 #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 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 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