5 Commits

Author SHA1 Message Date
zijiehe
fef8653c5a An early analysis shows in DirectX based capturer, Windows API returns larger
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}
2016-09-05 22:26:40 +00:00
sergeyu@chromium.org
5d85819dd2 Fix DesktopAndCursorComposer to restore frames to the original state.
Screen capturers may reuse frame buffers and they expect that the
frame content isn't changed by the frame consumer.
DesktopAndCursorComposer draws mouse cursor on generated frames and
it was releasing the frames with the mouse cursor on them. Fixed
it to restore frame content erasing mouse cursor before returning
desktop frames.

BUG=crbug.com/316297
R=wez@chromium.org

Review URL: https://webrtc-codereview.appspot.com/3899004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5133 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-11-19 02:15:47 +00:00
sergeyu@chromium.org
e6e749da38 Add MouseCursorRenderer.
The new class acts as a wrapper for DesktopCapturer interface. It takes
mouse shape and position from MouseCursorCapturer and renders it on the
frames produced by underlying DesktopCapturer.

BUG=crbug.com/173265
R=wez@chromium.org
TBR=andrew@webrtc.org (modules.gyp)

Review URL: https://webrtc-codereview.appspot.com/2387004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4968 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-10-16 02:48:41 +00:00
sergeyu@chromium.org
ead3c6d508 Fix bugs in DesktopRegion::IntersectWith() and DesktopRect::IntersectWith().
IntersectWith() didn't work correctly which breaks screen capturers in chromium.

BUG=crbug.com/243160
R=alexeypa@chromium.org, wez@chromium.org

Review URL: https://webrtc-codereview.appspot.com/1560004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4102 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-05-24 21:07:20 +00:00
sergeyu@chromium.org
15e32ccd30 Add DesktopCapturer interface for desktop capturers.
The new DesktopCapturer interface will be used for screen and window
captures. Beside DesktopCapturer itself also added classes/interfaces
that it depends on.

R=alexeypa@chromium.org, tommi@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/1322007

git-svn-id: http://webrtc.googlecode.com/svn/trunk@3917 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-04-29 20:10:57 +00:00