Chromium Code Reviews| Index: webrtc/modules/desktop_capture/screen_capturer_x11.cc |
| diff --git a/webrtc/modules/desktop_capture/screen_capturer_x11.cc b/webrtc/modules/desktop_capture/screen_capturer_x11.cc |
| index 5540e6820fa1f7f66468f1173c6a1de3e18552f7..1a89ef8813212f904befaf918476744612c2e75b 100644 |
| --- a/webrtc/modules/desktop_capture/screen_capturer_x11.cc |
| +++ b/webrtc/modules/desktop_capture/screen_capturer_x11.cc |
| @@ -66,7 +66,7 @@ class ScreenCapturerLinux : public ScreenCapturer, |
| // from HandleXEvent(). In the non-DAMAGE case, this captures the |
| // whole screen, then calculates some invalid rectangles that include any |
| // differences between this and the previous capture. |
| - DesktopFrame* CaptureScreen(); |
| + std::unique_ptr<DesktopFrame> CaptureScreen(); |
| // Called when the screen configuration is changed. |
| void ScreenConfigurationChanged(); |
| @@ -82,23 +82,23 @@ class ScreenCapturerLinux : public ScreenCapturer, |
| DesktopCaptureOptions options_; |
| - Callback* callback_; |
| + Callback* callback_ = nullptr; |
| // X11 graphics context. |
| - GC gc_; |
| - Window root_window_; |
| + GC gc_ = nullptr; |
| + Window root_window_ = BadValue; |
| // XFixes. |
| - bool has_xfixes_; |
| - int xfixes_event_base_; |
| - int xfixes_error_base_; |
| + bool has_xfixes_ = false; |
| + int xfixes_event_base_ = -1; |
| + int xfixes_error_base_ = -1; |
| // XDamage information. |
| - bool use_damage_; |
| - Damage damage_handle_; |
| - int damage_event_base_; |
| - int damage_error_base_; |
| - XserverRegion damage_region_; |
| + bool use_damage_ = false; |
| + Damage damage_handle_ = 0; |
| + int damage_event_base_ = -1; |
| + int damage_error_base_ = -1; |
| + XserverRegion damage_region_ = 0; |
| // Access to the X Server's pixel buffer. |
| XServerPixelBuffer x_server_pixel_buffer_; |
| @@ -120,18 +120,7 @@ class ScreenCapturerLinux : public ScreenCapturer, |
| RTC_DISALLOW_COPY_AND_ASSIGN(ScreenCapturerLinux); |
| }; |
| -ScreenCapturerLinux::ScreenCapturerLinux() |
| - : callback_(NULL), |
| - gc_(NULL), |
| - root_window_(BadValue), |
| - has_xfixes_(false), |
| - xfixes_event_base_(-1), |
| - xfixes_error_base_(-1), |
| - use_damage_(false), |
| - damage_handle_(0), |
| - damage_event_base_(-1), |
| - damage_error_base_(-1), |
| - damage_region_(0) { |
| +ScreenCapturerLinux::ScreenCapturerLinux() { |
| helper_.SetLogGridSize(4); |
| } |
| @@ -249,7 +238,7 @@ void ScreenCapturerLinux::Capture(const DesktopRegion& region) { |
| // in a good shape. |
| if (!x_server_pixel_buffer_.is_initialized()) { |
| // We failed to initialize pixel buffer. |
| - callback_->OnCaptureCompleted(NULL); |
| + callback_->OnCaptureCompleted(std::unique_ptr<DesktopFrame>()); |
| return; |
| } |
| @@ -257,29 +246,26 @@ void ScreenCapturerLinux::Capture(const DesktopRegion& region) { |
| // Note that we can't reallocate other buffers at this point, since the caller |
| // may still be reading from them. |
| if (!queue_.current_frame()) { |
| - std::unique_ptr<DesktopFrame> frame( |
| - new BasicDesktopFrame(x_server_pixel_buffer_.window_size())); |
| - queue_.ReplaceCurrentFrame(SharedDesktopFrame::Wrap(frame.release())); |
| + queue_.ReplaceCurrentFrame( |
| + SharedDesktopFrame::Wrap(std::unique_ptr<DesktopFrame>( |
| + new BasicDesktopFrame(x_server_pixel_buffer_.window_size())))); |
| } |
| // Refresh the Differ helper used by CaptureFrame(), if needed. |
| DesktopFrame* frame = queue_.current_frame(); |
| - if (!use_damage_ && ( |
| - !differ_.get() || |
| - (differ_->width() != frame->size().width()) || |
| - (differ_->height() != frame->size().height()) || |
| - (differ_->bytes_per_row() != frame->stride()))) { |
| + if (!use_damage_ && |
| + (!differ_.get() || (differ_->width() != frame->size().width()) || |
|
Wez
2016/05/18 01:29:50
nit: !differ_
Sergey Ulanov
2016/05/31 12:02:49
Done.
|
| + (differ_->height() != frame->size().height()) || |
| + (differ_->bytes_per_row() != frame->stride()))) { |
| differ_.reset(new Differ(frame->size().width(), frame->size().height(), |
| - DesktopFrame::kBytesPerPixel, |
| - frame->stride())); |
| + DesktopFrame::kBytesPerPixel, frame->stride())); |
| } |
| - DesktopFrame* result = CaptureScreen(); |
| + std::unique_ptr<DesktopFrame> result = CaptureScreen(); |
| last_invalid_region_ = result->updated_region(); |
| - result->set_capture_time_ms( |
| - (rtc::TimeNanos() - capture_start_time_nanos) / |
| - rtc::kNumNanosecsPerMillisec); |
| - callback_->OnCaptureCompleted(result); |
| + result->set_capture_time_ms((rtc::TimeNanos() - capture_start_time_nanos) / |
| + rtc::kNumNanosecsPerMillisec); |
| + callback_->OnCaptureCompleted(std::move(result)); |
| } |
| bool ScreenCapturerLinux::GetScreenList(ScreenList* screens) { |
| @@ -311,8 +297,8 @@ bool ScreenCapturerLinux::HandleXEvent(const XEvent& event) { |
| return false; |
| } |
| -DesktopFrame* ScreenCapturerLinux::CaptureScreen() { |
| - DesktopFrame* frame = queue_.current_frame()->Share(); |
| +std::unique_ptr<DesktopFrame> ScreenCapturerLinux::CaptureScreen() { |
| + std::unique_ptr<SharedDesktopFrame> frame = queue_.current_frame()->Share(); |
| assert(x_server_pixel_buffer_.window_size().equals(frame->size())); |
| // Pass the screen size to the helper, so it can clip the invalid region if it |
| @@ -354,18 +340,18 @@ DesktopFrame* ScreenCapturerLinux::CaptureScreen() { |
| for (DesktopRegion::Iterator it(*updated_region); |
| !it.IsAtEnd(); it.Advance()) { |
| - x_server_pixel_buffer_.CaptureRect(it.rect(), frame); |
| + x_server_pixel_buffer_.CaptureRect(it.rect(), frame.get()); |
| } |
| } else { |
| // Doing full-screen polling, or this is the first capture after a |
| // screen-resolution change. In either case, need a full-screen capture. |
| DesktopRect screen_rect = DesktopRect::MakeSize(frame->size()); |
| - x_server_pixel_buffer_.CaptureRect(screen_rect, frame); |
| + x_server_pixel_buffer_.CaptureRect(screen_rect, frame.get()); |
| if (queue_.previous_frame()) { |
| // Full-screen polling, so calculate the invalid rects here, based on the |
| // changed pixels between current and previous buffers. |
| - RTC_DCHECK(differ_.get() != NULL); |
| + RTC_DCHECK(differ_); |
| RTC_DCHECK(queue_.previous_frame()->data()); |
| differ_->CalcDirtyRegion(queue_.previous_frame()->data(), |
| frame->data(), updated_region); |
| @@ -378,7 +364,7 @@ DesktopFrame* ScreenCapturerLinux::CaptureScreen() { |
| } |
| } |
| - return frame; |
| + return std::move(frame); |
| } |
| void ScreenCapturerLinux::ScreenConfigurationChanged() { |
| @@ -415,7 +401,7 @@ void ScreenCapturerLinux::SynchronizeFrame() { |
| void ScreenCapturerLinux::DeinitXlib() { |
| if (gc_) { |
| XFreeGC(display(), gc_); |
| - gc_ = NULL; |
| + gc_ = nullptr; |
| } |
| x_server_pixel_buffer_.Release(); |
| @@ -438,7 +424,7 @@ void ScreenCapturerLinux::DeinitXlib() { |
| // static |
| ScreenCapturer* ScreenCapturer::Create(const DesktopCaptureOptions& options) { |
| if (!options.x_display()) |
| - return NULL; |
| + return nullptr; |
| std::unique_ptr<ScreenCapturerLinux> capturer(new ScreenCapturerLinux()); |
| if (!capturer->Init(options)) |