Commit Graph

340 Commits

Author SHA1 Message Date
95b27217f2 Mac: fix screen capture freezes when context menu popup in Chrome.
Previously we grab a run loop source and add a source with mode
kCFRunLoopDefaultMode. With this mode, it won't callback when context menu popup
(which needs the NSEventTrackingRunLoopMode), then screen capture can't get
refreshed frame with context menu until the context menu is gone.
The fix is to use kCFRunLoopComonModes, which includes default,modal and event
tracking modes by default.

BUG=chromium:697780

Review-Url: https://codereview.webrtc.org/2732393003
Cr-Commit-Position: refs/heads/master@{#17171}
2017-03-10 17:46:49 +00:00
31bbee73a0 mac: Fix screen capture for whole-desktop capture.
DisplayStream refresh rects are in display coordinates. When the whole screen is
being captured, the coordinates passed to the ScreenCapturerHelper need to be in
screen coordinates. This CL translates display coordinates to screen
coordinates for whole screen capture.

BUG=chromium:699672

Review-Url: https://codereview.webrtc.org/2740823002
Cr-Commit-Position: refs/heads/master@{#17153}
2017-03-09 21:19:03 +00:00
9fa7e4a0ac Fix error handling in X11 screen capturer
Previusly errors from XServerPixelBuffer::CaptureRect() were not always
handled, which results in a black frame returned from the capturer
instead of an error.

BUG=webrtc:7305

Review-Url: https://codereview.webrtc.org/2738513005
Cr-Commit-Position: refs/heads/master@{#17101}
2017-03-08 01:02:20 +00:00
ccf57a71eb BlankDetectorDesktopCapturerWrapper to detect a blank DesktopFrame
DXGI capturer highly depends on video adapter and its driver, as well as Windows
itself. I recently found it cannot work on my virtualbox instance any more,
which indicates it may not work well on some specific systems. What worse is,
the APIs do not return a failure in such case.

So this change adds a BlankDetectorDesktopCapturerWrapper, which samples several
pixels in the frame returned by a DesktopCapturer implementation. If all the
pixels selected are blank, this wrapper returns a failure. A typical usage is to
combine BlankDetectorDesktopCapturerWrapper with FallbackDesktopCapturerWrapper,
and use GDI capturer in case of failure.

Usually less than 10000 pixels are checked, so the
BlankDetectorDesktopCapturerWrapper should not significant impact the capturer
performance.

This change is expected to resolve bug 682112 in another dimension.

BUG=682112

Review-Url: https://codereview.webrtc.org/2709523003
Cr-Original-Commit-Position: refs/heads/master@{#16984}
Committed: c4e9d210b3
Review-Url: https://codereview.webrtc.org/2709523003
Cr-Commit-Position: refs/heads/master@{#17024}
2017-03-03 22:40:15 +00:00
528a834ef0 Revert of BlankDetectorDesktopCapturerWrapper to detect a blank DesktopFrame (patchset #7 id:180001 of https://codereview.webrtc.org/2709523003/ )
Reason for revert:
Misses  deps for RTC_HISTOGRAM in Chrome.
email sent separately.

Also see https://codereview.chromium.org/2725143004/.

Original issue's description:
> BlankDetectorDesktopCapturerWrapper to detect a blank DesktopFrame
>
> DXGI capturer highly depends on video adapter and its driver, as well as Windows
> itself. I recently found it cannot work on my virtualbox instance any more,
> which indicates it may not work well on some specific systems. What worse is,
> the APIs do not return a failure in such case.
>
> So this change adds a BlankDetectorDesktopCapturerWrapper, which samples several
> pixels in the frame returned by a DesktopCapturer implementation. If all the
> pixels selected are blank, this wrapper returns a failure. A typical usage is to
> combine BlankDetectorDesktopCapturerWrapper with FallbackDesktopCapturerWrapper,
> and use GDI capturer in case of failure.
>
> Usually less than 500 pixels are checked, so the
> BlankDetectorDesktopCapturerWrapper should not impact the capturer performance.
>
> This change is expected to resolve bug 682112 in another dimension.
>
> BUG=682112
>
> Review-Url: https://codereview.webrtc.org/2709523003
> Cr-Commit-Position: refs/heads/master@{#16984}
> Committed: c4e9d210b3

TBR=sergeyu@chromium.org,zijiehe@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=682112

Review-Url: https://codereview.webrtc.org/2726983005
Cr-Commit-Position: refs/heads/master@{#16993}
2017-03-03 08:01:48 +00:00
c4e9d210b3 BlankDetectorDesktopCapturerWrapper to detect a blank DesktopFrame
DXGI capturer highly depends on video adapter and its driver, as well as Windows
itself. I recently found it cannot work on my virtualbox instance any more,
which indicates it may not work well on some specific systems. What worse is,
the APIs do not return a failure in such case.

So this change adds a BlankDetectorDesktopCapturerWrapper, which samples several
pixels in the frame returned by a DesktopCapturer implementation. If all the
pixels selected are blank, this wrapper returns a failure. A typical usage is to
combine BlankDetectorDesktopCapturerWrapper with FallbackDesktopCapturerWrapper,
and use GDI capturer in case of failure.

Usually less than 500 pixels are checked, so the
BlankDetectorDesktopCapturerWrapper should not impact the capturer performance.

This change is expected to resolve bug 682112 in another dimension.

BUG=682112

Review-Url: https://codereview.webrtc.org/2709523003
Cr-Commit-Position: refs/heads/master@{#16984}
2017-03-03 01:38:36 +00:00
634fcb32e3 DxgiOutputDuplicator AcquireNextFrame timeout can be 0
Timeout of AcquireNextFrame() can be 0. Though MSDN does not state it clear, I
tried it on my laptop, it works well, with almost zero capture time.
The screenshot is at https://drive.google.com/open?id=0B0OFNI4uoZGRNVZxekxCbm0ycmc.

BUG=682112

Review-Url: https://codereview.webrtc.org/2712353002
Cr-Commit-Position: refs/heads/master@{#16953}
2017-03-01 19:45:37 +00:00
8697f9afba Skips the first frame in DxgiDuplicatorController
A bug has been reported to complaint the ScreenCapturerWinDirectx cannot capture
the first frame, which is used in "Report an issue" page.
A simple solution here is to skip the first frame.

This change also removes the friend relationship between
DxgiDuplicatorController / DxgiAdapterDuplicator / DxgiOutputDuplicator, which
is not really necessary.

BUG=682112

Review-Url: https://codereview.webrtc.org/2703123002
Cr-Commit-Position: refs/heads/master@{#16815}
2017-02-24 05:43:40 +00:00
3fa87f782e Use FallbackDesktopCapturerWrapper in ScreenCapturerWinMagnifier
This is a trivial change to remove duplicate logic, i.e. fallback capturer, from
ScreenCapturerWinMagnifier.

BUG=webrtc:7215

Review-Url: https://codereview.webrtc.org/2704943002
Cr-Commit-Position: refs/heads/master@{#16781}
2017-02-22 21:47:00 +00:00
e352dbe6d5 Update comments in FallbackDesktopCapturerWrapper
Update the year in copyright headers from 2016 to 2017, and also rename a
variable in FallbackDesktopCapturerWrapperTest to follow coding style.

BUG=webrtc:7205

Review-Url: https://codereview.webrtc.org/2706193005
Cr-Commit-Position: refs/heads/master@{#16759}
2017-02-21 23:00:07 +00:00
8fefe9889d [DesktopCapturer] FallbackDesktopCapturerWrapper and its tests
FallbackDesktopCapturerWrapper is a DesktopCapturer implementation, which owns
two DesktopCapturer implementations. If the main DesktopCapturer fails, it uses
the secondary capturer. The logic is now used in ScreenCapturerWinMagnifier, and
it can also be shared in ScreenCapturerWinDirectx to fallback to Gdi capturer on
privilege prompt or login screen.

BUG=684937

Review-Url: https://codereview.webrtc.org/2697453002
Cr-Commit-Position: refs/heads/master@{#16677}
2017-02-17 22:32:04 +00:00
5fea5fb183 [DesktopCapture] Detect screen resolution changes in DirectX capturer
This change adds a ResolutionChangeDetector to help dxgi components, say
DxgiDuplicatorController and DxgiTexture to detect resolution changes.

BUG=684162

Review-Url: https://codereview.webrtc.org/2682913002
Cr-Commit-Position: refs/heads/master@{#16654}
2017-02-16 20:07:44 +00:00
0d729b3039 Check for use_x11 before runnig desktop_capture_modules_tests on linux.
The tests need "x11/shared_x_display.h" which is not included when use_x11 is false and we're on linux.

The problem is:

screen_capturer_integration_test.cc
 - requires ->
screen_drawer.h
 - requires ->
screen_drawer_linux.cc
 - requires ->
x11/shared_x_display.h
 which is not included when use_x11 is false.

BUG=None
NOTRY=True

Review-Url: https://codereview.webrtc.org/2684683003
Cr-Commit-Position: refs/heads/master@{#16529}
2017-02-10 09:38:23 +00:00
656610fbe7 Move frame_generator_capture.{cc, h} and video_capturer.h to video_test_common.
Remove video_capture as a dependency of test_common and add it as a dependency of modules_unittests, as it was before the refactor in https://codereview.webrtc.org/2629923002

BUG=webrtc:7037
NOTRY=True

Review-Url: https://codereview.webrtc.org/2666113003
Cr-Commit-Position: refs/heads/master@{#16439}
2017-02-06 10:21:11 +00:00
9cbb0a16e5 Reland of GN: Refactor modules_unittests to eliminate package boundary violations. (patchset #1 id:1 of https://codereview.webrtc.org/2651023005/ )
Reason for revert:
Will change the name from bwe_simulator to bwe_simulator_test.

Original issue's description:
> Revert of GN: Refactor modules_unittests to eliminate package boundary violations. (patchset #4 id:130001 of https://codereview.webrtc.org/2649563002/ )
>
> Reason for revert:
> Did break the bots.
> https://build.chromium.org/p/client.webrtc/builders/iOS32%20Release/builds/9807
>
> Original issue's description:
> > GN: Refactor modules_unittests to eliminate package boundary violations.
> >
> > Also move bwe_simulator to webrtc/modules/remote_bitrate_estimator
> >
> > BUG=webrtc:6954
> > NOTRY=True
> >
> > Review-Url: https://codereview.webrtc.org/2649563002
> > Cr-Commit-Position: refs/heads/master@{#16270}
> > Committed: 36cb55d715
>
> TBR=kjellander@webrtc.org
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=webrtc:6954
>
> Review-Url: https://codereview.webrtc.org/2651023005
> Cr-Commit-Position: refs/heads/master@{#16271}
> Committed: 3373eaa577

R=kjellander@webrtc.org
NOTRY=true
BUG=webrtc:6954

Review-Url: https://codereview.webrtc.org/2653173003
Cr-Commit-Position: refs/heads/master@{#16356}
2017-01-30 11:07:03 +00:00
3373eaa577 Revert of GN: Refactor modules_unittests to eliminate package boundary violations. (patchset #4 id:130001 of https://codereview.webrtc.org/2649563002/ )
Reason for revert:
Did break the bots.
https://build.chromium.org/p/client.webrtc/builders/iOS32%20Release/builds/9807

Original issue's description:
> GN: Refactor modules_unittests to eliminate package boundary violations.
>
> Also move bwe_simulator to webrtc/modules/remote_bitrate_estimator
>
> BUG=webrtc:6954
> NOTRY=True
>
> Review-Url: https://codereview.webrtc.org/2649563002
> Cr-Commit-Position: refs/heads/master@{#16270}
> Committed: 36cb55d715

TBR=kjellander@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:6954

Review-Url: https://codereview.webrtc.org/2651023005
Cr-Commit-Position: refs/heads/master@{#16271}
2017-01-25 16:11:28 +00:00
36cb55d715 GN: Refactor modules_unittests to eliminate package boundary violations.
Also move bwe_simulator to webrtc/modules/remote_bitrate_estimator

BUG=webrtc:6954
NOTRY=True

Review-Url: https://codereview.webrtc.org/2649563002
Cr-Commit-Position: refs/heads/master@{#16270}
2017-01-25 16:00:15 +00:00
9aa3f0a200 Reland of Moving webrtc.gni up one level from build/ (patchset #1 id:1 of https://codereview.webrtc.org/2657563002/ )
Reason for revert:
Starting to work on a fix (it seems that there are third_party dependencies that depends on the path to the webrtc.gni file)

Original issue's description:
> Revert of Moving webrtc.gni up one level from build/ (patchset #1 id:1 of https://codereview.webrtc.org/2651543003/ )
>
> Reason for revert:
> This was causing the following failure: https://build.chromium.org/p/chromium.webrtc.fyi/builders/Android%20Builder/builds/838/steps/generate_build_files/logs/stdio
>
> Original issue's description:
> > Moving webrtc.gni up one level from build/
> >
> > BUG=webrtc:7030
> >
> > Review-Url: https://codereview.webrtc.org/2651543003
> > Cr-Commit-Position: refs/heads/master@{#16241}
> > Committed: 35a32700fc
>
> TBR=kjellander@webrtc.org
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=webrtc:7030
>
> Review-Url: https://codereview.webrtc.org/2657563002
> Cr-Commit-Position: refs/heads/master@{#16244}
> Committed: 69dc7dbe24

TBR=kjellander@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:7030

Review-Url: https://codereview.webrtc.org/2654773002
Cr-Commit-Position: refs/heads/master@{#16247}
2017-01-24 14:58:22 +00:00
69dc7dbe24 Revert of Moving webrtc.gni up one level from build/ (patchset #1 id:1 of https://codereview.webrtc.org/2651543003/ )
Reason for revert:
This was causing the following failure: https://build.chromium.org/p/chromium.webrtc.fyi/builders/Android%20Builder/builds/838/steps/generate_build_files/logs/stdio

Original issue's description:
> Moving webrtc.gni up one level from build/
>
> BUG=webrtc:7030
>
> Review-Url: https://codereview.webrtc.org/2651543003
> Cr-Commit-Position: refs/heads/master@{#16241}
> Committed: 35a32700fc

TBR=kjellander@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:7030

Review-Url: https://codereview.webrtc.org/2657563002
Cr-Commit-Position: refs/heads/master@{#16244}
2017-01-24 13:14:35 +00:00
35a32700fc Moving webrtc.gni up one level from build/
BUG=webrtc:7030

Review-Url: https://codereview.webrtc.org/2651543003
Cr-Commit-Position: refs/heads/master@{#16241}
2017-01-24 12:49:35 +00:00
888874f761 Allow GCC 4.9 to compile Chromium
In order to implicit cast an lvalue to an rvalue when returning
from a function, the return type and type of variable in the return
statement previously had to be exactly the same. When this was not
the case, std::move was required. For instance, when returning a
std::unique_ptr<Derived> variable in a function with a
std::unique_ptr<Base> return type, std::move is required.

DR 1579 changed this, and allows for implicitly converting
to the return type, if the return type has a constructor(T&&), where
T is the type of the local variable being returned. DR 1579 was
implemented in GCC 5, but not in GCC 4.9 and below. By explicitly
qualifying the local variable with std::move, we allow for compiling
with GCC 4.9 and incur no performance penalty. The code is still
absolutely correct to the word of C++11.

BUG=chromium:682965

See also:
* https://bugs.gentoo.org/show_bug.cgi?id=600288
* https://stackoverflow.com/questions/22018115/converting-stdunique-ptrderived-to-stdunique-ptrbase#comment33375875_22018521
* http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3833.html#1579

Review-Url: https://codereview.webrtc.org/2642053003
Cr-Commit-Position: refs/heads/master@{#16175}
2017-01-20 04:20:45 +00:00
3626865be2 GN: Refactor modules_unittests to eliminate package boundary violations.
BUG=webrtc:6954

Review-Url: https://codereview.webrtc.org/2629923002
Cr-Commit-Position: refs/heads/master@{#16166}
2017-01-19 16:27:11 +00:00
eb4ca4e823 Replace RTC_DCHECK(false) with RTC_NOTREACHED().
Bulk of changes done using

  git grep -l 'RTC_DCHECK(false)' | \
    xargs sed -i 's/RTC_DCHECK(false)/RTC_NOTREACHED()/'

peerconnection.cc also used RTC_DCHECK(false && "msg") in two places,
which were updated manually.

BUG=webrtc:6424

Review-Url: https://codereview.webrtc.org/2623313004
Cr-Commit-Position: refs/heads/master@{#16026}
2017-01-12 10:24:27 +00:00
f423593f55 Reland of Refactor webrtc/modules/desktop_capture for GN check
Reason for revert:
Trying to reland this CL.

Original issue's description:
> Revert of Refactor webrtc/modules/desktop_capture for GN check (patchset #1 id:1 of https://codereview.webrtc.org/2593713002/ )
>
> Reason for revert:
> Apparently breaks Chromium compile for unknown reason:
> https://build.chromium.org/p/chromium.webrtc.fyi/builders/Linux%20Builder/builds/12314
>
> Original issue's description:
> > Refactor webrtc/modules/desktop_capture for GN check
> >
> > This moves some GN check configurations out of .gn to individual
> > targets.
> >
> > The now checked target is:
> > "//webrtc/modules/desktop_capture/*"
> >
> > BUG=webrtc:6828
> > NOTRY=True
> >
> > Review-Url: https://codereview.webrtc.org/2593713002
> > Cr-Commit-Position: refs/heads/master@{#15725}
> > Committed: 70870b9211
>
> TBR=sergeyu@chromium.org,mbonadei@webrtc.org
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=webrtc:6828
>
> Review-Url: https://codereview.webrtc.org/2597923002
> Cr-Commit-Position: refs/heads/master@{#15750}
> Committed: d943c48454

TBR=sergeyu@chromium.org,kjellander@webrtc.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG=webrtc:6828

Review-Url: https://codereview.webrtc.org/2609523002
Cr-Commit-Position: refs/heads/master@{#15832}
2016-12-29 11:35:56 +00:00
d943c48454 Revert of Refactor webrtc/modules/desktop_capture for GN check (patchset #1 id:1 of https://codereview.webrtc.org/2593713002/ )
Reason for revert:
Apparently breaks Chromium compile for unknown reason:
https://build.chromium.org/p/chromium.webrtc.fyi/builders/Linux%20Builder/builds/12314

Original issue's description:
> Refactor webrtc/modules/desktop_capture for GN check
>
> This moves some GN check configurations out of .gn to individual
> targets.
>
> The now checked target is:
> "//webrtc/modules/desktop_capture/*"
>
> BUG=webrtc:6828
> NOTRY=True
>
> Review-Url: https://codereview.webrtc.org/2593713002
> Cr-Commit-Position: refs/heads/master@{#15725}
> Committed: 70870b9211

TBR=sergeyu@chromium.org,mbonadei@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:6828

Review-Url: https://codereview.webrtc.org/2597923002
Cr-Commit-Position: refs/heads/master@{#15750}
2016-12-22 07:19:59 +00:00
70870b9211 Refactor webrtc/modules/desktop_capture for GN check
This moves some GN check configurations out of .gn to individual
targets.

The now checked target is:
"//webrtc/modules/desktop_capture/*"

BUG=webrtc:6828
NOTRY=True

Review-Url: https://codereview.webrtc.org/2593713002
Cr-Commit-Position: refs/heads/master@{#15725}
2016-12-21 07:42:05 +00:00
494dff4c07 Fix a screen capture issue on retina macOS devices.
The CGDisplayStream API returns rects in physical pixel coordinates, not
Density-Independent Pixel coordinates. The code was incorrectly re-applying the
dip_to_pixel scaling.

BUG=chromium:675490

Review-Url: https://codereview.webrtc.org/2588973002
Cr-Commit-Position: refs/heads/master@{#15720}
2016-12-21 01:00:22 +00:00
99f7bfde28 Change MANUAL -> DISABLED for ScreenCapturerIntegrationTest tests
It turns out MANUAL_ isn't a part of the supported gtest prefixes: it's a part of the
Chromium test launcher: https://cs.chromium.org/chromium/src/content/public/test/test_launcher.cc?rcl=0&l=69

Luckily, we can use DISABLED_ for the same purpose, since there's the --gtest_also_run_disabled_tests
flag we can use.

BUG=webrtc:6666, webrtc:6843
TBR=zijiehe@chromium.org

Review-Url: https://codereview.webrtc.org/2568013002 .
Cr-Commit-Position: refs/heads/master@{#15539}
2016-12-12 07:30:09 +00:00
8d1649d71b MANUAL tests of GDI capturers
ScreenCapturerWinGdi randomly returns black frames in test environment. The root
cause is still unknown, so change ScreenCapturerWinGdi tests into MANUAL mode to
execute in test environment, but unblock other developers. We can eventually get
a failure ratio and more samples for debugging.

BUG=webrtc:6666, webrtc:6843

Review-Url: https://codereview.webrtc.org/2564173002
Cr-Commit-Position: refs/heads/master@{#15518}
2016-12-10 00:00:10 +00:00
e83f4b3835 Enable screen capturer tests for Linux / DirectX capturer / magnifier capturer
GDI capturer may randomly return a blank frame. So this change enables tests for
Linux / DirectX capturer / magnifier capturer.

BUG=webrtc:6666

Review-Url: https://codereview.webrtc.org/2559583002
Cr-Commit-Position: refs/heads/master@{#15489}
2016-12-08 19:47:09 +00:00
2cd872a939 Log BitBlt failure
BitBlt returns a BOOL value, which should be taken care in ScreenCapturerWinGdi.
Meanwhile, this change also replaces assert() / abort() with RTC_DCHECK() /
RTC_CHECK() / RTC_NOTREACHED().

This change cannot fix the bug, the reason of the issue is still unknown, but it
is still the right thing to do.

In ScreenCapturerIntegrationTest, each frame will be captured at most 600 times.
Since the test case fails, which means the ScreenCapturerWinGdi consistently
returns a white frame for 600 times under a certain state. With this change,
instead of returning white frame, ScreenCapturerWinGdi will return a temporary
error. But I do not think a ScreenCapturerWinGdi can automatically recover by
retrying.

BUG=webrtc:6843

Review-Url: https://codereview.webrtc.org/2553353002
Cr-Commit-Position: refs/heads/master@{#15465}
2016-12-07 20:40:34 +00:00
d3de4abb50 Remove deprecated comments
A trivial change to remove a deprecated comment.

BUG=chromium:314516

Review-Url: https://codereview.webrtc.org/2553283002
Cr-Commit-Position: refs/heads/master@{#15454}
2016-12-07 00:32:12 +00:00
f4a5942e62 Disabled all ScreenCapturerIntegrationTests on Windows
TBR=zijiehe@chromium.org
BUG=webrtc:6666

Review-Url: https://codereview.webrtc.org/2538093002
Cr-Commit-Position: refs/heads/master@{#15321}
2016-11-30 10:39:00 +00:00
e61fbfffda Use RotateDesktopFrame in DirectX capturer
To support rotation in DirectX capturer, several other changes are also
required.
1. Removing AddRect in RotateDesktopFrame, this is a performance improvement.
DxgiOutputDuplicator creates a rotated DesktopRegion, which can be directly
add to updated_region.
2. DxgiOutputDuplicator::SourceRect() is not accurate, the rectangle in source
is controlled by |offset| or |rotation_| + |offset|, instead of desktop_rect().
3. The |region| in DxgiTexture::CopyFrom() is not accurate. It needs an
unrotated DesktopRegion which offsets by |offset| instead of desktop_rect(). To
avoid generating both rotated and unrotated updated_region, this parameter has
been removed. This impacts DxgiTextureStagning performance a little bit (1.5ms).
Refer to bug for details.

BUG=webrtc:6646

Review-Url: https://codereview.webrtc.org/2530303002
Cr-Commit-Position: refs/heads/master@{#15308}
2016-11-30 00:09:57 +00:00
166e59a70f Enable ScreenCapturerIntegrationTests
This change enables ScreenCapturerIntegrationTests.

BUG=webrtc:6666

Review-Url: https://codereview.webrtc.org/2513213002
Cr-Commit-Position: refs/heads/master@{#15307}
2016-11-29 22:46:56 +00:00
b890c95c33 Replace some asserts with DCHECKs
NOPRESUBMIT=true
BUG=webrtc:6779

Review-Url: https://codereview.webrtc.org/2535643002
Cr-Commit-Position: refs/heads/master@{#15295}
2016-11-29 13:30:47 +00:00
90ea7362fc Add DesktopFrame rotation functions
This change adds RotateDesktopFrame(), RotateRect(), RotateSize(),
ReverseRotate() functions, so an implementation can use these free functions to
rotate and copy pixels from one DesktopFrame to another at the same time.

This is the first part of the change to support rotation in DirectX capturer. In
a coming change, these functions will be used in DxgiOutputDuplicator to do the
rotation and copying.

Background,
DirectX APIs always return unrotated data buffer, so we need to rotate it to
match the user-selected rotation. What worse is except for the data buffer,
other variables return by these APIs are all rotated, e.g. output size, monitor
position. So we will eventually not be able to capture the rotated monitors,
because we cannot set their position and size correctly. Though
DXGI_OUTDUPL_DESC provides a DXGI_MODE_ROTATION enumeration to indicate the
output rotation, it does not provide a simple way to rotate an IDXGIResource,
which is the only thing we can get from duplication APIs. A typical user case
here is to use a matrix to transform the IDXGIResource and render it to a
surface. But since we do not render the IDXGIResource at all, we need to
manually rotate it.

BUG=314516

Review-Url: https://codereview.webrtc.org/2500883004
Cr-Commit-Position: refs/heads/master@{#15205}
2016-11-23 01:17:19 +00:00
1c062bf0af Fix module/desktop_capture compilation on iOS
modules/desktop_capture was failing to compile on iOS because some
files were not compiled.

BUG=667898
R=nicholss@chromium.org

Review URL: https://codereview.webrtc.org/2522083002 .

Cr-Commit-Position: refs/heads/master@{#15203}
2016-11-23 00:07:23 +00:00
1b0e3aa440 Remove deprecated CroppingWindowCapturer::Create
BUG=webrtc:6513

Review-Url: https://codereview.webrtc.org/2513103003
Cr-Commit-Position: refs/heads/master@{#15173}
2016-11-21 21:54:30 +00:00
2184155782 Add more logging in ScreenCapturerIntegrationTest
ScreenCapturerIntegrationTest is flaky on Windows systems due to some unknown
reason. But it's do easily impacted by the environment, so this change adds more
logging (entire screenshot) to help debugging.
Meanwhile, this change also includes a nice-to-have change in ScreenDrawerWin to
always bring the window to front in each WaitForPendingDraws() function call. I
cannot quite tell whether this change can help to resolve the issue, but it is
worth trying.

BUG=webrtc:6666

Review-Url: https://codereview.webrtc.org/2492723002
Cr-Commit-Position: refs/heads/master@{#15158}
2016-11-19 04:31:10 +00:00
b4af3d673a Remove all references to GYP
Remove all .gyp and .gypi files.
Remove entries from OWNERS files for *.isolate, *.gyp, *.gypi
Remove unused scripts in webrtc/build.

BUG=webrtc:6323
R=henrika@webrtc.org, phoglund@webrtc.org

Review URL: https://codereview.webrtc.org/2509703002 .

Cr-Commit-Position: refs/heads/master@{#15107}
2016-11-16 19:11:38 +00:00
2a3eb9f367 mac: Fix screen capture on secondary displays.
The old API CGScreenRegisterMoveCallback returned update rects in desktop
coordinates [secondary display has an origin != 0,0]. The new CGDisplayStream
API returns update rects in display coordinates [origin == 0,0]. Translating the
update rect based on the display's position on the desktop is now incorrect.

BUG=webrtc:6702

Review-Url: https://codereview.webrtc.org/2496413002
Cr-Commit-Position: refs/heads/master@{#15092}
2016-11-15 18:24:53 +00:00
8bc9326a0b DirectX capturer flickers on the second monitor
In DxgiOutputDuplicator, we need to convert between a monitor based coordinate
and a entire screen based coordinate. i.e. Copying an updated area from a
monitor (an output in DirectX API) to the entire screen frame (DesktopFrame).
But DxgiOutputDuplicator always assumes the coordinate is based on screen frame.
So we only need to convert a rectange in updated_region to monitor based
coordinate when copying data from texture_. But in last_frame_, the data are
always based on screen coordinate.

So fixes are both required in line 167 and line 180. In the previous one, we do
not need to convert the DesktopRect, which is already screen based, into screen
based coordinate. In the late one, we do not need to convert the DesktopRect at
all. So after these two changes, DxgiOutputDuplicator::TargetRect() function can
be removed.

Flickers of DirectX capturer can happen on any devices, but a virtual machine
can easily reproduce it. While on a regular high performance machine, it's
harder, but not totally impossible, to reproduce the issue.

BUG=314516

Review-Url: https://codereview.webrtc.org/2495143002
Cr-Commit-Position: refs/heads/master@{#15075}
2016-11-15 02:20:41 +00:00
69a0e3edea Use a default mouse cursor if XFixes is not supported.
BUG=chromium:428886

Review-Url: https://codereview.webrtc.org/2493413002
Cr-Commit-Position: refs/heads/master@{#15074}
2016-11-15 02:04:38 +00:00
372719b577 Remove screen_capturer_mock_objects.h
This is a trivial change to remove MockScreenCapturerCallback, and use
MockDesktopCapturerCallback to replace it.

BUG=webrtc:6513

Review-Url: https://codereview.webrtc.org/2494013003
Cr-Commit-Position: refs/heads/master@{#15047}
2016-11-12 01:18:39 +00:00
3074096816 Crash in DirectX capturer
A tiny but critical change to avoid a crash failure in DirectX capturer.
A good news is this failure is caught by ScreenCapturer integration tests.

BUG=314516

Review-Url: https://codereview.webrtc.org/2494893002
Cr-Commit-Position: refs/heads/master@{#15046}
2016-11-12 00:54:22 +00:00
c9a6e4a67e CroppingWindowCapturer::CreateCapturer() function to replace raw pointer version
The old CroppingWindowCapturer::Create() function returns a raw pointer, which
cannot explain the ownership.
So this change adds a CreateCapturer() function to return a unique_ptr.

BUG=webrtc:6513

Review-Url: https://codereview.webrtc.org/2496993003
Cr-Commit-Position: refs/heads/master@{#15045}
2016-11-11 23:13:39 +00:00
98903d2f5e Remove ScreenCapturer and WindowCapturer
This change removes ScreenCapturer and WindowCapturer from WebRTC.

BUG=webrtc:6513

Review-Url: https://codereview.webrtc.org/2490063002
Cr-Commit-Position: refs/heads/master@{#15033}
2016-11-11 05:57:19 +00:00
3045589e5f Remove references of ScreenCapturer and WindowCapturer
This change removes references of ScreenCapturer and WindowCapturer from WebRTC.
So after this change, ScreenCapturer and WindowCapturer classes can be entirely
removed.

BUG=webrtc:6513

Review-Url: https://codereview.webrtc.org/2489943004
Cr-Commit-Position: refs/heads/master@{#15006}
2016-11-10 00:37:57 +00:00
e083909f85 Remove evil defines out of shared_x_display.h
This is a trivial but dangerous change to remove X11/Xlib.h out of
shared_x_display.h. Since we do not have a strict and automatically
Include-What-You-Use rule, I cannot quite tell whether any Chromium source files
wrongly assume X11/Xlib.h will be included through shared_x_display.h. We can
fix the breaks in Chromium after this change has been failed to integrate to
Chromium.

BUG=webrtc:6513

Review-Url: https://codereview.webrtc.org/2482963003
Cr-Commit-Position: refs/heads/master@{#14987}
2016-11-08 20:47:19 +00:00