Commit Graph

224 Commits

Author SHA1 Message Date
8987c88190 Refactor test window creation functions to be reusable.
This change moves several functions used to create test windows from
WindowCaptureUtilsTest into a reusable file test_window.cc. This is so
we can reuse this code in the window capturer tests in this CL:
196624: Finish implementing WGC Window Capturer and add unit tests. |
https://webrtc-review.googlesource.com/c/src/+/196624

Bug: webrtc:9273
Change-Id: I62dc53e6c3475e49ca4ae4cf6d1ef02fc8781b89
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/196623
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Austin Orion <auorion@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#32838}
2020-12-15 20:52:45 +00:00
c3c8129736 Add support for PipeWire 0.3
Adds a new "rtc_pipewire_version" build option to specify version of
PipeWire we want to build against. We use version "0.2" by default
which is version of PipeWire we currently have in sysroot and which
is supported even on older systems like RHEL7 and Debian.

Bug: chromium:1146942
Change-Id: Ib74b52fa87623a3f960e419916b01586aaeba47f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/195441
Commit-Queue: Jamie Walch <jamiewalch@chromium.org>
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32768}
2020-12-04 05:36:18 +00:00
40c3ea5c71 Improve screen sharing with PipeWire on Wayland
Changes:
1) Scoped class
This is a special class for GLib based objects which we need to manually
delete with different functions. Wrapping these objects into Scoped class
will destroy them automatically when they go out of scope.

2) Window sharing support
Unlike screen sharing, with window sharing we are required to obtain more
information from the PipeWire stream, like video crop metadata, which we
use to properly set size of our buffer.

3) Support for DmaBuf and MemFd buffer types
As of now, we expected the PipeWire stream will provide only plain data
which we just need to copy to our buffer. We now add support for new
buffer types, which are often preferred for better effeciency.

4) Minor bugfixes:
a) Additionally accept PipeWire streams using alpha channels (BGRA, RGBA)
b) Add lock over PipeWire loop to prevent potential issues until we fully
   intialize everything we need
c) When obtaining buffers, make sure we work with the latest one

Bug: chromium:682122
Change-Id: I64638d5dcbe18e7280550dca0b01b17c511ac98a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/194100
Commit-Queue: Jamie Walch <jamiewalch@chromium.org>
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#32763}
2020-12-03 17:33:19 +00:00
449a78b1e2 Prevent window enumeration deadlock and add unit tests.
For some time now, calls to EnumerateCapturableWindows could lead to a
deadlock if an application's main thread is waiting on the thread that
is running EnumerateCapturableWindows. This is because calls to
GetWindowText and GetWindowTextLength send a message to the window if
the window is owned by the current process. Since the main thread is
waiting on us, it will never reply to this message and we will hang.

This happens occasionally in Chromium when tearing down the
NativeDesktopMediaList object, e.g. when a user clicks "cancel" on
the capture target picker.

We can avoid this deadlock by checking if the window we are querying
is owned by the current process, and if it is then we must ensure it
is responding to messages before we call a GetWindowText* API.

This change also adds a unit test for this scenario. We create a
window and force it to be unresponsive by creating a deadlock, and
then call GetWindowList and (with the new changes) we should not
hang. Without the new changes to GetWindowListHandler, this test
would hang.

Change-Id: I2523cd735f96fd7ea60708c30cd22e5b525803f0
Bug: chromium:1152841
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/195365
Commit-Queue: Austin Orion <auorion@microsoft.com>
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#32734}
2020-12-01 20:17:22 +00:00
8f56dbf93e Delete unused class CaptureResultDesktopCapturerWrapper
Class was introduced in 2017, see
https://webrtc-review.googlesource.com/1420, but never taken into use.

Bug: chromium:764258
Change-Id: I5f15f25a3c1a992f8c725b78891956e7275b0e4d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/194320
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32665}
2020-11-23 10:22:56 +00:00
439ffe462a Add Presentation Mode Support for Capturing OpenOffice Impress document windows
* Add OpenOfficeApplicationHandler for MacOS and MS Windows.
* List of available sources for FullScreenWindowDetector on MacOS can include a window with empty title along with titled window for one application.
* List of available sources for FullScreenWindowDetector on MS Windows can include a window with empty title or invisible ones.

Bug: webrtc:11462
Change-Id: Id09537579ef6617dee29759c66dc9f7493166ca8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/171723
Commit-Queue: Jamie Walch <jamiewalch@chromium.org>
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Reviewed-by: Wez <wez@google.com>
Cr-Commit-Position: refs/heads/master@{#32561}
2020-11-05 21:22:19 +00:00
1109dd0b39 Delete class RWLockWrapper, and its build target.
This class is no longer used.

Bug: webrtc:12102
Change-Id: I04f2b15856a6e8ebc75cbe7e5114e942d08bb65c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/191489
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32551}
2020-11-04 14:53:13 +00:00
b0d83cd584 Replace RWLockWrapper --> Mutex in ScreenCapturerHelper
This class used only write locks, no read locks, and hence a plain
mutex is equivalent.

Bug: webrtc:12102
Change-Id: Ia3e52a5cb2db7679a50fca0ab80f85640876d0bd
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/190720
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32539}
2020-11-03 07:52:42 +00:00
ea3e3215e0 Fixing ASAN container-overflow error in DxgiOutputDuplicator
The DxgiOutputDuplicator uses a vector<byte> to hold the rects
that have changed on the screen.  It then iterates over the
vector to grab each rect and apply it to the updated_region.

There is vector resizing logic which checks the 'capacity' of
the vector and determines whether there is enough space for the
changed rect data.  Often the 'capacity' and 'size' of the
vector are equal but that isn't always true.  When the capacity
is greater than size, and the number of changed rects is high
enough, rect data will be written past the element pointed to
by (data() + size()) and this is the error that ASAN is warning
of.

The fix is to use size() instead of capacity() when determining
whether to resize the vector and as the buffer size we provide
to the Windows API.  There are no other usages of this vector so
there aren't any problems caused by the size/capacity discrepancy
in the existing builds.  The ASAN issue is worth fixing in case
someone comes along and decides to use the vector differently (e.g
rely on the size instead of capacity so some of the rects are
not counted).

Bug: chromium:1138446
Change-Id: I3041091423de889e0f8aabc56ece9466a3000b4f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/188900
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Joe Downing <joedow@google.com>
Cr-Commit-Position: refs/heads/master@{#32425}
2020-10-16 18:31:44 +00:00
92fa17660f Fixing the error logging in desktop_capture for Windows
The desktop_capture code logs failed HRESULTs in several places,
the problem is that it tries to use a wchar* (when a char*
is required) for the error message and doesn't display the HRESULT
in hex.  This makes the error logging less useful than it could be.

Example failure: error 08406B28, with code -2005270488

In this CL, I add a simple utility function to convert a _com_error
object to a std::string whic can be logged.  With this change the
output looks like this (linebreak added for CL description):
Failed to capture frame: HRESULT: 0x887A0026,
                         Message: 'The keyed mutex was abandoned.'

I also adjusted the formatting of a few logging statements to be
more consistent (adding '<<' operators mostly).

Bug: webrtc:12051
Change-Id: I3e88ff6f2ff079fbe210626e1e89b2b053a742a9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/188522
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Joe Downing <joedow@google.com>
Cr-Commit-Position: refs/heads/master@{#32417}
2020-10-15 19:09:36 +00:00
52c138e36e Revert "Improve screen sharing with PipeWire on Wayland"
This reverts commit 84524e6b196153e35910111f61c36489ec2bd1d7.

Reason for revert: https://webrtc-review.googlesource.com/c/src/+/160649/33#message-a83e8959e03a274642ca2ce1abb9ea0099f08097 + suspected in breaking WebRTC to Chromium rolls https://chromium-review.googlesource.com/c/chromium/src/+/2468139

Original change's description:
> Improve screen sharing with PipeWire on Wayland
>
> Currently, sharing a screen or a window on Wayland opens unnecessary
> preview dialog on Chromium side, which is then followed by a similar
> dialog on xdg-desktop-portal side. The Chromium dialog is useless on
> Wayland, as it doesn't show anything. This is because Chromium doesn't
> have access to screen content as in case of X11 session. To fix this, we
> want to avoid showing the preview dialog in case we find that we run on
> Wayland and only pick a screen or a window from the dialog that comes
> from xdg-desktop-portal.
>
> This patch splits BaseCapturerPipeWire class, moving portal related code
> into XdgPortalBase, which does all the DBus communication and which is
> supposed to be reused by BaseCapturerPipeWire when the user confirms
> the dialog from xdg-desktop-portal. The XdgPortalBase is extended to
> support multiple calls at once, where each call is identified by Id.
>
> Relevant change on Chromium side will be in a different review.
>
> Bug: chromium:682122
> Change-Id: I2bcd07d16a5eb3b902db63ea9a164c5bd39c23a0
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187492
> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> Reviewed-by: Tommi <tommi@webrtc.org>
> Commit-Queue: Tommi <tommi@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32388}

TBR=mbonadei@webrtc.org,tommi@webrtc.org,sprang@webrtc.org,guidou@webrtc.org,mfoltz@chromium.org,grulja@gmail.com

Change-Id: I1a9748ced5626903b12214d677c7b8919c2ac385
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: chromium:682122
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/188380
Reviewed-by: Olga Sharonova <olka@webrtc.org>
Commit-Queue: Olga Sharonova <olka@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32398}
2020-10-14 08:26:18 +00:00
73784e1e0e Improve checks for "child" windows of selected capture targets.
Previously windows other than the selected window will also be captured if they share the same process & thread, to allow child windows (e.g. popup menus) to be captured. This could result in child windows of other top-level windows run by the same process and thread being unintentionally captured. In attempt to err on the side of caution this check has been removed leaving some context menus and tooltips not recognized.

Bug: webrtc:11455
Change-Id: I66acc4b133baa51a128202727c655c63b07b19ab
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176462
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Reviewed-by: Wez <wez@google.com>
Commit-Queue: Jamie Walch <jamiewalch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#32395}
2020-10-14 01:23:43 +00:00
84524e6b19 Improve screen sharing with PipeWire on Wayland
Currently, sharing a screen or a window on Wayland opens unnecessary
preview dialog on Chromium side, which is then followed by a similar
dialog on xdg-desktop-portal side. The Chromium dialog is useless on
Wayland, as it doesn't show anything. This is because Chromium doesn't
have access to screen content as in case of X11 session. To fix this, we
want to avoid showing the preview dialog in case we find that we run on
Wayland and only pick a screen or a window from the dialog that comes
from xdg-desktop-portal.

This patch splits BaseCapturerPipeWire class, moving portal related code
into XdgPortalBase, which does all the DBus communication and which is
supposed to be reused by BaseCapturerPipeWire when the user confirms
the dialog from xdg-desktop-portal. The XdgPortalBase is extended to
support multiple calls at once, where each call is identified by Id.

Relevant change on Chromium side will be in a different review.

Bug: chromium:682122
Change-Id: I2bcd07d16a5eb3b902db63ea9a164c5bd39c23a0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187492
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32388}
2020-10-13 10:39:32 +00:00
4cf8e17e92 Revert "Improve screen sharing with PipeWire on Wayland"
This reverts commit 9b87037073f1811bcdae30967167f30b364e6879.

Reason for revert: Causing compile failures that prevent rolling into chrome.
See https://ci.chromium.org/p/chromium/builders/try/cast_shell_linux/726007
https://chromium-review.googlesource.com/c/chromium/src/+/2461647

Original change's description:
> Improve screen sharing with PipeWire on Wayland
>
> Currently, sharing a screen or a window on Wayland opens unnecessary
> preview dialog on Chromium side, which is then followed by a similar
> dialog on xdg-desktop-portal side. The Chromium dialog is useless on
> Wayland, as it doesn't show anything. This is because Chromium doesn't
> have access to screen content as in case of X11 session. To fix this, we
> want to avoid showing the preview dialog in case we find that we run on
> Wayland and only pick a screen or a window from the dialog that comes
> from xdg-desktop-portal.
>
> This patch splits BaseCapturerPipeWire class, moving portal related code
> into XdgPortalBase, which does all the DBus communication and which is
> supposed to be reused by BaseCapturerPipeWire when the user confirms
> the dialog from xdg-desktop-portal. The XdgPortalBase is extended to
> support multiple calls at once, where each call is identified by Id.
>
> Relevant change on Chromium side will be in a different review.
>
> Bug: chromium:682122
> Change-Id: If8afd36da66231eb154cdc00114908ac897ee4cf
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/160649
> Commit-Queue: Tommi <tommi@webrtc.org>
> Reviewed-by: Tommi <tommi@webrtc.org>
> Reviewed-by: Erik Språng <sprang@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32342}

TBR=mbonadei@webrtc.org,jamiewalch@chromium.org,tommi@webrtc.org,sprang@webrtc.org,tomas.popela@gmail.com,grulja@gmail.com

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: chromium:682122
Change-Id: I41518f795e34b84374bc8208b711cfeb0a070578
No-Try: True
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187352
Commit-Queue: Guido Urdaneta <guidou@webrtc.org>
Reviewed-by: Guido Urdaneta <guidou@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32365}
2020-10-09 11:49:11 +00:00
3fb94a488c Revert "Guard pipewire configs with rtc_use_pipewire."
This reverts commit 4e8a797e141218c7869ff5bdcb438c61e90784db.

Reason for revert: Required to revert CL causing compile problems that prevent rolling into chrome.
See
https://ci.chromium.org/p/chromium/builders/try/cast_shell_linux/726007
https://chromium-review.googlesource.com/c/chromium/src/+/2461647

Original change's description:
> Guard pipewire configs with rtc_use_pipewire.
>
> [1] has introduced two dependencies on
> //modules/desktop_capture:pipewire_config
> even when rtc_use_pipewire=false, this CL changes the guard in order to
> make sure GN doesn't raise errors when is_linux=true and
> rtc_use_pipewire=false.
>
> [1] - https://webrtc-review.googlesource.com/c/src/+/160649
>
> No-Try: True
> Bug: chromium:682122
> Change-Id: I28d2f10936dd75199a2a98862751708eb1e5615a
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187122
> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
> Reviewed-by: Tommi <tommi@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32345}

TBR=mbonadei@webrtc.org,tommi@webrtc.org,grulja@gmail.com

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: chromium:682122
Change-Id: Ifc493c0789520b6aa163390c382b6aaff9d732a8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187353
Reviewed-by: Guido Urdaneta <guidou@webrtc.org>
Commit-Queue: Guido Urdaneta <guidou@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32364}
2020-10-09 10:09:01 +00:00
4e8a797e14 Guard pipewire configs with rtc_use_pipewire.
[1] has introduced two dependencies on
//modules/desktop_capture:pipewire_config
even when rtc_use_pipewire=false, this CL changes the guard in order to
make sure GN doesn't raise errors when is_linux=true and
rtc_use_pipewire=false.

[1] - https://webrtc-review.googlesource.com/c/src/+/160649

No-Try: True
Bug: chromium:682122
Change-Id: I28d2f10936dd75199a2a98862751708eb1e5615a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187122
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32345}
2020-10-07 15:31:58 +00:00
9b87037073 Improve screen sharing with PipeWire on Wayland
Currently, sharing a screen or a window on Wayland opens unnecessary
preview dialog on Chromium side, which is then followed by a similar
dialog on xdg-desktop-portal side. The Chromium dialog is useless on
Wayland, as it doesn't show anything. This is because Chromium doesn't
have access to screen content as in case of X11 session. To fix this, we
want to avoid showing the preview dialog in case we find that we run on
Wayland and only pick a screen or a window from the dialog that comes
from xdg-desktop-portal.

This patch splits BaseCapturerPipeWire class, moving portal related code
into XdgPortalBase, which does all the DBus communication and which is
supposed to be reused by BaseCapturerPipeWire when the user confirms
the dialog from xdg-desktop-portal. The XdgPortalBase is extended to
support multiple calls at once, where each call is identified by Id.

Relevant change on Chromium side will be in a different review.

Bug: chromium:682122
Change-Id: If8afd36da66231eb154cdc00114908ac897ee4cf
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/160649
Commit-Queue: Tommi <tommi@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32342}
2020-10-07 12:58:28 +00:00
25b0dee820 Reland "Begin implementing WGC CaptureFrame"
This reverts commit 61709a3233174618d5ab46e1ee5847e4b150c7ef.

Reason for revert: Some downstream projects have issues building this
change due to the inclusion of the <windows.graphics.capture.h> header
which is newly available in the Win 10 SDK v10.0.19041.

To get around this issue for now, this change adds an off-by-default
build flag for these files. However, in the future we will want to
toggle this flag on, and the downstream projects will either need to
update their SDK versions or toggle this flag in their WebRTC clone.

Original change's description:
> Revert "Begin implementing WGC CaptureFrame"
>
> This reverts commit e820cef5340610b9beebbcb63868743b95b97fcd.
>
> Reason for revert: Breaks downstream client. I will investigate and
> get back with a suggestion to fix.
>
> Original change's description:
> > Begin implementing WGC CaptureFrame
> >
> > This change introduces the design that will allow us to deliver frames
> > synchronously to callers despite the Windows.Graphics.Capture APIs being
> > inherently asynchronous.
> >
> > We achieve this by having WindowCapturerWinWgc create and maintain a
> > WgcCaptureSession object for each window that it is asked to capture a
> > frame for. The capture session object will be the class that actually
> > uses the WGC APIs, and it will store the frames it receives in a frame
> > pool and deliver them via GetMostRecentFrame.
> >
> > The next CL will add the necessary functionality to the
> > WgcCaptureSession class.
> >
> > Bug: webrtc:9273
> > Change-Id: I44e164f4874503d8ccc8e6a210e74f9c8458f6c4
> > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184220
> > Commit-Queue: Austin Orion <auorion@microsoft.com>
> > Reviewed-by: Tommi <tommi@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#32240}
>
> TBR=mbonadei@webrtc.org,jamiewalch@chromium.org,tommi@webrtc.org,auorion@microsoft.com
>
> Change-Id: I114944357ce5be7d1e2da817703dc95d544aa99a
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: webrtc:9273
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186045
> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32248}

Bug: webrtc:9273
Change-Id: I9644fbf8f1fd1a84cb716176b8f14e3683a3f7cb
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186423
Commit-Queue: Tommi <tommi@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32286}
2020-10-02 07:29:31 +00:00
61709a3233 Revert "Begin implementing WGC CaptureFrame"
This reverts commit e820cef5340610b9beebbcb63868743b95b97fcd.

Reason for revert: Breaks downstream client. I will investigate and
get back with a suggestion to fix.

Original change's description:
> Begin implementing WGC CaptureFrame
>
> This change introduces the design that will allow us to deliver frames
> synchronously to callers despite the Windows.Graphics.Capture APIs being
> inherently asynchronous.
>
> We achieve this by having WindowCapturerWinWgc create and maintain a
> WgcCaptureSession object for each window that it is asked to capture a
> frame for. The capture session object will be the class that actually
> uses the WGC APIs, and it will store the frames it receives in a frame
> pool and deliver them via GetMostRecentFrame.
>
> The next CL will add the necessary functionality to the
> WgcCaptureSession class.
>
> Bug: webrtc:9273
> Change-Id: I44e164f4874503d8ccc8e6a210e74f9c8458f6c4
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184220
> Commit-Queue: Austin Orion <auorion@microsoft.com>
> Reviewed-by: Tommi <tommi@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32240}

TBR=mbonadei@webrtc.org,jamiewalch@chromium.org,tommi@webrtc.org,auorion@microsoft.com

Change-Id: I114944357ce5be7d1e2da817703dc95d544aa99a
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:9273
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186045
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32248}
2020-09-30 10:47:53 +00:00
e820cef534 Begin implementing WGC CaptureFrame
This change introduces the design that will allow us to deliver frames
synchronously to callers despite the Windows.Graphics.Capture APIs being
inherently asynchronous.

We achieve this by having WindowCapturerWinWgc create and maintain a
WgcCaptureSession object for each window that it is asked to capture a
frame for. The capture session object will be the class that actually
uses the WGC APIs, and it will store the frames it receives in a frame
pool and deliver them via GetMostRecentFrame.

The next CL will add the necessary functionality to the
WgcCaptureSession class.

Bug: webrtc:9273
Change-Id: I44e164f4874503d8ccc8e6a210e74f9c8458f6c4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184220
Commit-Queue: Austin Orion <auorion@microsoft.com>
Reviewed-by: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32240}
2020-09-29 19:14:29 +00:00
de95329daa Delete macros RTC_DISALLOW_ASSIGN and RTC_DISALLOW_IMPLICIT_CONSTRUCTORS
The former was unused, the latter is replaced with the explicit C++11
deletions. The related RTC_DISALLOW_COPY_AND_ASSIGN is left for now,
it is used in a lot more places.

Bug: None
Change-Id: I49503e7f2b9ff43c6285f8695833479bbc18c380
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185500
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32224}
2020-09-29 10:19:20 +00:00
37e22f1a4c Compile screen capturer mac test only when is_mac=true.
Starting from [1], GN is not using the global filter to implicitly
compile sources only on some platforms.

[1] - https://chromium-review.googlesource.com/c/chromium/src/+/2426564

Bug: None
Change-Id: I6f547e0bddc9cc87625d5b40a5aa1148b8dfd2d2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185808
Reviewed-by: Andrey Logvin <landrey@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32210}
2020-09-28 14:04:41 +00:00
16db7fff49 Move win32 files to a new "win32" target to avoid cyclic dependencies.
I ran into this when using repeating_task, which depends on clock (in
system_wrappers) which in turn added a dependency on rtc_base on Windows
due to win32 files. That's a problem since rtc_base depends on
repeating_task:

  //rtc_base:rtc_base ->
  //rtc_base/task_utils:repeating_task ->
  //system_wrappers:system_wrappers ->
  //rtc_base:rtc_base

We could additionally consider moving Clock out of system_wrappers.

Bug: webrtc:9987
Change-Id: I54ed715ad5eb9e3f5dd6c322233c18c05d895dff
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185506
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32203}
2020-09-26 11:54:50 +00:00
e4642dac6c Updating the OWNERS file for desktop capture
Change-Id: If5ddad06f0c5ce306e919de1f3a182986abaa0fe
Bug: webrtc:11938
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/184281
Commit-Queue: Joe Downing <joedow@google.com>
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#32109}
2020-09-15 21:34:24 +00:00
f264e70a47 Expand is_linux to is_linux || is_chromeos.
Currently is_linux is set to true on Chrome OS build,
but it is planned to be set false. This CL is the preparation
to keep the compatibility.

Bug: chromium:1110266
Test: Build locally.
Change-Id: Ic79a202b0b3baeff157955cd03a07556bfb958a8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183860
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Hidehiko Abe <hidehiko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#32073}
2020-09-10 17:01:16 +00:00
7f509e1313 Fixing a crash when capturing non-DPI aware windows at high DPIs
For Non-DPI aware windows, we need to figure out the current DPI
and scale the content accordingly, the current behavior works ok
for until the clipped region pushes the content outside of the
frame and then the capture will fail.  When this happens, the
captured frame may be blank or it could cause the browser to crash.

The issue is that the left and top clipped regions are not being
scaled along with the content (the captured window region is
contained within a larger window frame).  When the clipped window
and window frame are scaled, the original offset for left and top
are not adjusted so after a certain DPI, this offset causes the
clipped region to get pushed outside of the frame which is why
the capture fails.

The fix is to scale the left and top clipped regions and translate
the clipped region accordingly.  This change will only affect non-DPI
aware windows.

Bug: chromium:1083527
Change-Id: I893c2cb362cbaa01170d1e58465e43c3517139ad
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183660
Commit-Queue: Joe Downing <joedow@google.com>
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#32065}
2020-09-09 20:55:05 +00:00
6ef21a7af0 Revert "Reland "reenable mouse_cursor_monitor tests on linux""
This reverts commit bddedcbb333dbd501b4456dc2a2bc48ef50d21b5.

Reason for revert: Breaks downstream project.

Original change's description:
> Reland "reenable mouse_cursor_monitor tests on linux"
> 
> This is a reland of 79098821a23f9de49f70cb3794b51e2730bffa01
> with changes to disable the tests when not building with X11 support.
> 
> TBR=sergeyu@chromium.org
> Original change's description:
> > reenable mouse_cursor_monitor tests on linux
> >
> > BUG=webrtc:3245
> >
> > Change-Id: Ibf9cd929b22a0a519950621da46eb9f5b3febd73
> > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181367
> > Reviewed-by: Tommi <tommi@webrtc.org>
> > Reviewed-by: Sergey Ulanov <sergeyu@google.com>
> > Commit-Queue: Tommi <tommi@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#31940}
> 
> BUG=webrtc:3245
> 
> Change-Id: I882e08f6f425df357f16fa4db25dcdf79db1f367
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181882
> Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32047}

TBR=mbonadei@webrtc.org,kwiberg@webrtc.org,nisse@webrtc.org,sergeyu@chromium.org,philipp.hancke@googlemail.com

Change-Id: I2196dcbf996057dada79cc4cbae6522d6a934c75
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:3245
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183544
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32053}
2020-09-07 18:29:13 +00:00
bddedcbb33 Reland "reenable mouse_cursor_monitor tests on linux"
This is a reland of 79098821a23f9de49f70cb3794b51e2730bffa01
with changes to disable the tests when not building with X11 support.

TBR=sergeyu@chromium.org
Original change's description:
> reenable mouse_cursor_monitor tests on linux
>
> BUG=webrtc:3245
>
> Change-Id: Ibf9cd929b22a0a519950621da46eb9f5b3febd73
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181367
> Reviewed-by: Tommi <tommi@webrtc.org>
> Reviewed-by: Sergey Ulanov <sergeyu@google.com>
> Commit-Queue: Tommi <tommi@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31940}

BUG=webrtc:3245

Change-Id: I882e08f6f425df357f16fa4db25dcdf79db1f367
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181882
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32047}
2020-09-07 11:57:01 +00:00
bef022bde0 Refactor cpu_features_wrapper.h functions from C to C++.
As mentioned on https://webrtc-review.googlesource.com/c/src/+/183380,
then relanded as https://webrtc-review.googlesource.com/c/src/+/183444,
functions in cpu_features_wrapper.h should be refactored to use
C++ features like namespaces and drop the WebRtc_ prefix.

Bug: None
Change-Id: I3e83e1668f9bf48a5d8e85d809f006666b7fa45e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183445
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32045}
2020-09-07 08:44:24 +00:00
66e7338617 Reland "Merge cpu_features build targets into //system_wrappers."
This is a reland of 2b242d8fba59ccf67e4c5bcf5a1ea80917a23e1c

Original change's description:
> Merge cpu_features build targets into //system_wrappers.
>
> Before this CL, functions declared in cpu_features_wrapper.h where
> not defined in the same build target, causing brittle builds that
> might fail at link time if the binary was not depending on
> //system_wrappers (the target with the definitions), violating [1].
>
> This CL moves everything into //system_wrappers and also moves
> cpu_features_wrapper.h definitions from C to C++ (in order to be able
> to add the definitions to a C++ build target like //system_wrappers).
>
> [1] - https://webrtc.googlesource.com/src/+/refs/heads/master/style-guide.md#h-cc-pairs
>
> Bug: None
> Change-Id: I5a0009cddb17206b19f2a71eeba722faacc4bcae
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183380
> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32039}

TBR=kwiberg@webrtc.org

Bug: None
Change-Id: I1695b9a34d3ec20c50c1202a745f64fac58edef0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183444
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32042}
2020-09-06 10:38:23 +00:00
d156a0d061 Revert "Merge cpu_features build targets into //system_wrappers."
This reverts commit 2b242d8fba59ccf67e4c5bcf5a1ea80917a23e1c.

Reason for revert: Breaks downstream project.

Original change's description:
> Merge cpu_features build targets into //system_wrappers.
> 
> Before this CL, functions declared in cpu_features_wrapper.h where
> not defined in the same build target, causing brittle builds that
> might fail at link time if the binary was not depending on
> //system_wrappers (the target with the definitions), violating [1].
> 
> This CL moves everything into //system_wrappers and also moves
> cpu_features_wrapper.h definitions from C to C++ (in order to be able
> to add the definitions to a C++ build target like //system_wrappers).
> 
> [1] - https://webrtc.googlesource.com/src/+/refs/heads/master/style-guide.md#h-cc-pairs
> 
> Bug: None
> Change-Id: I5a0009cddb17206b19f2a71eeba722faacc4bcae
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183380
> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32039}

TBR=mbonadei@webrtc.org,kwiberg@webrtc.org

Change-Id: I4daa7582e55a0343eef72f08ed023c73e0b6456b
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: None
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183443
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32040}
2020-09-05 21:18:40 +00:00
2b242d8fba Merge cpu_features build targets into //system_wrappers.
Before this CL, functions declared in cpu_features_wrapper.h where
not defined in the same build target, causing brittle builds that
might fail at link time if the binary was not depending on
//system_wrappers (the target with the definitions), violating [1].

This CL moves everything into //system_wrappers and also moves
cpu_features_wrapper.h definitions from C to C++ (in order to be able
to add the definitions to a C++ build target like //system_wrappers).

[1] - https://webrtc.googlesource.com/src/+/refs/heads/master/style-guide.md#h-cc-pairs

Bug: None
Change-Id: I5a0009cddb17206b19f2a71eeba722faacc4bcae
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183380
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32039}
2020-09-05 20:43:27 +00:00
16dfcdbc1c Revert "reenable mouse_cursor_monitor tests on linux"
This reverts commit 79098821a23f9de49f70cb3794b51e2730bffa01.

Reason for revert: Breaks downstream project.

Original change's description:
> reenable mouse_cursor_monitor tests on linux
> 
> BUG=webrtc:3245
> 
> Change-Id: Ibf9cd929b22a0a519950621da46eb9f5b3febd73
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181367
> Reviewed-by: Tommi <tommi@webrtc.org>
> Reviewed-by: Sergey Ulanov <sergeyu@google.com>
> Commit-Queue: Tommi <tommi@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31940}

TBR=tommi@webrtc.org,sergeyu@google.com,sergeyu@chromium.org,philipp.hancke@googlemail.com

Change-Id: I4ee3ff56b29321f48ccaead19bd1f236dfc246e0
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:3245
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181861
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31947}
2020-08-17 11:05:53 +00:00
79098821a2 reenable mouse_cursor_monitor tests on linux
BUG=webrtc:3245

Change-Id: Ibf9cd929b22a0a519950621da46eb9f5b3febd73
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181367
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Sergey Ulanov <sergeyu@google.com>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31940}
2020-08-17 09:27:49 +00:00
17a1654670 Reland "[XProto] Add SharedXDisplay::IgnoreXServerGrabs"
This is a reland of cf8ea9c25903edb2c907a3cf18e1d31e0196e2e9

Original change's description:
> [XProto] Add SharedXDisplay::IgnoreXServerGrabs
>
> This is necessary for Chromium CL:
> https://chromium-review.googlesource.com/c/chromium/src/+/2327373
>
> BUG=chromium:1066670
>
> Change-Id: I8c5e5976d6c4737135254b9715b3aa5c885bfc8c
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180773
> Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
> Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#31901}

TBR=jamiewalch@chromium.org, thomasanderson@chromium.org

Bug: chromium:1066670
Change-Id: I8ea0a2ff5445524648243635724014ff5337767c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181460
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31917}
2020-08-12 09:06:30 +00:00
c61e780dc8 Revert "[XProto] Add SharedXDisplay::IgnoreXServerGrabs"
This reverts commit cf8ea9c25903edb2c907a3cf18e1d31e0196e2e9.

Reason for revert: Breaks an upstream project.

Original change's description:
> [XProto] Add SharedXDisplay::IgnoreXServerGrabs
> 
> This is necessary for Chromium CL:
> https://chromium-review.googlesource.com/c/chromium/src/+/2327373
> 
> BUG=chromium:1066670
> 
> Change-Id: I8c5e5976d6c4737135254b9715b3aa5c885bfc8c
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180773
> Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
> Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#31901}

TBR=jamiewalch@chromium.org,sergeyu@chromium.org,thomasanderson@chromium.org

Change-Id: I666996581e78e783d8028c601559f0c5871a7145
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: chromium:1066670
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181362
Reviewed-by: Andrey Logvin <landrey@webrtc.org>
Commit-Queue: Andrey Logvin <landrey@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31903}
2020-08-11 08:25:12 +00:00
cf8ea9c259 [XProto] Add SharedXDisplay::IgnoreXServerGrabs
This is necessary for Chromium CL:
https://chromium-review.googlesource.com/c/chromium/src/+/2327373

BUG=chromium:1066670

Change-Id: I8c5e5976d6c4737135254b9715b3aa5c885bfc8c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180773
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#31901}
2020-08-11 02:42:56 +00:00
3cb525b378 Rename CriticalSection to RecursiveCriticalSection.
This name change communicates that the recursive critical section
should not be used for new code.
The relevant files are renamed rtc_base/critical_section* ->
rtc_base/deprecated/recursive_critical_section*

Bug: webrtc:11567
Change-Id: I73483a1c5e59c389407a981efbfc2cfe76ccdb43
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179483
Commit-Queue: Markus Handell <handellm@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31754}
2020-07-17 09:19:50 +00:00
1ad89441ae Implement Source enumeration and selection for WGC capturer
This change implements the GetSourceList and SelectSource APIs from the
DesktopCapturer interface for WindowCapturerWinWgc. No functional
changes were made as the WGC capturer is not in use yet.

I refactored the source enumeration functionality out of the GDI
capturer and into the utils file, so both of the capturers can share
the implementation.

This change also renames the window capturers to include Win in the
name, and updates some of the out dated code style.

I've tested these changes by running the related unit tests and
applying them to a Chromium enlistment and testing on
https://webrtc.github.io/samples/src/content/getusermedia/getdisplaymedia/


Bug: webrtc:9273
Change-Id: If0ca023cb13900ab2b897aec0f38333f75a1b748
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178960
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Austin Orion <auorion@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#31748}
2020-07-16 22:09:47 +00:00
3d2210876e Remove unused critical section includes.
Bug: webrtc:11567
Change-Id: Ic5e43c51ce06c0619adc265d12ad4bef73a9df76
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179521
Reviewed-by: Tommi <tommi@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31745}
2020-07-16 13:52:28 +00:00
4379a7db1f Reland "Migrate modules/desktop_capture and modules/video_capture to webrtc::Mutex."
This is a reland of 44dd3d743517fe85212ba4f68bda1e78c2e6d7ec

Original change's description:
> Migrate modules/desktop_capture and modules/video_capture to webrtc::Mutex.
> 
> Bug: webrtc:11567
> Change-Id: I7bfca17f91bf44151148f863480ce77804d53a04
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178805
> Commit-Queue: Markus Handell <handellm@webrtc.org>
> Reviewed-by: Tommi <tommi@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31681}

Bug: webrtc:11567
Change-Id: I03a32cb7194cffb9e678355c4af4d370b39384b3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179093
Reviewed-by: Tommi <tommi@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31716}
2020-07-13 12:22:08 +00:00
1added5666 Revert "Migrate modules/desktop_capture and modules/video_capture to webrtc::Mutex."
This reverts commit 44dd3d743517fe85212ba4f68bda1e78c2e6d7ec.

Reason for revert: crbug.com/1104081

Original change's description:
> Migrate modules/desktop_capture and modules/video_capture to webrtc::Mutex.
> 
> Bug: webrtc:11567
> Change-Id: I7bfca17f91bf44151148f863480ce77804d53a04
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178805
> Commit-Queue: Markus Handell <handellm@webrtc.org>
> Reviewed-by: Tommi <tommi@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31681}

TBR=tommi@webrtc.org,handellm@webrtc.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: webrtc:11567
Change-Id: I4ee39947ba206522bce611341caef84ddb538068
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/179080
Reviewed-by: Markus Handell <handellm@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31702}
2020-07-10 13:43:22 +00:00
61c2d99d1e Add skeleton of new capturer that uses Windows.Graphics.Capture API
This change lays the foundation for the new DesktopCapturer
implementation which will use the Windows.Graphics.Capture API.

In line with the other platform specific DesktopCapturer
implementations, I've moved the actual implementations into the win/
subdirectory and repurposed window_capturer_win.cc to instantiate
the most appropriate implementation. This will be where the WebRTC
field trial (or similar mechanism) and Windows version checks will go
when we begin to roll out the new implementation.

I've verified that the existing window capture functionality still works
by dropping these changes into the third_party/webrtc folder of a
Chromium enlistment, going to
https://webrtc.github.io/samples/src/content/getusermedia/getdisplaymedia/
and stepping through this new path under a debugger, and running the
existing WindowCapturerTests.

The next change in this series will begin to add functionality to the
new window_capturer_win_wgc files.

Bug: webrtc:9273
Change-Id: Ifc36ec69aed19563b9c20ef022760fb9c45cae25
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178403
Commit-Queue: Austin Orion <auorion@microsoft.com>
Reviewed-by: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31690}
2020-07-09 17:49:11 +00:00
44dd3d7435 Migrate modules/desktop_capture and modules/video_capture to webrtc::Mutex.
Bug: webrtc:11567
Change-Id: I7bfca17f91bf44151148f863480ce77804d53a04
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178805
Commit-Queue: Markus Handell <handellm@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31681}
2020-07-08 20:35:04 +00:00
c7f0dff191 Convert GN libs lists to frameworks
GN recently added support for Apple frameworks to link, rather than
overloading the libs lists. This pulls .frameworks out of the libs
lists, so that GN can stop supporting .frameworks in libs in the
future.

Bug: chromium:1052560
Change-Id: I263230ddd3c468061584423bba9e1f887503bcaa
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178601
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Cr-Commit-Position: refs/heads/master@{#31632}
2020-07-06 10:08:09 +00:00
2dcf348011 Use absl_deps in order to preapre to the Abseil component build release.
Bug: webrtc:1046390
Change-Id: Ia35545599de23b1a2c2d8be2d53469af7ac16f1d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176502
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31463}
2020-06-08 12:59:40 +00:00
ed5d594730 Replace mock macros with unified MOCK_METHOD macro
Bug: webrtc:11564
Change-Id: I6398b052ec85d2f739755723629bc5da98fb30e3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176180
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31376}
2020-05-28 14:11:53 +00:00
2aa935684a Reset frame queue in ScreenCapturerX11::SelectSource to fix issues with different sized monitors.
When Chromium displays the selection dialog for screens it gets the thumbnails by calling SelectSource for the first monitor then CaptureFrame, then SelectSource for the next monitor then CaptureFrame, and so on. With 1 or 2 screens this does not show any issues, but with 3 or more screens the program may crash.

The queue of frame buffers is actually just 2 frame buffers that get swapped every time a frame is captured. When you have one monitor both buffers will be sized for it's resolution. When you have two monitor the first buffer is sized for the first monitor and the second buffer for the second monitor. Since the monitors are selected in turn monitors and frame buffers stay matched up and things work fine. With a third monitor the first buffer is sized for the first monitor, but then later reused to capture the third monitor. If the resolution of the third monitor does not match the first we either crash or have extra junk in the frame from when we captured the first monitor.

Bug: chromium:396091
Change-Id: I7b5ee914b02fee48c09422cee1e320396c9550c7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/174520
Commit-Queue: Jamie Walch <jamiewalch@chromium.org>
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#31229}
2020-05-12 22:45:05 +00:00
b52f7fb593 [DirectX] Fix vector allocation for raw data handling.
std::vector::reserve has the effect to reserve space in memory but does
not affect the result of size(), which keeps on returning 0. If size is
0, however, data() might either return null or not [1].

This CL fixes the use of reserve() in favour of resize() which
effectively allocates the memory in the vector and updates its size.
This way size() returns a value bigger than 0 and data() returns a valid
pointer.

[1] https://en.cppreference.com/w/cpp/container/vector/data

Fixed: chromium:1059764
Change-Id: Ida3dbe643710c6895f09b9da87b0075b7d7b28df
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/170470
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Armando Miraglia <armax@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30836}
2020-03-19 19:12:36 +00:00
e952b78c28 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."""""
This is a reland of c8496e9814ad2681b372946f143d1acb45475c7e

Original change's description:
> Reland "Reland "Reland "Reland "Implemented screen enumeration and selection for desktop capture under X11 using the X Resize and Rotate extension version 1.5.""""
> 
> This is a reland of 703a5d76d9ba8e7984509cc7bf70fb4ed84ef6be
> 
> Original change's description:
> > Reland "Reland "Reland "Implemented screen enumeration and selection for desktop capture under X11 using the X Resize and Rotate extension version 1.5."""
> >
> > This is a reland of af51be7869994a299451e22e6382ae641767b26d
> >
> > Original change's description:
> > > Reland "Reland "Implemented screen enumeration and selection for desktop capture under X11 using the X Resize and Rotate extension version 1.5.""
> > >
> > > This is a reland of a0adf3d4409036d095480e9bfa0fc06990362f84
> > >
> > > Original change's description:
> > > > Reland "Implemented screen enumeration and selection for desktop capture under X11 using the X Resize and Rotate extension version 1.5."
> > > >
> > > > This is a reland of e7153012682ccd3d1eacc18f802cab7820e3bad3
> > > >
> > > > Original change's description:
> > > > > Implemented screen enumeration and selection for desktop capture under X11 using the X Resize and Rotate entension version 1.5.
> > > > >
> > > > > Bug: chromium:396091
> > > > > Change-Id: Ia1b36c771632c536bb8d15322461b479fabc409e
> > > > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/148768
> > > > > Commit-Queue: Sergey Ulanov <sergeyu@chromium.org>
> > > > > Reviewed-by: Sergey Ulanov <sergeyu@chromium.org>
> > > > > Cr-Commit-Position: refs/heads/master@{#29083}
> > > >
> > > > Bug: chromium:396091
> > > > Change-Id: I0d9171ae5f340e0489e4b45ce5d97bc52b0a4904
> > > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156067
> > > > Commit-Queue: Tommi <tommi@webrtc.org>
> > > > Reviewed-by: Tommi <tommi@webrtc.org>
> > > > Cr-Commit-Position: refs/heads/master@{#29655}
> > >
> > > Bug: chromium:396091
> > > Change-Id: I47525911095fabc6cee613d03b0d83134b95b084
> > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158900
> > > Reviewed-by: Tomas Gunnarsson <tommi@chromium.org>
> > > Reviewed-by: Tommi <tommi@webrtc.org>
> > > Commit-Queue: Tommi <tommi@webrtc.org>
> > > Cr-Commit-Position: refs/heads/master@{#30032}
> >
> > Bug: chromium:396091
> > Change-Id: I03702c8ea935bb5fe1797defda1ba6b279b95217
> > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/165724
> > Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
> > Commit-Queue: Jamie Walch <jamiewalch@chromium.org>
> > Cr-Commit-Position: refs/heads/master@{#30461}
> 
> TBR=jamiewalch@chromium.org,tommi@webrtc.org
> 
> Bug: chromium:396091
> Change-Id: If9bd5e7b35240acc4dd528397926ba663fe2affc
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/168760
> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#30548}

Bug: chromium:396091
Change-Id: I6892d4bb49cdffe655c238c99e981c4927c9e6fd
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/169200
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Jamie Walch <jamiewalch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#30622}
2020-02-26 20:35:54 +00:00