1 /* 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "modules/desktop_capture/fake_desktop_capturer.h" 12 13 #include <utility> 14 15 #include "modules/desktop_capture/desktop_capture_types.h" 16 #include "modules/desktop_capture/desktop_frame.h" 17 18 namespace webrtc { 19 20 FakeDesktopCapturer::FakeDesktopCapturer() = default; 21 FakeDesktopCapturer::~FakeDesktopCapturer() = default; 22 set_result(DesktopCapturer::Result result)23void FakeDesktopCapturer::set_result(DesktopCapturer::Result result) { 24 result_ = result; 25 } 26 num_frames_captured() const27int FakeDesktopCapturer::num_frames_captured() const { 28 return num_frames_captured_; 29 } 30 num_capture_attempts() const31int FakeDesktopCapturer::num_capture_attempts() const { 32 return num_capture_attempts_; 33 } 34 35 // Uses the `generator` provided as DesktopFrameGenerator, FakeDesktopCapturer 36 // does 37 // not take the ownership of `generator`. set_frame_generator(DesktopFrameGenerator * generator)38void FakeDesktopCapturer::set_frame_generator( 39 DesktopFrameGenerator* generator) { 40 generator_ = generator; 41 } 42 Start(DesktopCapturer::Callback * callback)43void FakeDesktopCapturer::Start(DesktopCapturer::Callback* callback) { 44 callback_ = callback; 45 } 46 CaptureFrame()47void FakeDesktopCapturer::CaptureFrame() { 48 num_capture_attempts_++; 49 if (generator_) { 50 if (result_ != DesktopCapturer::Result::SUCCESS) { 51 callback_->OnCaptureResult(result_, nullptr); 52 return; 53 } 54 55 std::unique_ptr<DesktopFrame> frame( 56 generator_->GetNextFrame(shared_memory_factory_.get())); 57 if (frame) { 58 num_frames_captured_++; 59 callback_->OnCaptureResult(result_, std::move(frame)); 60 } else { 61 callback_->OnCaptureResult(DesktopCapturer::Result::ERROR_TEMPORARY, 62 nullptr); 63 } 64 return; 65 } 66 callback_->OnCaptureResult(DesktopCapturer::Result::ERROR_PERMANENT, nullptr); 67 } 68 SetSharedMemoryFactory(std::unique_ptr<SharedMemoryFactory> shared_memory_factory)69void FakeDesktopCapturer::SetSharedMemoryFactory( 70 std::unique_ptr<SharedMemoryFactory> shared_memory_factory) { 71 shared_memory_factory_ = std::move(shared_memory_factory); 72 } 73 GetSourceList(DesktopCapturer::SourceList * sources)74bool FakeDesktopCapturer::GetSourceList(DesktopCapturer::SourceList* sources) { 75 sources->push_back({kWindowId, "A-Fake-DesktopCapturer-Window"}); 76 sources->push_back({kScreenId}); 77 return true; 78 } 79 SelectSource(DesktopCapturer::SourceId id)80bool FakeDesktopCapturer::SelectSource(DesktopCapturer::SourceId id) { 81 return id == kWindowId || id == kScreenId || id == kFullDesktopScreenId; 82 } 83 84 } // namespace webrtc 85