From 3073f3d1488cd899e59d60fdaf207e2d6c5c9ea0 Mon Sep 17 00:00:00 2001 From: Henrik Grunell Date: Fri, 14 Dec 2018 14:22:48 +0000 Subject: [PATCH] Revert "Reland "Default to dlopening the PipeWire."" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 0cc42d47389c039c57e47d7ec0c76b97e2da2b0b. Reason for revert: Sorry, broke WebRTC roll to Chromium again: https://chromium-review.googlesource.com/c/chromium/src/+/1377299. This time the define now set enabled code around the feature flag already landed and there were failures related to that. I suggest to revert that Chromium CL and re-land it after this CL has landed and been rolled into Chromium (if possible to do so). Original change's description: > Reland "Default to dlopening the PipeWire." > > This is a reland of a099877d8946eb942046ca1295cc142e4fa7ea6f > > Original change's description: > > Reland "Default to dlopening the PipeWire." > > > > This is a reland of a13be019017449c57f48203d0fb778f34f7553a7 > > > > Original change's description: > > > Default to dlopening the PipeWire. > > > > > > Reuse the existing infra from Chromium to do that. Additionally the > > > target_gen_dir needs to the added to the include directories, otherwise > > > the Chromium build will fail as it won't find the generated stubs. Also the > > > pw_properties_new() was replaced with pw_properties_new_string() as it doesn't > > > require a variadic parameter because the //tools/generate_stubs/generate_stubs.py > > > doesn't work with them correctly. With all these changes in place the PipeWire > > > support is enabled when compiling on Linux. > > > > > > Bug: chromium:682122 > > > Change-Id: I3bbc5efaecd9a08e20cbcf998b2cb534224eae7d > > > Reviewed-on: https://webrtc-review.googlesource.com/c/111081 > > > Reviewed-by: Mirko Bonadei > > > Reviewed-by: Brave Yao > > > Commit-Queue: Tomáš Popela > > > Cr-Commit-Position: refs/heads/master@{#25720} > > > > Bug: chromium:682122 > > Change-Id: I3cca3d4d961dc7a088346c8fd3c970d3dfde3b79 > > Reviewed-on: https://webrtc-review.googlesource.com/c/113040 > > Reviewed-by: Weiyong Yao > > Reviewed-by: Brave Yao > > Reviewed-by: Mirko Bonadei > > Reviewed-by: Oleh Prypin > > Commit-Queue: Oleh Prypin > > Cr-Commit-Position: refs/heads/master@{#25981} > > Bug: chromium:682122 > Change-Id: Ief26c93069f946f981340664a267fcb412229285 > Reviewed-on: https://webrtc-review.googlesource.com/c/114163 > Reviewed-by: Mirko Bonadei > Reviewed-by: Brave Yao > Commit-Queue: Mirko Bonadei > Cr-Commit-Position: refs/heads/master@{#26004} TBR=phoglund@webrtc.org,mbonadei@webrtc.org,oprypin@webrtc.org,braveyao@webrtc.org,braveyao@chromium.org,tomas.popela@gmail.com Change-Id: I9ca52c61210e94182dd6b6a26a136c7f79a2dd0f No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:682122 Reviewed-on: https://webrtc-review.googlesource.com/c/114427 Reviewed-by: Henrik Grunell Commit-Queue: Henrik Grunell Cr-Commit-Position: refs/heads/master@{#26014} --- BUILD.gn | 8 -- modules/desktop_capture/BUILD.gn | 73 ++++++------------- .../linux/base_capturer_pipewire.cc | 31 +------- modules/desktop_capture/linux/pipewire.sigs | 44 ----------- .../linux/pipewire_stub_header.fragment | 8 -- webrtc.gni | 8 +- 6 files changed, 26 insertions(+), 146 deletions(-) delete mode 100644 modules/desktop_capture/linux/pipewire.sigs delete mode 100644 modules/desktop_capture/linux/pipewire_stub_header.fragment diff --git a/BUILD.gn b/BUILD.gn index 4db6558ecd..c9249ff0d8 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -131,14 +131,6 @@ config("common_inherited_config") { # Allow includes to be prefixed with webrtc/ in case it is not an # immediate subdirectory of the top-level. ".", - - # Just like the root WebRTC directory is added to include path, the - # corresponding directory tree with generated files needs to be added too. - # Note: this path does not change depending on the current target, e.g. - # it is always "//gen/third_party/webrtc" when building with Chromium. - # See also: http://cs.chromium.org/?q=%5C"default_include_dirs - # https://gn.googlesource.com/gn/+/master/docs/reference.md#target_gen_dir - target_gen_dir, ] } if (is_posix || is_fuchsia) { diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn index 0677a79ff5..390fc0a051 100644 --- a/modules/desktop_capture/BUILD.gn +++ b/modules/desktop_capture/BUILD.gn @@ -8,7 +8,6 @@ import("//build/config/linux/pkg_config.gni") import("//build/config/ui.gni") -import("//tools/generate_stubs/rules.gni") import("../../webrtc.gni") use_desktop_capture_differ_sse2 = current_cpu == "x86" || current_cpu == "x64" @@ -167,40 +166,18 @@ if (rtc_include_tests) { if (is_linux) { if (rtc_use_pipewire) { + pkg_config("pipewire") { + packages = [ "libpipewire-0.2" ] + + defines = [ "WEBRTC_USE_PIPEWIRE" ] + } + pkg_config("gio") { packages = [ "gio-2.0", "gio-unix-2.0", ] } - - if (rtc_link_pipewire) { - pkg_config("pipewire") { - packages = [ "libpipewire-0.2" ] - } - } else { - # When libpipewire is not directly linked, use stubs to allow for dlopening of - # the binary. - generate_stubs("pipewire_stubs") { - configs = [ "../../:common_config" ] - deps = [ - "../../rtc_base", - ] - extra_header = "linux/pipewire_stub_header.fragment" - logging_function = "RTC_LOG(LS_VERBOSE)" - logging_include = "rtc_base/logging.h" - output_name = "linux/pipewire_stubs" - path_from_source = "modules/desktop_capture/linux" - sigs = [ "linux/pipewire.sigs" ] - } - } - - config("pipewire_config") { - defines = [ "WEBRTC_USE_PIPEWIRE" ] - if (!rtc_link_pipewire) { - defines += [ "WEBRTC_DLOPEN_PIPEWIRE" ] - } - } } } @@ -407,6 +384,22 @@ rtc_static_library("desktop_capture_generic") { } } + if (rtc_use_pipewire) { + sources += [ + "linux/base_capturer_pipewire.cc", + "linux/base_capturer_pipewire.h", + "linux/screen_capturer_pipewire.cc", + "linux/screen_capturer_pipewire.h", + "linux/window_capturer_pipewire.cc", + "linux/window_capturer_pipewire.h", + ] + + configs += [ + ":gio", + ":pipewire", + ] + } + if (!is_win && !is_mac && !rtc_use_x11 && !rtc_use_pipewire) { sources += [ "mouse_cursor_monitor_null.cc", @@ -445,28 +438,6 @@ rtc_static_library("desktop_capture_generic") { if (use_desktop_capture_differ_sse2) { deps += [ ":desktop_capture_differ_sse2" ] } - - if (rtc_use_pipewire) { - sources += [ - "linux/base_capturer_pipewire.cc", - "linux/base_capturer_pipewire.h", - "linux/screen_capturer_pipewire.cc", - "linux/screen_capturer_pipewire.h", - "linux/window_capturer_pipewire.cc", - "linux/window_capturer_pipewire.h", - ] - - configs += [ - ":pipewire_config", - ":gio", - ] - - if (rtc_link_pipewire) { - configs += [ ":pipewire" ] - } else { - deps += [ ":pipewire_stubs" ] - } - } } if (use_desktop_capture_differ_sse2) { diff --git a/modules/desktop_capture/linux/base_capturer_pipewire.cc b/modules/desktop_capture/linux/base_capturer_pipewire.cc index 05ad86f762..62d9994d32 100644 --- a/modules/desktop_capture/linux/base_capturer_pipewire.cc +++ b/modules/desktop_capture/linux/base_capturer_pipewire.cc @@ -27,14 +27,6 @@ #include "rtc_base/checks.h" #include "rtc_base/logging.h" -#if defined(WEBRTC_DLOPEN_PIPEWIRE) -#include "modules/desktop_capture/linux/pipewire_stubs.h" - -using modules_desktop_capture_linux::InitializeStubs; -using modules_desktop_capture_linux::kModulePipewire; -using modules_desktop_capture_linux::StubPathMap; -#endif // defined(WEBRTC_DLOPEN_PIPEWIRE) - namespace webrtc { const char kDesktopBusName[] = "org.freedesktop.portal.Desktop"; @@ -47,10 +39,6 @@ const char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast"; const int kBytesPerPixel = 4; -#if defined(WEBRTC_DLOPEN_PIPEWIRE) -const char kPipeWireLib[] = "libpipewire-0.2.so.1"; -#endif - // static void BaseCapturerPipeWire::OnStateChanged(void* data, pw_remote_state old_state, @@ -263,18 +251,6 @@ void BaseCapturerPipeWire::InitPortal() { } void BaseCapturerPipeWire::InitPipeWire() { -#if defined(WEBRTC_DLOPEN_PIPEWIRE) - StubPathMap paths; - - // Check if the PipeWire library is available. - paths[kModulePipewire].push_back(kPipeWireLib); - if (!InitializeStubs(paths)) { - RTC_LOG(LS_ERROR) << "Failed to load the PipeWire library and symbols."; - portal_init_failed_ = true; - return; - } -#endif // defined(WEBRTC_DLOPEN_PIPEWIRE) - pw_init(/*argc=*/nullptr, /*argc=*/nullptr); pw_loop_ = pw_loop_new(/*properties=*/nullptr); @@ -303,8 +279,6 @@ void BaseCapturerPipeWire::InitPipeWire() { RTC_LOG(LS_ERROR) << "Failed to start main PipeWire loop"; portal_init_failed_ = true; } - - RTC_LOG(LS_INFO) << "PipeWire remote opened."; } void BaseCapturerPipeWire::InitPipeWireTypes() { @@ -326,8 +300,8 @@ void BaseCapturerPipeWire::CreateReceivingStream() { spa_fraction pwFrameRateMin = spa_fraction{0, 1}; spa_fraction pwFrameRateMax = spa_fraction{60, 1}; - pw_properties* reuseProps = - pw_properties_new_string("pipewire.client.reuse=1"); + pw_properties* reuseProps = pw_properties_new("pipewire.client.reuse", "1", + /*end of varargs*/ nullptr); pw_stream_ = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps); uint8_t buffer[1024] = {}; @@ -819,6 +793,7 @@ void BaseCapturerPipeWire::OnOpenPipeWireRemoteRequested( g_object_unref(outlist); that->InitPipeWire(); + RTC_LOG(LS_INFO) << "PipeWire remote opened."; } void BaseCapturerPipeWire::Start(Callback* callback) { diff --git a/modules/desktop_capture/linux/pipewire.sigs b/modules/desktop_capture/linux/pipewire.sigs deleted file mode 100644 index 3e21e9dc07..0000000000 --- a/modules/desktop_capture/linux/pipewire.sigs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2018 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. - -//------------------------------------------------ -// Functions from PipeWire used in capturer code. -//------------------------------------------------ - -// core.h -void pw_core_destroy(pw_core *core); -pw_type *pw_core_get_type(pw_core *core); -pw_core * pw_core_new(pw_loop *main_loop, pw_properties *props); - -// loop.h -void pw_loop_destroy(pw_loop *loop); -pw_loop * pw_loop_new(pw_properties *properties); - -// pipewire.h -void pw_init(int *argc, char **argv[]); - -// properties.h -pw_properties * pw_properties_new_string(const char *args); - -// remote.h -void pw_remote_add_listener(pw_remote *remote, spa_hook *listener, const pw_remote_events *events, void *data); -int pw_remote_connect_fd(pw_remote *remote, int fd); -void pw_remote_destroy(pw_remote *remote); -pw_remote * pw_remote_new(pw_core *core, pw_properties *properties, size_t user_data_size); - -// stream.h -void pw_stream_add_listener(pw_stream *stream, spa_hook *listener, const pw_stream_events *events, void *data); -int pw_stream_connect(pw_stream *stream, enum pw_direction direction, const char *port_path, enum pw_stream_flags flags, const spa_pod **params, uint32_t n_params); -pw_buffer *pw_stream_dequeue_buffer(pw_stream *stream); -void pw_stream_destroy(pw_stream *stream); -void pw_stream_finish_format(pw_stream *stream, int res, const spa_pod **params, uint32_t n_params); -pw_stream * pw_stream_new(pw_remote *remote, const char *name, pw_properties *props); -int pw_stream_queue_buffer(pw_stream *stream, pw_buffer *buffer); -int pw_stream_set_active(pw_stream *stream, bool active); - -// thread-loop.h -void pw_thread_loop_destroy(pw_thread_loop *loop); -pw_thread_loop * pw_thread_loop_new(pw_loop *loop, const char *name); -int pw_thread_loop_start(pw_thread_loop *loop); -void pw_thread_loop_stop(pw_thread_loop *loop); diff --git a/modules/desktop_capture/linux/pipewire_stub_header.fragment b/modules/desktop_capture/linux/pipewire_stub_header.fragment deleted file mode 100644 index 9d7dbd27c5..0000000000 --- a/modules/desktop_capture/linux/pipewire_stub_header.fragment +++ /dev/null @@ -1,8 +0,0 @@ -// The extra include header needed in the generated stub file for defining -// various PipeWire types. - -extern "C" { - -#include - -} diff --git a/webrtc.gni b/webrtc.gni index c843c2472b..7c24c79c75 100644 --- a/webrtc.gni +++ b/webrtc.gni @@ -109,13 +109,7 @@ declare_args() { rtc_use_x11 = use_x11 # Set this to use PipeWire on the Wayland display server. - # By default it's only enabled on desktop Linux (excludes ChromeOS) and - # only when using the sysroot as PipeWire is not available in older and - # supported Ubuntu and Debian distributions. - rtc_use_pipewire = is_desktop_linux && use_sysroot - - # Set this to link PipeWire directly instead of using the dlopen. - rtc_link_pipewire = false + rtc_use_pipewire = false # Enable to use the Mozilla internal settings. build_with_mozilla = false