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 bool IpcVideoFrameCapturer::GetScreenList(ScreenList
* screens
) {
44 bool IpcVideoFrameCapturer::SelectScreen(webrtc::ScreenId id
) {
49 void IpcVideoFrameCapturer::Capture(const webrtc::DesktopRegion
& region
) {
50 DCHECK(!capture_pending_
);
51 capture_pending_
= true;
52 desktop_session_proxy_
->CaptureFrame();
55 void IpcVideoFrameCapturer::OnCaptureCompleted(
56 scoped_ptr
<webrtc::DesktopFrame
> frame
) {
57 DCHECK(capture_pending_
);
58 capture_pending_
= false;
59 callback_
->OnCaptureCompleted(frame
.release());
62 void IpcVideoFrameCapturer::OnCursorShapeChanged(
63 scoped_ptr
<webrtc::MouseCursorShape
> cursor_shape
) {
64 if (mouse_shape_observer_
)
65 mouse_shape_observer_
->OnCursorShapeChanged(cursor_shape
.release());
68 } // namespace remoting