diff options
author | Erwin Jansen <jansene@google.com> | 2021-06-23 05:52:25 -0700 |
---|---|---|
committer | Erwin Jansen <jansene@google.com> | 2021-06-23 06:45:54 -0700 |
commit | 16be34ae72cdb525c88c2b31b21b976f35fe36d8 (patch) | |
tree | 6eacaffe4bebf8e00c290c1e1839e084b0c52e88 /modules/desktop_capture/linux/base_capturer_pipewire.cc | |
parent | 97e54a7e73c7b24e464ef06ef3c3b3716f21bb15 (diff) | |
parent | 49cb4599560d6005d5df0dadfca2db04b288f216 (diff) | |
download | webrtc-16be34ae72cdb525c88c2b31b21b976f35fe36d8.tar.gz |
Merge upstream-master and enable ARM64
We bring in the latest WebRTC changes and turn on arm.
This adds a new third party lib: crc32c, and includes a workaround
for handling a depencency issue for arm.
Bug: 191745658
Change-Id: Ic5be99911990ef14a5f733f19394032b20f85024
Diffstat (limited to 'modules/desktop_capture/linux/base_capturer_pipewire.cc')
-rw-r--r-- | modules/desktop_capture/linux/base_capturer_pipewire.cc | 67 |
1 files changed, 37 insertions, 30 deletions
diff --git a/modules/desktop_capture/linux/base_capturer_pipewire.cc b/modules/desktop_capture/linux/base_capturer_pipewire.cc index c302a086ea..e5d001e476 100644 --- a/modules/desktop_capture/linux/base_capturer_pipewire.cc +++ b/modules/desktop_capture/linux/base_capturer_pipewire.cc @@ -772,37 +772,27 @@ void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) { // Use video metadata when video size from metadata is set and smaller than // video stream size, so we need to adjust it. - bool video_is_full_width = true; - bool video_is_full_height = true; + bool video_metadata_use = false; + #if PW_CHECK_VERSION(0, 3, 0) - if (video_metadata && video_metadata->region.size.width != 0 && - video_metadata->region.size.height != 0) { - if (video_metadata->region.size.width < - static_cast<uint32_t>(desktop_size_.width())) { - video_is_full_width = false; - } else if (video_metadata->region.size.height < - static_cast<uint32_t>(desktop_size_.height())) { - video_is_full_height = false; - } - } + const struct spa_rectangle* video_metadata_size = + video_metadata ? &video_metadata->region.size : nullptr; #else - if (video_metadata && video_metadata->width != 0 && - video_metadata->height != 0) { - if (video_metadata->width < desktop_size_.width()) { - } else if (video_metadata->height < desktop_size_.height()) { - video_is_full_height = false; - } - } + const struct spa_meta_video_crop* video_metadata_size = video_metadata; #endif + if (video_metadata_size && video_metadata_size->width != 0 && + video_metadata_size->height != 0 && + (static_cast<int>(video_metadata_size->width) < desktop_size_.width() || + static_cast<int>(video_metadata_size->height) < + desktop_size_.height())) { + video_metadata_use = true; + } + DesktopSize video_size_prev = video_size_; - if (!video_is_full_height || !video_is_full_width) { -#if PW_CHECK_VERSION(0, 3, 0) - video_size_ = DesktopSize(video_metadata->region.size.width, - video_metadata->region.size.height); -#else - video_size_ = DesktopSize(video_metadata->width, video_metadata->height); -#endif + if (video_metadata_use) { + video_size_ = + DesktopSize(video_metadata_size->width, video_metadata_size->height); } else { video_size_ = desktop_size_; } @@ -827,25 +817,25 @@ void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) { // Adjust source content based on metadata video position #if PW_CHECK_VERSION(0, 3, 0) - if (!video_is_full_height && + if (video_metadata_use && (video_metadata->region.position.y + video_size_.height() <= desktop_size_.height())) { src += src_stride * video_metadata->region.position.y; } const int x_offset = - !video_is_full_width && + video_metadata_use && (video_metadata->region.position.x + video_size_.width() <= desktop_size_.width()) ? video_metadata->region.position.x * kBytesPerPixel : 0; #else - if (!video_is_full_height && + if (video_metadata_use && (video_metadata->y + video_size_.height() <= desktop_size_.height())) { src += src_stride * video_metadata->y; } const int x_offset = - !video_is_full_width && + video_metadata_use && (video_metadata->x + video_size_.width() <= desktop_size_.width()) ? video_metadata->x * kBytesPerPixel : 0; @@ -1036,6 +1026,23 @@ void BaseCapturerPipeWire::SourcesRequest() { // We don't want to allow selection of multiple sources. g_variant_builder_add(&builder, "{sv}", "multiple", g_variant_new_boolean(false)); + + Scoped<GVariant> variant( + g_dbus_proxy_get_cached_property(proxy_, "AvailableCursorModes")); + if (variant.get()) { + uint32_t modes = 0; + g_variant_get(variant.get(), "u", &modes); + // Request mouse cursor to be embedded as part of the stream, otherwise it + // is hidden by default. Make request only if this mode is advertised by + // the portal implementation. + if (modes & + static_cast<uint32_t>(BaseCapturerPipeWire::CursorMode::kEmbedded)) { + g_variant_builder_add(&builder, "{sv}", "cursor_mode", + g_variant_new_uint32(static_cast<uint32_t>( + BaseCapturerPipeWire::CursorMode::kEmbedded))); + } + } + variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT)); g_variant_builder_add(&builder, "{sv}", "handle_token", g_variant_new_string(variant_string.get())); |