Index: webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.cc |
diff --git a/webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.cc b/webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.cc |
index bcfcb7e02792a86c940852aab545d1783f7b329d..b99763950ef77e52d6f6dd942947bce0e1b2bf6d 100644 |
--- a/webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.cc |
+++ b/webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.cc |
@@ -59,11 +59,7 @@ bool IsXImageRGBFormat(XImage* image) { |
namespace webrtc { |
-XServerPixelBuffer::XServerPixelBuffer() |
- : display_(NULL), window_(0), |
- x_image_(NULL), |
- shm_segment_info_(NULL), shm_pixmap_(0), shm_gc_(NULL) { |
-} |
+XServerPixelBuffer::XServerPixelBuffer() {} |
XServerPixelBuffer::~XServerPixelBuffer() { |
Release(); |
@@ -229,7 +225,9 @@ void XServerPixelBuffer::Synchronize() { |
if (shm_segment_info_ && !shm_pixmap_) { |
// XShmGetImage can fail if the display is being reconfigured. |
XErrorTrap error_trap(display_); |
- XShmGetImage(display_, window_, x_image_, 0, 0, AllPlanes); |
+ // XShmGetImage fails if the window is partially out of screen. |
+ xshm_get_image_succeeded_ = |
+ XShmGetImage(display_, window_, x_image_, 0, 0, AllPlanes); |
} |
} |
@@ -240,7 +238,7 @@ void XServerPixelBuffer::CaptureRect(const DesktopRect& rect, |
uint8_t* data; |
- if (shm_segment_info_) { |
+ if (shm_segment_info_ && (shm_pixmap_ || xshm_get_image_succeeded_)) { |
if (shm_pixmap_) { |
XCopyArea(display_, window_, shm_pixmap_, shm_gc_, |
rect.left(), rect.top(), rect.width(), rect.height(), |