| 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(),
|
|
|