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}
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}
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}
This change copies ScreenCapturerDifferWrapper to a new
DesktopCapturerDifferWrapper, and adds DesktopCapturer::CreateWindowCapturer and
DesktopCapturer::CreateScreenCapturer functions to replace
WindowCapturer::Create and ScreenCapturer::Create.
BUG=webrtc:6513
Committed: https://crrev.com/b763e39beba92b45baa09542f949daabbe6258a3
Review-Url: https://codereview.webrtc.org/2468753002
Cr-Original-Commit-Position: refs/heads/master@{#14880}
Cr-Commit-Position: refs/heads/master@{#14903}
Reason for revert:
Prevents WebRTC rolls into Chrome.
https://build.chromium.org/p/chromium.linux/builders/Blimp%20Linux%20%28dbg%29/builds/14848/steps/compile/logs/stdio
The reason for reverting is: Breaks
https://build.chromium.org/p/chromium.linux/builders/Blimp%20Linux%20%28dbg%2...
[881/894] SOLINK ./libcontent.so
FAILED: libcontent.so libcontent.so.TOC
../../third_party/webrtc/modules/desktop_capture/desktop_capturer.cc:45: error:
undefined reference to
'webrtc::DesktopCapturer::CreateRawWindowCapturer(webrtc::DesktopCaptureOptions
const&)'
../../third_party/webrtc/modules/desktop_capture/desktop_capturer.cc:56: error:
undefined reference to
'webrtc::DesktopCapturer::CreateRawScreenCapturer(webrtc::DesktopCaptureOptions
const&)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
Original issue's description:
> Add CreateWindowCapturer() and CreateScreenCapturer() in DesktopCapturer
>
> This change copies ScreenCapturerDifferWrapper to a new
> DesktopCapturerDifferWrapper, and adds DesktopCapturer::CreateWindowCapturer and
> DesktopCapturer::CreateScreenCapturer functions to replace
> WindowCapturer::Create and ScreenCapturer::Create.
>
> BUG=webrtc:6513
>
> Committed: https://crrev.com/b763e39beba92b45baa09542f949daabbe6258a3
> Cr-Commit-Position: refs/heads/master@{#14880}
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=webrtc:6513
Review-Url: https://codereview.webrtc.org/2471773002
Cr-Commit-Position: refs/heads/master@{#14884}
This change copies ScreenCapturerDifferWrapper to a new
DesktopCapturerDifferWrapper, and adds DesktopCapturer::CreateWindowCapturer and
DesktopCapturer::CreateScreenCapturer functions to replace
WindowCapturer::Create and ScreenCapturer::Create.
BUG=webrtc:6513
Review-Url: https://codereview.webrtc.org/2468753002
Cr-Commit-Position: refs/heads/master@{#14880}
I have chosen part of 2435603010 changes to compose this change.
According to the discussion we have made in previous change, this CL contains,
1. Source structure to represent a source of a DesktopCapturer.
2. GetSourceList / SelectSource / FocusOnSelectedSource functions in
DesktopCapturer.
3. ScreenCapturer and WindowCapturer forward corresponding functions to the new
DesktopCapturer APIs.
After this change, We can remove WindowCapturer & ScreenCapturer references from
Chromium, and use the new APIs.
BUG=webrtc:6513
Committed: https://crrev.com/9cb0b3b4ac916cdf52d97a63d923dfbe73f0541e
Review-Url: https://codereview.webrtc.org/2452263003
Cr-Original-Commit-Position: refs/heads/master@{#14830}
Cr-Commit-Position: refs/heads/master@{#14832}
Reason for revert:
Build break in Chromium
Original issue's description:
> Add DesktopCapturer GetSourceList SelectSource FocusOnSelectedSource functions
>
> I have chosen part of 2435603010 changes to compose this change.
> According to the discussion we have made in previous change, this CL contains,
> 1. Source structure to represent a source of a DesktopCapturer.
> 2. GetSourceList / SelectSource / FocusOnSelectedSource functions in
> DesktopCapturer.
> 3. ScreenCapturer and WindowCapturer forward corresponding functions to the new
> DesktopCapturer APIs.
>
> After this change, We can remove WindowCapturer & ScreenCapturer references from
> Chromium, and use the new APIs.
>
> BUG=webrtc:6513
>
> Committed: https://crrev.com/9cb0b3b4ac916cdf52d97a63d923dfbe73f0541e
> Cr-Commit-Position: refs/heads/master@{#14830}
TBR=sergeyu@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:6513
Review-Url: https://codereview.webrtc.org/2464553002
Cr-Commit-Position: refs/heads/master@{#14831}
I have chosen part of 2435603010 changes to compose this change.
According to the discussion we have made in previous change, this CL contains,
1. Source structure to represent a source of a DesktopCapturer.
2. GetSourceList / SelectSource / FocusOnSelectedSource functions in
DesktopCapturer.
3. ScreenCapturer and WindowCapturer forward corresponding functions to the new
DesktopCapturer APIs.
After this change, We can remove WindowCapturer & ScreenCapturer references from
Chromium, and use the new APIs.
BUG=webrtc:6513
Review-Url: https://codereview.webrtc.org/2452263003
Cr-Commit-Position: refs/heads/master@{#14830}
This is a trivial change, I just cutted and pasted part of the code in
screen_capturer_unittest.cc to screen_capturer_integration_test.cc, removed
DISABLED_ prefixes, and updated build file.
BUG=webrtc:6366
Review-Url: https://codereview.webrtc.org/2444583002
Cr-Commit-Position: refs/heads/master@{#14806}
Enabled the plugin and cleaned up all issues it found, mainly virtual
destructors not being marked as override.
BUG=webrtc:163
Review-Url: https://codereview.webrtc.org/2436503004
Cr-Commit-Position: refs/heads/master@{#14793}
Previously shared_desktop_frame.cc wasn't in primitives target, but it
is used in remoting client on android and the client should depend only
on primitives, but not desktop_capture overall.
BUG=653612
R=nicholss@chromium.org
Review URL: https://codereview.webrtc.org/2436913002 .
Cr-Commit-Position: refs/heads/master@{#14709}
We can use ScreenCapturerDifferWrapper if needed, otherwise ScreenCapturer does
not need to calculate updated region itself, setting to entire screen is enough.
BUG=633802
Review-Url: https://codereview.webrtc.org/2348803003
Cr-Commit-Position: refs/heads/master@{#14377}
This changes most non-test related rtc_source_set targets to be
rtc_static_library instead. Targets without any .cc files are excluded.
This should bring back the build behavior we used to have with GYP
(i.e. same symbols exported in the libjingle_peerconnection.a file, which
are used by some downstream projects).
After doing an Android build with these changes:
$ nm --defined-only -g -C out/Release/lib.unstripped/libjingle_peerconnection_so.so | grep -i createpeerconnectionf
00077c51 T Java_org_webrtc_PeerConnectionFactory_nativeCreatePeerConnectionFactory
$ nm --defined-only -g -C out/Release/obj/webrtc/api/libjingle_peerconnection.a | grep -i createpeerconnectionf
00000001 T webrtc::CreatePeerConnectionFactory(rtc::Thread*, rtc::Thread*, rtc::Thread*, webrtc::AudioDeviceModule*, cricket::WebRtcVideoEncoderFactory*, cricket::WebRtcVideoDecoderFactory*)
00000001 T webrtc::CreatePeerConnectionFactory()
See https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/cookbook.md#Note-on-static-libraries
for more details on this.
NOTICE: This should be further cleaned up in the future, to reduce
binary bloat and unnecessary linking time. Right now it's more
important to restore the desired build output though.
BUG=webrtc:6410, chromium:630755
Review-Url: https://codereview.webrtc.org/2361623004
Cr-Commit-Position: refs/heads/master@{#14364}
dirty region than the real screen change. A similar behavior may happen on other
platforms with damage notification support. So it's better to have an individual
layer to handle the Differ logic, and remove capturing independent logic out of
each ScreenCapturer* implementation.
So this change does following things,
1. Update differ_block to handle variable height. differ_block_sse2 has been
renamed to differ_vector_sse2.
2. A new ScreenCapturerDifferWrapper implementation to help set
DesktopFrame::updated_region(). It uses an underlying ScreenCapturer to do
the real capture work, and updates the updated region of DesktopFrame returned
from OnCaptureResult function.
3. FakeDesktopCapturer and FakeScreenCapturer to generate controllable
DesktopFrame by using DesktopFrameGenerator and DesktopFramePainter.
4. Test ScreenCapturerDifferWrapper by using FakeScreenCapturer.
After this change, we can eventually remove all Differ logic from
ScreenCapturer* implementations, and fix a potential crash bug in
ScreenCapturerLinux class. It wrongly assumes previous_frame() has a same size
as current_frame(). https://goo.gl/3nSqOC
BUG=633802
TBR=kjellander@webrtc.org
Review-Url: https://codereview.webrtc.org/2202443002
Cr-Commit-Position: refs/heads/master@{#14076}
Remove common_inherited_config from the targets and add it to the
template instead.
BUG=webrtc:6187
NOTRY=True
Review-Url: https://codereview.webrtc.org/2311843002
Cr-Commit-Position: refs/heads/master@{#14069}
Remove common_config from the targets' config and add
it to the template instead.
BUG=webrtc:6187
NOTRY=True
Review-Url: https://codereview.webrtc.org/2300413002
Cr-Commit-Position: refs/heads/master@{#14063}
Defines the rtc_executable, rtc_source_set, rtc_test and
rtc_static_library templates.
These templates provide no functionality yet, but will enable common
configuration to be introduced, avoiding repetition in every target
Changes summary:
- Prepend rtc_ to test, source_set, executable and static_library targets
- Change "configs -= [" to "suppressed_configs += ["
- Include webrtc/build/webrtc.gni where it wasn't included yet
- Delete import("//testing/test.gni"), since rtc_test makes it unnecessary.
BUG=webrtc:6187
TBR=henrik.lundin@webrtc.org,tommi@webrtc.org
NOTRY=True
Review-Url: https://codereview.webrtc.org/2301053002
Cr-Commit-Position: refs/heads/master@{#14043}
Fix some out-of-sync differences between GYP and GN targets for
desktop capture.
Remove sources that aren't used on iOS for that platform, to solve
linking errors that surfaced when flipping iOS to GN by default.
BUG=webrtc:5949
NOTRY=True
TBR=sergeyu@chromium.org
Review-Url: https://codereview.webrtc.org/2289103002
Cr-Commit-Position: refs/heads/master@{#13971}
It was disabled for some reason, even though in GYP it's enabled.
BUG=626067
NOTRY=True
Review-Url: https://codereview.webrtc.org/2247293002
Cr-Commit-Position: refs/heads/master@{#13780}
Current DirectX capturer cannot capture multiple video cards or monitors. But
according to DXGI desktop duplication sample (https://goo.gl/An0L9l), we can
capture multiple video cards and monitors by duplicating them one by one. So
instead of one IDXGIOutputDuplication instance, this change creates an
IDXGIOutputDuplication instance for each monitor, and merge the output into
one DesktopFrame.
Several other changes are also included,
1. Add supports to DXGI_OUTDUPL_DESC.DesktopImageInSystemMemory. When this flag
is true, we won't copy its content to staging buffer.
2. Capture one monitor instead of entire screen.
Above changes make the logic complex. But with some refactor work, the logic is
not disordered. Please refer to the doc @ https://goo.gl/hU1ifG.
BUG=314516
Review-Url: https://codereview.webrtc.org/2099123002
Cr-Commit-Position: refs/heads/master@{#13684}
Changes:
* Enabled protobuf for iOS globally.
* Set WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE on a global
scope similar to GYP since tests depend on it.
* Added missing rtc_libvpx_build_vp9 variable.
* Moved out audio_coding defines into .gni file to avoid code duplication
* Renamed files to avoid object naming conflicts that GN disallows:
* webrtc/modules/audio_processing/{echo_cancellation_unittest.cc->echo_cancellation_bit_exact_unittest.cc}
* webrtc/modules/video_coding/codecs/vp9/{screenshare_layers_unittest.cc->vp9_screenshare_layers_unittest.cc}
BUG=webrtc:5949
TESTED=Built and ran the tests on Mac. Also ran:
gn gen out/Default --args="rtc_enable_bwe_test_logging=true"
and verified that more objects are being built (1885 vs 1883)
when compiling modules_unittests.
NOTRY=True
NOPRESUBMIT=True
Review-Url: https://codereview.webrtc.org/2041233006
Cr-Commit-Position: refs/heads/master@{#13108}
Removed deprecated files, types and methods in modules/webrtc that were
kept there to avoid breaking chromium, and which are no longer needed.
BUG=172183
Review URL: https://codereview.webrtc.org/1909593002
Cr-Commit-Position: refs/heads/master@{#12457}
Add pylintrc file based on
https://code.google.com/p/chromium/codesearch#chromium/src/tools/perf/pylintrc
bit tightened up quite a bit (the one in depot_tools is far
more relaxed).
Remove a few excluded directories from pylint check and fixed/
suppressed all warnings generated.
Add GN format check + formatted all GN files using 'gn format'.
Cleanup redundant rules in tools/PRESUBMIT.py
TESTED=Ran 'git cl presubmit -vv', fixed the PyLint violations.
Ran it again with a modification in webrtc/build/webrtc.gni, formatted
all the GN files and ran it again.
R=henrika@webrtc.org, phoglund@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/50069004
Cr-Commit-Position: refs/heads/master@{#9274}
rtc_base drags in a bunch of unwieldly dependencies (e.g. nss and
json) not required for standalone webrtc (aka rtc/media). The root of
the problem appears to be that MessageQueue depends on a socket server.
(And since common.h -> logging.h -> thread.h -> messagequeue.h, this
dependency spreads quickly.)
This starts a new target for a "purified" subset of rtc_base. It adds
the files which are already being used, replacing the use of common.h
with checks.h. desktop_capture is a lost cause, and retains its
dependency on the full rtc_base.
The hope is that as additional components are desired they will be
cleaned and added to rtc_base_approved.
BUG=3806
R=andresp@webrtc.org, henrike@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/22649004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@7188 4adac7df-926f-26a2-2b94-8c16560cd09d
Now that WebRTC has rolled the chromium_revision past
http://crrev.com/284372 in r6784, clang has become the
default compiler. Since WebRTC standalone code doesn't
yet compile the Chromium Clang plugins enabled, this CL
disables them for the parts of the code that doesn't yet pass
compilation with them enabled.
The buildbots are using Goma which is not yet switched
over to Clang by default. That's why they're not red yet.
BUG=163
TEST=Passing compile locally on Linux using:
gn gen out/Debug --args="build_with_chromium=false is_debug=true" && ninja
-C out/Debug
gn gen out/Release --args="build_with_chromium=false is_debug=false" && ninja
-C out/Release
gn gen out/Default --args="build_with_chromium=false os=\"android\" cpu_arch=\"arm\" arm_version=7" && ninja -C out/Default
R=brettw@chromium.org
Review URL: https://webrtc-codereview.appspot.com/16279004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6966 4adac7df-926f-26a2-2b94-8c16560cd09d
Most WebRTC source files are using full paths for includes which
requires the root to be in the include path.
This is currently handled in the common_inherited_config config in
webrtc/BUILD.gn: the .. include_dir.
However, when built from Chromium, the include
paths are not inherited in the same way when building the all target.
Building the 'webrtc' target of Chrome works without the changes
in this CL, but the default target fails.
BUG=3441
TEST=Built the default target from a Chromium checkout with
https://codereview.chromium.org/321313006/ applied and
src/third_party/webrtc linked to the webrtc folder of the WebRTC
workspace.
R=brettw@chromium.org
Review URL: https://webrtc-codereview.appspot.com/15989004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6670 4adac7df-926f-26a2-2b94-8c16560cd09d
This should work as a foundation for all the work that is
left to do to make the parts of WebRTC that Chromium uses
to build with GN.
I implemented some the smaller modules myself in this CL.
The remaining work (TODO's in the .gn files) will be distributed
to various team members.
I'm adding myself to OWNERS files for BUILD.gn files in all the
directories where I'm adding a BUILD.gn file.
BUG=3441
TEST=
Successful compilation of WebRTC as standalone:
gn gen out/Default --args="build_with_chromium=false" && ninja -C out/Default
gn gen out/Default --args="build_with_chromium=false is_clang=true clang_use_chrome_plugins=false" && ninja -C out/Default
I built successfully from a Chromium checkout (with
https://codereview.chromium.org/321313006/ applied) using:
gn gen out/Default && ninja -C out/Default webrtc
R=brettw@chromium.org, niklas.enbom@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/13749004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6523 4adac7df-926f-26a2-2b94-8c16560cd09d