Files
platform-external-webrtc/modules/desktop_capture/win/window_capturer_win_gdi.h
Austin Orion 1ad89441ae Implement Source enumeration and selection for WGC capturer
This change implements the GetSourceList and SelectSource APIs from the
DesktopCapturer interface for WindowCapturerWinWgc. No functional
changes were made as the WGC capturer is not in use yet.

I refactored the source enumeration functionality out of the GDI
capturer and into the utils file, so both of the capturers can share
the implementation.

This change also renames the window capturers to include Win in the
name, and updates some of the out dated code style.

I've tested these changes by running the related unit tests and
applying them to a Chromium enlistment and testing on
https://webrtc.github.io/samples/src/content/getusermedia/getdisplaymedia/


Bug: webrtc:9273
Change-Id: If0ca023cb13900ab2b897aec0f38333f75a1b748
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178960
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Austin Orion <auorion@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#31748}
2020-07-16 22:09:47 +00:00

77 lines
2.4 KiB
C++

/*
* Copyright (c) 2020 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.
*/
#ifndef MODULES_DESKTOP_CAPTURE_WIN_WINDOW_CAPTURER_WIN_GDI_H_
#define MODULES_DESKTOP_CAPTURE_WIN_WINDOW_CAPTURER_WIN_GDI_H_
#include <map>
#include <memory>
#include <vector>
#include "modules/desktop_capture/desktop_capture_options.h"
#include "modules/desktop_capture/desktop_capturer.h"
#include "modules/desktop_capture/win/window_capture_utils.h"
#include "modules/desktop_capture/window_finder_win.h"
namespace webrtc {
class WindowCapturerWinGdi : public DesktopCapturer {
public:
WindowCapturerWinGdi();
// Disallow copy and assign
WindowCapturerWinGdi(const WindowCapturerWinGdi&) = delete;
WindowCapturerWinGdi& operator=(const WindowCapturerWinGdi&) = delete;
~WindowCapturerWinGdi() override;
static std::unique_ptr<DesktopCapturer> CreateRawWindowCapturer(
const DesktopCaptureOptions& options);
// DesktopCapturer interface.
void Start(Callback* callback) override;
void CaptureFrame() override;
bool GetSourceList(SourceList* sources) override;
bool SelectSource(SourceId id) override;
bool FocusOnSelectedSource() override;
bool IsOccluded(const DesktopVector& pos) override;
private:
struct CaptureResults {
Result result;
std::unique_ptr<DesktopFrame> frame;
};
CaptureResults CaptureFrame(bool capture_owned_windows);
Callback* callback_ = nullptr;
// HWND and HDC for the currently selected window or nullptr if window is not
// selected.
HWND window_ = nullptr;
DesktopSize previous_size_;
WindowCaptureHelperWin window_capture_helper_;
// This map is used to avoid flickering for the case when SelectWindow() calls
// are interleaved with Capture() calls.
std::map<HWND, DesktopSize> window_size_map_;
WindowFinderWin window_finder_;
std::vector<HWND> owned_windows_;
std::unique_ptr<WindowCapturerWinGdi> owned_window_capturer_;
};
} // namespace webrtc
#endif // MODULES_DESKTOP_CAPTURE_WIN_WINDOW_CAPTURER_WIN_GDI_H_