fake_desktop_capturer.cc (2764B)
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 <memory> 14 #include <utility> 15 16 #include "modules/desktop_capture/desktop_capture_types.h" 17 #include "modules/desktop_capture/desktop_capturer.h" 18 #include "modules/desktop_capture/desktop_frame.h" 19 #include "modules/desktop_capture/desktop_frame_generator.h" 20 #include "modules/desktop_capture/shared_memory.h" 21 22 namespace webrtc { 23 24 FakeDesktopCapturer::FakeDesktopCapturer() = default; 25 FakeDesktopCapturer::~FakeDesktopCapturer() = default; 26 27 void FakeDesktopCapturer::set_result(DesktopCapturer::Result result) { 28 result_ = result; 29 } 30 31 int FakeDesktopCapturer::num_frames_captured() const { 32 return num_frames_captured_; 33 } 34 35 int FakeDesktopCapturer::num_capture_attempts() const { 36 return num_capture_attempts_; 37 } 38 39 // Uses the `generator` provided as DesktopFrameGenerator, FakeDesktopCapturer 40 // does 41 // not take the ownership of `generator`. 42 void FakeDesktopCapturer::set_frame_generator( 43 DesktopFrameGenerator* generator) { 44 generator_ = generator; 45 } 46 47 void FakeDesktopCapturer::Start(DesktopCapturer::Callback* callback) { 48 callback_ = callback; 49 } 50 51 void FakeDesktopCapturer::CaptureFrame() { 52 num_capture_attempts_++; 53 if (generator_) { 54 if (result_ != DesktopCapturer::Result::SUCCESS) { 55 callback_->OnCaptureResult(result_, nullptr); 56 return; 57 } 58 59 std::unique_ptr<DesktopFrame> frame( 60 generator_->GetNextFrame(shared_memory_factory_.get())); 61 if (frame) { 62 num_frames_captured_++; 63 callback_->OnCaptureResult(result_, std::move(frame)); 64 } else { 65 callback_->OnCaptureResult(DesktopCapturer::Result::ERROR_TEMPORARY, 66 nullptr); 67 } 68 return; 69 } 70 callback_->OnCaptureResult(DesktopCapturer::Result::ERROR_PERMANENT, nullptr); 71 } 72 73 void FakeDesktopCapturer::SetSharedMemoryFactory( 74 std::unique_ptr<SharedMemoryFactory> shared_memory_factory) { 75 shared_memory_factory_ = std::move(shared_memory_factory); 76 } 77 78 bool FakeDesktopCapturer::GetSourceList(DesktopCapturer::SourceList* sources) { 79 sources->push_back({kWindowId, 1, "A-Fake-DesktopCapturer-Window"}); 80 sources->push_back({kScreenId, 1}); 81 return true; 82 } 83 84 bool FakeDesktopCapturer::SelectSource(DesktopCapturer::SourceId id) { 85 return id == kWindowId || id == kScreenId || id == kFullDesktopScreenId; 86 } 87 88 } // namespace webrtc