webrtc_m130/modules/desktop_capture/screen_capturer_win.cc
henrika b9313b9584 Removes usage of the Magnifier API on Windows
This CL removes the usage of the Magnifier screen capture API on
Windows. The idea is to remove the actual source in a second step
once this change lands.

Bug: chromium:1428341
Change-Id: Id2cb25632c7edbea2cf527959b14b27ee00b0e56
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/301164
Commit-Queue: Henrik Andreassson <henrika@webrtc.org>
Reviewed-by: Alexander Cooper <alcooper@chromium.org>
Cr-Commit-Position: refs/heads/main@{#39856}
2023-04-13 20:27:24 +00:00

60 lines
2.1 KiB
C++

/*
* Copyright (c) 2013 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 <memory>
#include <utility>
#include "modules/desktop_capture/blank_detector_desktop_capturer_wrapper.h"
#include "modules/desktop_capture/desktop_capture_options.h"
#include "modules/desktop_capture/desktop_capturer.h"
#include "modules/desktop_capture/fallback_desktop_capturer_wrapper.h"
#include "modules/desktop_capture/rgba_color.h"
#include "modules/desktop_capture/win/screen_capturer_win_directx.h"
#include "modules/desktop_capture/win/screen_capturer_win_gdi.h"
namespace webrtc {
namespace {
std::unique_ptr<DesktopCapturer> CreateScreenCapturerWinDirectx(
const DesktopCaptureOptions& options) {
std::unique_ptr<DesktopCapturer> capturer(
new ScreenCapturerWinDirectx(options));
capturer.reset(new BlankDetectorDesktopCapturerWrapper(
std::move(capturer), RgbaColor(0, 0, 0, 0)));
return capturer;
}
} // namespace
// static
std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer(
const DesktopCaptureOptions& options) {
// Default capturer if no options are enabled is GDI.
std::unique_ptr<DesktopCapturer> capturer(new ScreenCapturerWinGdi(options));
// If DirectX is enabled use it as main capturer with GDI as fallback.
if (options.allow_directx_capturer()) {
// `dxgi_duplicator_controller` should be alive in this scope to ensure it
// won't unload DxgiDuplicatorController.
auto dxgi_duplicator_controller = DxgiDuplicatorController::Instance();
if (ScreenCapturerWinDirectx::IsSupported()) {
capturer.reset(new FallbackDesktopCapturerWrapper(
CreateScreenCapturerWinDirectx(options), std::move(capturer)));
return capturer;
}
}
// Use GDI as default capturer without any fallback solution.
return capturer;
}
} // namespace webrtc