PipeWire capturer: fix stream width in PW 0.2 code
Set we don't use full stream width. This follows same code as in PW 0.3
case, it was just accidentally omitted.
Bug: chromium:682122
Change-Id: Ifb9200a14387ba9b9da3246c9c4e30306393c4e6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/214700
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Wez <wez@google.com>
Cr-Commit-Position: refs/heads/master@{#34124}
diff --git a/modules/desktop_capture/linux/base_capturer_pipewire.cc b/modules/desktop_capture/linux/base_capturer_pipewire.cc
index c302a08..919415e 100644
--- a/modules/desktop_capture/linux/base_capturer_pipewire.cc
+++ b/modules/desktop_capture/linux/base_capturer_pipewire.cc
@@ -772,37 +772,27 @@
// 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 @@
// 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;