1 // Copyright (c) 2012 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.
5 #include "remoting/host/ipc_video_frame_capturer.h"
7 #include "remoting/host/desktop_session_proxy.h"
8 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
9 #include "third_party/webrtc/modules/desktop_capture/mouse_cursor_shape.h"
13 IpcVideoFrameCapturer::IpcVideoFrameCapturer(
14 scoped_refptr<DesktopSessionProxy> desktop_session_proxy)
16 mouse_shape_observer_(NULL),
17 desktop_session_proxy_(desktop_session_proxy),
18 capture_pending_(false),
22 IpcVideoFrameCapturer::~IpcVideoFrameCapturer() {
25 void IpcVideoFrameCapturer::Start(Callback* callback) {
29 desktop_session_proxy_->SetVideoCapturer(weak_factory_.GetWeakPtr());
32 void IpcVideoFrameCapturer::SetMouseShapeObserver(
33 MouseShapeObserver* mouse_shape_observer) {
34 DCHECK(!mouse_shape_observer_);
35 DCHECK(mouse_shape_observer);
36 mouse_shape_observer_ = mouse_shape_observer;
39 void IpcVideoFrameCapturer::Capture(const webrtc::DesktopRegion& region) {
40 DCHECK(!capture_pending_);
41 capture_pending_ = true;
42 desktop_session_proxy_->CaptureFrame();
45 void IpcVideoFrameCapturer::OnCaptureCompleted(
46 scoped_ptr<webrtc::DesktopFrame> frame) {
47 DCHECK(capture_pending_);
48 capture_pending_ = false;
49 callback_->OnCaptureCompleted(frame.release());
52 void IpcVideoFrameCapturer::OnCursorShapeChanged(
53 scoped_ptr<webrtc::MouseCursorShape> cursor_shape) {
54 if (mouse_shape_observer_)
55 mouse_shape_observer_->OnCursorShapeChanged(cursor_shape.release());
58 } // namespace remoting