xref: /aosp_15_r20/external/webrtc/modules/desktop_capture/fake_desktop_capturer.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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)23 void FakeDesktopCapturer::set_result(DesktopCapturer::Result result) {
24   result_ = result;
25 }
26 
num_frames_captured() const27 int FakeDesktopCapturer::num_frames_captured() const {
28   return num_frames_captured_;
29 }
30 
num_capture_attempts() const31 int 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)38 void FakeDesktopCapturer::set_frame_generator(
39     DesktopFrameGenerator* generator) {
40   generator_ = generator;
41 }
42 
Start(DesktopCapturer::Callback * callback)43 void FakeDesktopCapturer::Start(DesktopCapturer::Callback* callback) {
44   callback_ = callback;
45 }
46 
CaptureFrame()47 void 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)69 void 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)74 bool 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)80 bool FakeDesktopCapturer::SelectSource(DesktopCapturer::SourceId id) {
81   return id == kWindowId || id == kScreenId || id == kFullDesktopScreenId;
82 }
83 
84 }  // namespace webrtc
85