// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "remoting/host/ipc_video_frame_capturer.h" #include "remoting/host/desktop_session_proxy.h" #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" #include "third_party/webrtc/modules/desktop_capture/mouse_cursor_shape.h" namespace remoting { IpcVideoFrameCapturer::IpcVideoFrameCapturer( scoped_refptr<DesktopSessionProxy> desktop_session_proxy) : callback_(NULL), mouse_shape_observer_(NULL), desktop_session_proxy_(desktop_session_proxy), capture_pending_(false), weak_factory_(this) { } IpcVideoFrameCapturer::~IpcVideoFrameCapturer() { } void IpcVideoFrameCapturer::Start(Callback* callback) { DCHECK(!callback_); DCHECK(callback); callback_ = callback; desktop_session_proxy_->SetVideoCapturer(weak_factory_.GetWeakPtr()); } void IpcVideoFrameCapturer::SetMouseShapeObserver( MouseShapeObserver* mouse_shape_observer) { DCHECK(!mouse_shape_observer_); DCHECK(mouse_shape_observer); mouse_shape_observer_ = mouse_shape_observer; } bool IpcVideoFrameCapturer::GetScreenList(ScreenList* screens) { NOTIMPLEMENTED(); return false; } bool IpcVideoFrameCapturer::SelectScreen(webrtc::ScreenId id) { NOTIMPLEMENTED(); return false; } void IpcVideoFrameCapturer::Capture(const webrtc::DesktopRegion& region) { DCHECK(!capture_pending_); capture_pending_ = true; desktop_session_proxy_->CaptureFrame(); } void IpcVideoFrameCapturer::OnCaptureCompleted( scoped_ptr<webrtc::DesktopFrame> frame) { DCHECK(capture_pending_); capture_pending_ = false; callback_->OnCaptureCompleted(frame.release()); } void IpcVideoFrameCapturer::OnCursorShapeChanged( scoped_ptr<webrtc::MouseCursorShape> cursor_shape) { if (mouse_shape_observer_) mouse_shape_observer_->OnCursorShapeChanged(cursor_shape.release()); } } // namespace remoting