webrtc/modules/desktop_capture
Austin Orion 1cdbabde53 Update WgcCaptureSession to handle portrait oriented screen capture.
WgcCaptureSession would crash when copying the frame data for an image
from a portrait oriented monitor. This is because we were using the
height of the image multiplied by the rowpitch of the buffer to
determine the size of the data to be copied. However, in portrait
mode the height measures the same dimension as the rowpitch, leading
to us overrunning the frame buffer.

The fix is to use the height and width of the image multiplied by
the number of bytes per pixel to determine how much data to copy
out of the buffer, and only use the rowpitch to advance the pointer
in the source data buffer. This has the added benefit of giving us
contiguous data, reducing the size of the DesktopFrame that we output.

Bug: webrtc:12490
Change-Id: I4c26f8864cb57ac566a742af70fea1da504b9706
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/209501
Reviewed-by: Joe Downing <joedow@chromium.org>
Commit-Queue: Austin Orion <auorion@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#33532}
2021-03-22 20:50:50 +00:00
..
linux Add support for PipeWire 0.3 2020-12-04 05:36:18 +00:00
mac Use SequenceChecker from public API 2021-02-10 15:04:55 +00:00
win Update WgcCaptureSession to handle portrait oriented screen capture. 2021-03-22 20:50:50 +00:00
blank_detector_desktop_capturer_wrapper_unittest.cc Fully qualify googletest symbols. 2019-04-09 17:18:20 +00:00
blank_detector_desktop_capturer_wrapper.cc Add missing interface methods. 2020-02-18 22:36:00 +00:00
blank_detector_desktop_capturer_wrapper.h Add missing interface methods. 2020-02-18 22:36:00 +00:00
BUILD.gn modules/desktop_capture: replace memcpy with libyuv::CopyPlane 2021-02-25 21:50:30 +00:00
cropped_desktop_frame_unittest.cc Use std::make_unique instead of absl::make_unique. 2019-09-17 15:47:29 +00:00
cropped_desktop_frame.cc Format almost everything. 2019-07-08 13:45:15 +00:00
cropped_desktop_frame.h [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
cropping_window_capturer_win.cc Add Presentation Mode Support for Capturing OpenOffice Impress document windows 2020-11-05 21:22:19 +00:00
cropping_window_capturer.cc Format almost everything. 2019-07-08 13:45:15 +00:00
cropping_window_capturer.h Implement handling for MS PowerPoint Presentation Mode. 2019-12-03 19:17:24 +00:00
DEPS Can use the given IOSurfaceRef to reach higher capture framerate on Mac 2018-04-10 00:37:59 +00:00
desktop_and_cursor_composer_unittest.cc Include cursor rects in updated_region. 2020-01-24 20:16:58 +00:00
desktop_and_cursor_composer.cc Add missing interface methods. 2020-02-18 22:36:00 +00:00
desktop_and_cursor_composer.h Add missing interface methods. 2020-02-18 22:36:00 +00:00
desktop_capture_options.cc Revert "Improve screen sharing with PipeWire on Wayland" 2020-10-14 08:26:18 +00:00
desktop_capture_options.h Revert "Improve screen sharing with PipeWire on Wayland" 2020-10-14 08:26:18 +00:00
desktop_capture_types.h Delete root header file typedef.h. 2018-07-25 14:59:26 +00:00
desktop_capturer_differ_wrapper_unittest.cc Fully qualify googletest symbols. 2019-04-09 17:18:20 +00:00
desktop_capturer_differ_wrapper.cc Format almost everything. 2019-07-08 13:45:15 +00:00
desktop_capturer_differ_wrapper.h RTC_EXPORT webrtc::DesktopCapturerDifferWrapper. 2019-10-23 23:34:46 +00:00
desktop_capturer_wrapper.cc Implement DesktopCapturerWrapper and CaptureResultDesktopCapturerWrapper 2017-09-15 18:56:26 +00:00
desktop_capturer_wrapper.h [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
desktop_capturer.cc Address CL comments from 200161. 2021-01-28 22:59:30 +00:00
desktop_capturer.h Explicitly set and use WEBRTC_USE_X11 instead of USE_X11. 2019-12-13 09:36:25 +00:00
desktop_frame_generator.cc Format almost everything. 2019-07-08 13:45:15 +00:00
desktop_frame_generator.h
desktop_frame_rotation_unittest.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
desktop_frame_rotation.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
desktop_frame_rotation.h
desktop_frame_unittest.cc Use std::make_unique instead of absl::make_unique. 2019-09-17 15:47:29 +00:00
desktop_frame_win.cc Reformat the WebRTC code base 2018-06-19 14:00:39 +00:00
desktop_frame_win.h Format almost everything. 2019-07-08 13:45:15 +00:00
desktop_frame.cc modules/desktop_capture: replace memcpy with libyuv::CopyPlane 2021-02-25 21:50:30 +00:00
desktop_frame.h Reland "Begin implementing WGC CaptureFrame" 2020-10-02 07:29:31 +00:00
desktop_geometry_unittest.cc
desktop_geometry.cc Include menus & dialogs in frames captured by WindowCapturerWin 2019-08-21 07:55:07 +00:00
desktop_geometry.h Reland "Reland "Reland "Reland "Reland "Implemented screen enumeration and selection for desktop capture under X11 using the X Resize and Rotate extension version 1.5.""""" 2020-02-26 20:35:54 +00:00
desktop_region_unittest.cc Format almost everything. 2019-07-08 13:45:15 +00:00
desktop_region.cc Format almost everything. 2019-07-08 13:45:15 +00:00
desktop_region.h Add missing RTC_EXPORT for the Chromium Windows build. 2019-11-07 09:32:24 +00:00
differ_block_unittest.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
differ_block.cc Refactor cpu_features_wrapper.h functions from C to C++. 2020-09-07 08:44:24 +00:00
differ_block.h Reformat the WebRTC code base 2018-06-19 14:00:39 +00:00
differ_vector_sse2.cc Reformat the WebRTC code base 2018-06-19 14:00:39 +00:00
differ_vector_sse2.h
fake_desktop_capturer.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
fake_desktop_capturer.h [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
fallback_desktop_capturer_wrapper_unittest.cc Format almost everything. 2019-07-08 13:45:15 +00:00
fallback_desktop_capturer_wrapper.cc Use SequenceChecker from public API 2021-02-10 15:04:55 +00:00
fallback_desktop_capturer_wrapper.h Revert "Desktop capturer: Add OnDisplayChanged callback" 2018-12-22 00:10:40 +00:00
full_screen_application_handler.cc Implement handling for MS PowerPoint Presentation Mode. 2019-12-03 19:17:24 +00:00
full_screen_application_handler.h Implement handling for MS PowerPoint Presentation Mode. 2019-12-03 19:17:24 +00:00
full_screen_window_detector.cc Implement handling for MS PowerPoint Presentation Mode. 2019-12-03 19:17:24 +00:00
full_screen_window_detector.h Implement handling for MS PowerPoint Presentation Mode. 2019-12-03 19:17:24 +00:00
mock_desktop_capturer_callback.cc
mock_desktop_capturer_callback.h Replace mock macros with unified MOCK_METHOD macro 2020-05-28 14:11:53 +00:00
mouse_cursor_monitor_linux.cc Explicitly set and use WEBRTC_USE_X11 instead of USE_X11. 2019-12-13 09:36:25 +00:00
mouse_cursor_monitor_mac.mm Implement handling for MS PowerPoint Presentation Mode. 2019-12-03 19:17:24 +00:00
mouse_cursor_monitor_null.cc Format almost everything. 2019-07-08 13:45:15 +00:00
mouse_cursor_monitor_unittest.cc Revert "Reland "reenable mouse_cursor_monitor tests on linux"" 2020-09-07 18:29:13 +00:00
mouse_cursor_monitor_win.cc Include menus & dialogs in frames captured by WindowCapturerWin 2019-08-21 07:55:07 +00:00
mouse_cursor_monitor.h Make deprecated OnMouseCursorPosition overload optional. 2020-01-17 23:14:21 +00:00
mouse_cursor.cc Reformat the WebRTC code base 2018-06-19 14:00:39 +00:00
mouse_cursor.h Export symbols needed by the Chromium component build (part 8). 2019-04-02 10:13:36 +00:00
OWNERS Updating the OWNERS file for desktop capture 2020-09-15 21:34:24 +00:00
resolution_tracker.cc
resolution_tracker.h
rgba_color_unittest.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
rgba_color.cc Format almost everything. 2019-07-08 13:45:15 +00:00
rgba_color.h
screen_capture_frame_queue.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
screen_capturer_darwin.mm Can use the given IOSurfaceRef to reach higher capture framerate on Mac 2018-04-10 00:37:59 +00:00
screen_capturer_helper_unittest.cc Fully qualify googletest symbols. 2019-04-09 17:18:20 +00:00
screen_capturer_helper.cc Replace RWLockWrapper --> Mutex in ScreenCapturerHelper 2020-11-03 07:52:42 +00:00
screen_capturer_helper.h Replace RWLockWrapper --> Mutex in ScreenCapturerHelper 2020-11-03 07:52:42 +00:00
screen_capturer_integration_test.cc Fully qualify googletest symbols. 2019-04-09 17:18:20 +00:00
screen_capturer_linux.cc Improve screen sharing with PipeWire on Wayland 2020-12-03 17:33:19 +00:00
screen_capturer_mac_unittest.cc Fully qualify googletest symbols. 2019-04-09 17:18:20 +00:00
screen_capturer_null.cc
screen_capturer_unittest.cc Don't crash the test process when X11 isn't available. 2019-12-16 09:57:59 +00:00
screen_capturer_win.cc Reformat the WebRTC code base 2018-06-19 14:00:39 +00:00
screen_drawer_linux.cc Use std::make_unique instead of absl::make_unique. 2019-09-17 15:47:29 +00:00
screen_drawer_lock_posix.cc Stop using LOG macros in favor of RTC_ prefixed macros. 2017-11-09 11:56:32 +00:00
screen_drawer_lock_posix.h
screen_drawer_mac.cc Use std::make_unique instead of absl::make_unique. 2019-09-17 15:47:29 +00:00
screen_drawer_unittest.cc Don't crash the test process when X11 isn't available. 2019-12-16 09:57:59 +00:00
screen_drawer_win.cc
screen_drawer.cc
screen_drawer.h [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
shared_desktop_frame.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
shared_desktop_frame.h Remove rtc_base/scoped_ref_ptr.h. 2019-01-25 20:29:58 +00:00
shared_memory.cc Reformat the WebRTC code base 2018-06-19 14:00:39 +00:00
shared_memory.h Add missing RTC_EXPORT for the component build. 2019-10-15 09:07:44 +00:00
test_utils_unittest.cc Don't crash the test process when X11 isn't available. 2019-12-16 09:57:59 +00:00
test_utils.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
test_utils.h
window_capturer_linux.cc Improve screen sharing with PipeWire on Wayland 2020-12-03 17:33:19 +00:00
window_capturer_mac.mm Add Presentation Mode Support for Capturing OpenOffice Impress document windows 2020-11-05 21:22:19 +00:00
window_capturer_null.cc (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
window_capturer_unittest.cc Don't crash the test process when X11 isn't available. 2019-12-16 09:57:59 +00:00
window_capturer_win.cc Reland "Begin implementing WGC CaptureFrame" 2020-10-02 07:29:31 +00:00
window_finder_mac.h Remove rtc_base/scoped_ref_ptr.h. 2019-01-25 20:29:58 +00:00
window_finder_mac.mm Implement handling for MS PowerPoint Presentation Mode. 2019-12-03 19:17:24 +00:00
window_finder_unittest.cc Explicitly set and use WEBRTC_USE_X11 instead of USE_X11. 2019-12-13 09:36:25 +00:00
window_finder_win.cc Use std::make_unique instead of absl::make_unique. 2019-09-17 15:47:29 +00:00
window_finder_win.h
window_finder.cc [Window Capturer] Implement scaling in GetWindowBounds() 2017-11-07 01:49:35 +00:00
window_finder.h Explicitly set and use WEBRTC_USE_X11 instead of USE_X11. 2019-12-13 09:36:25 +00:00