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 11namespace remoting { 12 13ShapedDesktopCapturer::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 21ShapedDesktopCapturer::~ShapedDesktopCapturer() {} 22 23void ShapedDesktopCapturer::Start(webrtc::DesktopCapturer::Callback* callback) { 24 callback_ = callback; 25 desktop_capturer_->Start(this); 26} 27 28void ShapedDesktopCapturer::Capture(const webrtc::DesktopRegion& region) { 29 desktop_capturer_->Capture(region); 30} 31 32webrtc::SharedMemory* ShapedDesktopCapturer::CreateSharedMemory(size_t size) { 33 return callback_->CreateSharedMemory(size); 34} 35 36void 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