• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #include "remoting/host/ipc_video_frame_capturer.h"
6 
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"
10 
11 namespace remoting {
12 
IpcVideoFrameCapturer(scoped_refptr<DesktopSessionProxy> desktop_session_proxy)13 IpcVideoFrameCapturer::IpcVideoFrameCapturer(
14     scoped_refptr<DesktopSessionProxy> desktop_session_proxy)
15     : callback_(NULL),
16       mouse_shape_observer_(NULL),
17       desktop_session_proxy_(desktop_session_proxy),
18       capture_pending_(false),
19       weak_factory_(this) {
20 }
21 
~IpcVideoFrameCapturer()22 IpcVideoFrameCapturer::~IpcVideoFrameCapturer() {
23 }
24 
Start(Callback * callback)25 void IpcVideoFrameCapturer::Start(Callback* callback) {
26   DCHECK(!callback_);
27   DCHECK(callback);
28   callback_ = callback;
29   desktop_session_proxy_->SetVideoCapturer(weak_factory_.GetWeakPtr());
30 }
31 
SetMouseShapeObserver(MouseShapeObserver * mouse_shape_observer)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;
37 }
38 
GetScreenList(ScreenList * screens)39 bool IpcVideoFrameCapturer::GetScreenList(ScreenList* screens) {
40   NOTIMPLEMENTED();
41   return false;
42 }
43 
SelectScreen(webrtc::ScreenId id)44 bool IpcVideoFrameCapturer::SelectScreen(webrtc::ScreenId id) {
45   NOTIMPLEMENTED();
46   return false;
47 }
48 
Capture(const webrtc::DesktopRegion & region)49 void IpcVideoFrameCapturer::Capture(const webrtc::DesktopRegion& region) {
50   DCHECK(!capture_pending_);
51   capture_pending_ = true;
52   desktop_session_proxy_->CaptureFrame();
53 }
54 
OnCaptureCompleted(scoped_ptr<webrtc::DesktopFrame> frame)55 void IpcVideoFrameCapturer::OnCaptureCompleted(
56     scoped_ptr<webrtc::DesktopFrame> frame) {
57   DCHECK(capture_pending_);
58   capture_pending_ = false;
59   callback_->OnCaptureCompleted(frame.release());
60 }
61 
OnCursorShapeChanged(scoped_ptr<webrtc::MouseCursorShape> cursor_shape)62 void IpcVideoFrameCapturer::OnCursorShapeChanged(
63     scoped_ptr<webrtc::MouseCursorShape> cursor_shape) {
64   if (mouse_shape_observer_)
65     mouse_shape_observer_->OnCursorShapeChanged(cursor_shape.release());
66 }
67 
68 }  // namespace remoting
69