Index: webrtc/modules/desktop_capture/desktop_and_cursor_composer.cc |
diff --git a/webrtc/modules/desktop_capture/desktop_and_cursor_composer.cc b/webrtc/modules/desktop_capture/desktop_and_cursor_composer.cc |
index 4c6e27e561eaa19794df980f63bf9028924b697f..a4deda6ae95b915039735fafa7dfe1d454ab3923 100644 |
--- a/webrtc/modules/desktop_capture/desktop_and_cursor_composer.cc |
+++ b/webrtc/modules/desktop_capture/desktop_and_cursor_composer.cc |
@@ -57,7 +57,7 @@ void AlphaBlend(uint8_t* dest, int dest_stride, |
class DesktopFrameWithCursor : public DesktopFrame { |
public: |
// Takes ownership of |frame|. |
- DesktopFrameWithCursor(DesktopFrame* frame, |
+ DesktopFrameWithCursor(std::unique_ptr<DesktopFrame> frame, |
const MouseCursor& cursor, |
const DesktopVector& position); |
virtual ~DesktopFrameWithCursor(); |
@@ -71,15 +71,18 @@ class DesktopFrameWithCursor : public DesktopFrame { |
RTC_DISALLOW_COPY_AND_ASSIGN(DesktopFrameWithCursor); |
}; |
-DesktopFrameWithCursor::DesktopFrameWithCursor(DesktopFrame* frame, |
- const MouseCursor& cursor, |
- const DesktopVector& position) |
- : DesktopFrame(frame->size(), frame->stride(), |
- frame->data(), frame->shared_memory()), |
- original_frame_(frame) { |
+DesktopFrameWithCursor::DesktopFrameWithCursor( |
+ std::unique_ptr<DesktopFrame> frame, |
+ const MouseCursor& cursor, |
+ const DesktopVector& position) |
+ : DesktopFrame(frame->size(), |
+ frame->stride(), |
+ frame->data(), |
+ frame->shared_memory()) { |
set_dpi(frame->dpi()); |
set_capture_time_ms(frame->capture_time_ms()); |
mutable_updated_region()->Swap(frame->mutable_updated_region()); |
+ original_frame_ = std::move(frame); |
DesktopVector image_pos = position.subtract(cursor.hotspot()); |
DesktopRect target_rect = DesktopRect::MakeSize(cursor.image()->size()); |
@@ -152,14 +155,15 @@ void DesktopAndCursorComposer::SetExcludedWindow(WindowId window) { |
desktop_capturer_->SetExcludedWindow(window); |
} |
-void DesktopAndCursorComposer::OnCaptureCompleted(DesktopFrame* frame) { |
- if (frame && cursor_.get() && cursor_state_ == MouseCursorMonitor::INSIDE) { |
- DesktopFrameWithCursor* frame_with_cursor = |
- new DesktopFrameWithCursor(frame, *cursor_, cursor_position_); |
- frame = frame_with_cursor; |
+void DesktopAndCursorComposer::OnCaptureResult( |
+ DesktopCapturer::Result result, |
+ std::unique_ptr<DesktopFrame> frame) { |
+ if (frame && cursor_ && cursor_state_ == MouseCursorMonitor::INSIDE) { |
+ frame = std::unique_ptr<DesktopFrameWithCursor>(new DesktopFrameWithCursor( |
+ std::move(frame), *cursor_, cursor_position_)); |
} |
- callback_->OnCaptureCompleted(frame); |
+ callback_->OnCaptureResult(result, std::move(frame)); |
} |
void DesktopAndCursorComposer::OnMouseCursor(MouseCursor* cursor) { |