1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "remoting/host/shaped_desktop_capturer.h" 6 7 #include "base/logging.h" 8 #include "remoting/host/desktop_shape_tracker.h" 9 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" 10 11 namespace remoting { 12 13 ShapedDesktopCapturer::ShapedDesktopCapturer( 14 scoped_ptr<webrtc::DesktopCapturer> desktop_capturer, 15 scoped_ptr<DesktopShapeTracker> shape_tracker) 16 : desktop_capturer_(desktop_capturer.Pass()), 17 shape_tracker_(shape_tracker.Pass()), 18 callback_(NULL) { 19 } 20 21 ShapedDesktopCapturer::~ShapedDesktopCapturer() {} 22 23 void ShapedDesktopCapturer::Start(webrtc::DesktopCapturer::Callback* callback) { 24 callback_ = callback; 25 desktop_capturer_->Start(this); 26 } 27 28 void ShapedDesktopCapturer::Capture(const webrtc::DesktopRegion& region) { 29 desktop_capturer_->Capture(region); 30 } 31 32 webrtc::SharedMemory* ShapedDesktopCapturer::CreateSharedMemory(size_t size) { 33 return callback_->CreateSharedMemory(size); 34 } 35 36 void ShapedDesktopCapturer::OnCaptureCompleted(webrtc::DesktopFrame* frame) { 37 shape_tracker_->RefreshDesktopShape(); 38 frame->set_shape(new webrtc::DesktopRegion(shape_tracker_->desktop_shape())); 39 callback_->OnCaptureCompleted(frame); 40 } 41 42 } // namespace remoting 43