Add support for screen sharing with PipeWire on Wayland
Currently, when users want to use the screen sharing and are using the Wayland display server (the default on Fedora distribution), then it doesn't work, because the WebRTC only includes the X11 implementation. This change adds the support by using the PipeWire multimedia server. The PipeWire implementation in WebRTC stays in screen-capturer-pipewire.c and is guarded by the rtc_use_pipewire build flag that is automatically enabled on Linux. More information are included in the relevant commit messages. Tested on the current Chromium master and Firefox. The sysroot changes are requested in: https://chromium-review.googlesource.com/c/chromium/src/+/1258174 Co-authored-by: Jan Grulich <grulja@gmail.com> Co-authored-by: Eike Rathke <erathke@redhat.com> Change-Id: I212074a4bc437b99a77bf383266026c5bfae7c4a BUG=chromium:682122 Change-Id: I212074a4bc437b99a77bf383266026c5bfae7c4a Reviewed-on: https://webrtc-review.googlesource.com/c/103504 Commit-Queue: Patrik Höglund <phoglund@webrtc.org> Reviewed-by: Patrik Höglund <phoglund@webrtc.org> Reviewed-by: Brave Yao <braveyao@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25461}
This commit is contained in:
43
modules/desktop_capture/linux/x_atom_cache.h
Normal file
43
modules/desktop_capture/linux/x_atom_cache.h
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2017 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_LINUX_X_ATOM_CACHE_H_
|
||||
#define MODULES_DESKTOP_CAPTURE_LINUX_X_ATOM_CACHE_H_
|
||||
|
||||
#include <X11/Xatom.h>
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
// A cache of Atom. Each Atom object is created on demand.
|
||||
class XAtomCache final {
|
||||
public:
|
||||
explicit XAtomCache(::Display* display);
|
||||
~XAtomCache();
|
||||
|
||||
::Display* display() const;
|
||||
|
||||
Atom WmState();
|
||||
Atom WindowType();
|
||||
Atom WindowTypeNormal();
|
||||
|
||||
private:
|
||||
// If |*atom| is None, this function uses XInternAtom() to retrieve an Atom.
|
||||
Atom CreateIfNotExist(Atom* atom, const char* name);
|
||||
|
||||
::Display* const display_;
|
||||
Atom wm_state_ = None;
|
||||
Atom window_type_ = None;
|
||||
Atom window_type_normal_ = None;
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // MODULES_DESKTOP_CAPTURE_LINUX_X_ATOM_CACHE_H_
|
||||
Reference in New Issue
Block a user